diff --git a/lmdb/delete.go b/lmdb/delete.go index a181034..5123696 100644 --- a/lmdb/delete.go +++ b/lmdb/delete.go @@ -3,20 +3,16 @@ package lmdb import ( "context" "encoding/hex" + "fmt" "github.com/PowerDNS/lmdb-go/lmdb" "github.com/nbd-wtf/go-nostr" ) func (b *LMDBBackend) DeleteEvent(ctx context.Context, evt *nostr.Event) error { - err := b.lmdbEnv.Update(func(txn *lmdb.Txn) error { + return b.lmdbEnv.Update(func(txn *lmdb.Txn) error { return b.delete(txn, evt) }) - if err != nil { - return err - } - - return nil } func (b *LMDBBackend) delete(txn *lmdb.Txn, evt *nostr.Event) error { @@ -27,17 +23,21 @@ func (b *LMDBBackend) delete(txn *lmdb.Txn, evt *nostr.Event) error { return nil } if err != nil { - return err + return fmt.Errorf("failed to get current idx for deleting %x: %w", evt.ID[0:8*2], err) } // calculate all index keys we have for this event and delete them for k := range b.getIndexKeysForEvent(evt) { err := txn.Del(k.dbi, k.key, idx) if err != nil { - return err + return fmt.Errorf("failed to delete index entry %s for %x: %w", b.keyName(k), evt.ID[0:8*2], err) } } // delete the raw event - return txn.Del(b.rawEventStore, idx, nil) + if err := txn.Del(b.rawEventStore, idx, nil); err != nil { + return fmt.Errorf("failed to delete raw event %x (idx %x): %w", evt.ID[0:8*2], idx, err) + } + + return nil } diff --git a/lmdb/helpers.go b/lmdb/helpers.go index 53a5550..d7b8e42 100644 --- a/lmdb/helpers.go +++ b/lmdb/helpers.go @@ -1,6 +1,7 @@ package lmdb import ( + "crypto/md5" "encoding/binary" "encoding/hex" "fmt" @@ -169,13 +170,15 @@ func (b *LMDBBackend) getTagIndexPrefix(tagValue string) (lmdb.DBI, []byte, int) } } - // index whatever else as utf-8, but limit it to 40 bytes - k = make([]byte, 40+4) - n := copy(k[0:40], tagValue) - offset = n + // index whatever else as a md5 hash of the contents + h := md5.New() + h.Write([]byte(tagValue)) + k = make([]byte, 0, 16+4) + k = h.Sum(k) + offset = 16 dbi = b.indexTag - return dbi, k[0 : n+4], offset + return dbi, k[0 : 16+4], offset } func (b *LMDBBackend) dbiName(dbi lmdb.DBI) string { diff --git a/lmdb/migration.go b/lmdb/migration.go index 5ba5579..160df6a 100644 --- a/lmdb/migration.go +++ b/lmdb/migration.go @@ -54,8 +54,8 @@ func (b *LMDBBackend) runMigrations() error { // // this is when we reindex everything - if version < 7 { - log.Println("[lmdb] migration 7: reindex everything") + if version < 8 { + log.Println("[lmdb] migration 8: reindex everything") if err := txn.Drop(b.indexId, false); err != nil { return err @@ -87,7 +87,7 @@ func (b *LMDBBackend) runMigrations() error { cursor, err := txn.OpenCursor(b.rawEventStore) if err != nil { - return fmt.Errorf("failed to open cursor in migration 7: %w", err) + return fmt.Errorf("failed to open cursor in migration 8: %w", err) } defer cursor.Close() @@ -116,7 +116,7 @@ func (b *LMDBBackend) runMigrations() error { for key := range b.getIndexKeysForEvent(evt) { if err := txn.Put(key.dbi, key.key, idx, 0); err != nil { - return fmt.Errorf("failed to save index %s for event %s (%v) on migration 7: %w", + return fmt.Errorf("failed to save index %s for event %s (%v) on migration 8: %w", b.keyName(key), evt.ID, idx, err) } } @@ -130,7 +130,7 @@ func (b *LMDBBackend) runMigrations() error { } // bump version - if err := b.setVersion(txn, 7); err != nil { + if err := b.setVersion(txn, 8); err != nil { return err } }