lmdb: make serial() used from multiple processes.

This commit is contained in:
fiatjaf
2025-12-21 22:20:54 -03:00
parent 99197d8321
commit dbd8f47674
2 changed files with 19 additions and 4 deletions

View File

@@ -51,10 +51,25 @@ func (b *LMDBBackend) Close() {
b.lmdbEnv.Close() b.lmdbEnv.Close()
} }
func (b *LMDBBackend) Serial() []byte { func (b *LMDBBackend) serial(txn *lmdb.Txn) []byte {
v := b.lastId.Add(1) cursor, err := txn.OpenCursor(b.rawEventStore)
if err != nil {
return nil
}
defer cursor.Close()
k, _, err := cursor.Get(nil, nil, lmdb.Last)
if lmdb.IsNotFound(err) {
vb := make([]byte, 4)
binary.BigEndian.PutUint32(vb[:], 1)
return vb
}
if err != nil {
return nil
}
lastId := binary.BigEndian.Uint32(k)
nextId := lastId + 1
vb := make([]byte, 4) vb := make([]byte, 4)
binary.BigEndian.PutUint32(vb[:], uint32(v)) binary.BigEndian.PutUint32(vb[:], nextId)
return vb return vb
} }

View File

@@ -48,7 +48,7 @@ func (b *LMDBBackend) save(txn *lmdb.Txn, evt nostr.Event) error {
return err return err
} }
idx := b.Serial() idx := b.serial(txn)
// raw event store // raw event store
if err := txn.Put(b.rawEventStore, idx, buf, 0); err != nil { if err := txn.Put(b.rawEventStore, idx, buf, 0); err != nil {
return err return err