aboutsummaryrefslogtreecommitdiff
path: root/internal/storage
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-02-26 15:19:05 -0800
committerFuwn <[email protected]>2026-02-26 15:19:05 -0800
commit4c13bd523d4deb36d8e7dfce6d446f701674e073 (patch)
treed189cbbf09742c6b9408a5450db34dba34fe3074 /internal/storage
parentfeat: harden launch readiness with versioning, metrics, and resilience (diff)
downloadplutia-test-4c13bd523d4deb36d8e7dfce6d446f701674e073.tar.xz
plutia-test-4c13bd523d4deb36d8e7dfce6d446f701674e073.zip
feat: add read-only PLC API compatibility endpoints
Diffstat (limited to 'internal/storage')
-rw-r--r--internal/storage/pebble_store.go27
-rw-r--r--internal/storage/store.go1
2 files changed, 28 insertions, 0 deletions
diff --git a/internal/storage/pebble_store.go b/internal/storage/pebble_store.go
index 5e15d7e..109310f 100644
--- a/internal/storage/pebble_store.go
+++ b/internal/storage/pebble_store.go
@@ -228,6 +228,33 @@ func (p *PebbleStore) GetOpSeqRef(seq uint64) (types.BlockRefV1, bool, error) {
return ref, true, nil
}
+func (p *PebbleStore) ForEachOpSeqRef(fn func(seq uint64, ref types.BlockRefV1) error) error {
+ iter, err := p.db.NewIter(&pebble.IterOptions{LowerBound: []byte("opseq:"), UpperBound: []byte("opseq;")})
+ if err != nil {
+ return fmt.Errorf("new iterator: %w", err)
+ }
+ defer iter.Close()
+
+ for iter.First(); iter.Valid(); iter.Next() {
+ key := iter.Key()
+ if len(key) < len("opseq:")+8 {
+ continue
+ }
+ seq := binary.BigEndian.Uint64(key[len("opseq:"):])
+ var ref types.BlockRefV1
+ if err := json.Unmarshal(iter.Value(), &ref); err != nil {
+ return fmt.Errorf("unmarshal opseq ref: %w", err)
+ }
+ if err := fn(seq, ref); err != nil {
+ return err
+ }
+ }
+ if err := iter.Error(); err != nil {
+ return fmt.Errorf("iterate opseq refs: %w", err)
+ }
+ return nil
+}
+
func (p *PebbleStore) PutBlockHash(blockID uint64, hash string) error {
return p.db.Set(blockKey(blockID), []byte(hash), pebble.Sync)
}
diff --git a/internal/storage/store.go b/internal/storage/store.go
index 59055b7..05ce5ae 100644
--- a/internal/storage/store.go
+++ b/internal/storage/store.go
@@ -34,6 +34,7 @@ type Store interface {
PutOpSeqRef(seq uint64, ref types.BlockRefV1) error
GetOpSeqRef(seq uint64) (types.BlockRefV1, bool, error)
+ ForEachOpSeqRef(fn func(seq uint64, ref types.BlockRefV1) error) error
PutBlockHash(blockID uint64, hash string) error
GetBlockHash(blockID uint64) (string, bool, error)