lmdb: two small fixes, and stop doing WRITEMAP so it stops crashing.
This commit is contained in:
@@ -109,7 +109,7 @@ func (b *LMDBBackend) initialize() error {
|
|||||||
env.SetMapSize(b.MapSize)
|
env.SetMapSize(b.MapSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := env.Open(b.Path, lmdb.NoTLS|lmdb.WriteMap|b.extraFlags, 0644); err != nil {
|
if err := env.Open(b.Path, lmdb.NoTLS|b.extraFlags, 0644); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
b.lmdbEnv = env
|
b.lmdbEnv = env
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ func (b *LMDBBackend) queryByIds(txn *lmdb.Txn, ids []nostr.ID, yield func(nostr
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
txn.Get(b.rawEventStore, idx)
|
|
||||||
bin, err := txn.Get(b.rawEventStore, idx)
|
bin, err := txn.Get(b.rawEventStore, idx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package lmdb
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"iter"
|
|
||||||
|
|
||||||
"fiatjaf.com/nostr"
|
"fiatjaf.com/nostr"
|
||||||
"github.com/PowerDNS/lmdb-go/lmdb"
|
"github.com/PowerDNS/lmdb-go/lmdb"
|
||||||
@@ -26,25 +25,21 @@ func (b *LMDBBackend) ReplaceEvent(evt nostr.Event) (deleted []nostr.Event, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
// now we fetch the past events, whatever they are, delete them and then save the new
|
// now we fetch the past events, whatever they are, delete them and then save the new
|
||||||
var qerr error
|
|
||||||
var results iter.Seq[nostr.Event] = func(yield func(nostr.Event) bool) {
|
|
||||||
qerr = b.query(txn, filter, 10 /* in theory limit could be just 1 and this should work */, yield)
|
|
||||||
}
|
|
||||||
if qerr != nil {
|
|
||||||
return fmt.Errorf("failed to query past events with %s: %w", filter, qerr)
|
|
||||||
}
|
|
||||||
|
|
||||||
shouldStore := true
|
shouldStore := true
|
||||||
for previous := range results {
|
if qerr := b.query(txn, filter, 10 /* could be just 1 */, func(previous nostr.Event) bool {
|
||||||
if nostr.IsOlder(previous, evt) {
|
if nostr.IsOlder(previous, evt) {
|
||||||
if qerr := b.delete(txn, previous.ID); qerr != nil {
|
if qerr := b.delete(txn, previous.ID); qerr != nil {
|
||||||
return fmt.Errorf("failed to delete event %s for replacing: %w", previous.ID, qerr)
|
qerr = fmt.Errorf("failed to delete event %s for replacing: %w", previous.ID, qerr)
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
deleted = append(deleted, previous)
|
deleted = append(deleted, previous)
|
||||||
} else {
|
} else {
|
||||||
// there is a newer event already stored, so we won't store this
|
// there is a newer event already stored, so we won't store this
|
||||||
shouldStore = false
|
shouldStore = false
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
|
}); qerr != nil {
|
||||||
|
return fmt.Errorf("failed to query past events with %s: %w", filter, qerr)
|
||||||
}
|
}
|
||||||
if shouldStore {
|
if shouldStore {
|
||||||
return b.save(txn, evt)
|
return b.save(txn, evt)
|
||||||
|
|||||||
Reference in New Issue
Block a user