badger/lmdb: delete doesn't require refetching.

This commit is contained in:
fiatjaf
2023-12-06 06:49:49 -03:00
parent f2cccb0fce
commit 6443b73eab
2 changed files with 9 additions and 36 deletions

View File

@@ -3,11 +3,11 @@ package badger
import ( import (
"context" "context"
"encoding/hex" "encoding/hex"
"fmt"
"log" "log"
"github.com/dgraph-io/badger/v4" "github.com/dgraph-io/badger/v4"
"github.com/nbd-wtf/go-nostr" "github.com/nbd-wtf/go-nostr"
nostr_binary "github.com/nbd-wtf/go-nostr/binary"
) )
var serialDelete uint32 = 0 var serialDelete uint32 = 0
@@ -39,33 +39,18 @@ func (b *BadgerBackend) DeleteEvent(ctx context.Context, evt *nostr.Event) error
return nil return nil
} }
// fetch the event // set this so we'll run the GC later
item, err := txn.Get(idx) deletionHappened = true
if err != nil {
return err
}
item.Value(func(val []byte) error { // calculate all index keys we have for this event and delete them
evt := &nostr.Event{} for _, k := range getIndexKeysForEvent(evt, idx[1:]) {
if err := nostr_binary.Unmarshal(val, evt); err != nil { if err := txn.Delete(k); err != nil {
return err return err
} }
}
// set this so we'll run the GC later // delete the raw event
deletionHappened = true return txn.Delete(idx)
// calculate all index keys we have for this event and delete them
for _, k := range getIndexKeysForEvent(evt, idx[1:]) {
if err := txn.Delete(k); err != nil {
return err
}
}
// delete the raw event
return txn.Delete(idx)
})
return nil
}) })
if err != nil { if err != nil {
return err return err

View File

@@ -6,7 +6,6 @@ import (
"github.com/PowerDNS/lmdb-go/lmdb" "github.com/PowerDNS/lmdb-go/lmdb"
"github.com/nbd-wtf/go-nostr" "github.com/nbd-wtf/go-nostr"
nostr_binary "github.com/nbd-wtf/go-nostr/binary"
) )
func (b *LMDBBackend) DeleteEvent(ctx context.Context, evt *nostr.Event) error { func (b *LMDBBackend) DeleteEvent(ctx context.Context, evt *nostr.Event) error {
@@ -21,17 +20,6 @@ func (b *LMDBBackend) DeleteEvent(ctx context.Context, evt *nostr.Event) error {
return err return err
} }
// fetch the event
val, err := txn.Get(b.rawEventStore, idx)
if err != nil {
return err
}
evt := &nostr.Event{}
if err := nostr_binary.Unmarshal(val, evt); err != nil {
return err
}
// calculate all index keys we have for this event and delete them // calculate all index keys we have for this event and delete them
for _, k := range b.getIndexKeysForEvent(evt) { for _, k := range b.getIndexKeysForEvent(evt) {
if err := txn.Del(k.dbi, k.key, nil); err != nil { if err := txn.Del(k.dbi, k.key, nil); err != nil {