From 01e4c2bc5ad53b0fdd1bb8805e184befe662da20 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Thu, 4 Jul 2024 16:15:50 -0300 Subject: [PATCH] bolt: prevent duplicate index values from overwriting each other. --- bolt/delete.go | 2 +- bolt/query.go | 11 +++++------ bolt/save.go | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/bolt/delete.go b/bolt/delete.go index b44b9da..90bd31b 100644 --- a/bolt/delete.go +++ b/bolt/delete.go @@ -22,7 +22,7 @@ func (b *BoltBackend) DeleteEvent(ctx context.Context, evt *nostr.Event) error { // calculate all index keys we have for this event and delete them for _, k := range getIndexKeysForEvent(evt) { bucket := txn.Bucket(k.bucket) - bucket.Delete(k.key) + bucket.Delete(append(k.key, seqb...)) } // delete the raw event diff --git a/bolt/query.go b/bolt/query.go index d1ef0fd..4a92274 100644 --- a/bolt/query.go +++ b/bolt/query.go @@ -52,7 +52,6 @@ func (b *BoltBackend) QueryEvents(ctx context.Context, filter nostr.Filter) (cha for _, q := range queries { q := q - pulled := 0 // this query will be hardcapped at this global limit go b.db.View(func(txn *bolt.Tx) error { @@ -63,14 +62,14 @@ func (b *BoltBackend) QueryEvents(ctx context.Context, filter nostr.Filter) (cha c := bucket.Cursor() - k, v := c.Seek(q.startingPoint) + k, _ := c.Seek(q.startingPoint) if k == nil { - k, v = c.Last() + k, _ = c.Last() } else { - k, v = c.Prev() + k, _ = c.Prev() } - for ; k != nil && bytes.HasPrefix(k, q.prefix); k, v = c.Prev() { + for ; k != nil && bytes.HasPrefix(k, q.prefix); k, _ = c.Prev() { // "id" indexes don't contain a timestamp if !q.skipTimestamp { createdAt := binary.BigEndian.Uint32(k[len(k)-4:]) @@ -80,7 +79,7 @@ func (b *BoltBackend) QueryEvents(ctx context.Context, filter nostr.Filter) (cha } // fetch actual event - val := raw.Get(v) + val := raw.Get(k[len(k)-8:]) evt := &nostr.Event{} if err := nostr_binary.Unmarshal(val, evt); err != nil { log.Printf("bolt: value read error (id %x): %s\n", val[0:32], err) diff --git a/bolt/save.go b/bolt/save.go index 919f12f..1765a28 100644 --- a/bolt/save.go +++ b/bolt/save.go @@ -44,7 +44,7 @@ func (b *BoltBackend) SaveEvent(ctx context.Context, evt *nostr.Event) error { for _, km := range getIndexKeysForEvent(evt) { bucket := txn.Bucket(km.bucket) - if err := bucket.Put(km.key, seqb); err != nil { + if err := bucket.Put(append(km.key, seqb...), nil); err != nil { return err } }