Skip to content

Commit

Permalink
mmm: DropLayer()
Browse files Browse the repository at this point in the history
  • Loading branch information
fiatjaf committed Feb 16, 2025
1 parent 2898e57 commit 0b24c4c
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 1 deletion.
48 changes: 48 additions & 0 deletions mmm/mmmm.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,9 @@ func (b *MultiMmapManager) Init() error {
}

func (b *MultiMmapManager) EnsureLayer(name string, il *IndexingLayer) error {
b.mutex.Lock()
defer b.mutex.Unlock()

il.mmmm = b
il.name = name

Expand Down Expand Up @@ -183,6 +186,51 @@ func (b *MultiMmapManager) EnsureLayer(name string, il *IndexingLayer) error {
return nil
}

func (b *MultiMmapManager) DropLayer(name string) error {
b.mutex.Lock()
defer b.mutex.Unlock()

// get layer reference
idx := slices.IndexFunc(b.layers, func(il *IndexingLayer) bool { return il.name == name })
if idx == -1 {
return fmt.Errorf("layer '%s' doesn't exist", name)
}
il := b.layers[idx]

// remove layer references from global indexes
err := b.lmdbEnv.Update(func(txn *lmdb.Txn) error {
txn.RawRead = true
return b.removeAllReferencesFromLayer(txn, il.id)
})
if err != nil {
return err
}

// delete everything (the indexes) from this layer db actually
err = il.lmdbEnv.Update(func(txn *lmdb.Txn) error {
for _, dbi := range []lmdb.DBI{
il.indexCreatedAt,
il.indexKind,
il.indexPubkey,
il.indexPubkeyKind,
il.indexTag,
il.indexTag32,
il.indexTagAddr,
il.indexPTagKind,
} {
if err := txn.Drop(dbi, true); err != nil {
return err
}
}
return nil
})
if err != nil {
return err
}

return il.lmdbEnv.Close()
}

// getNextAvailableLayerId iterates through all existing layers to find a vacant id
func (b *MultiMmapManager) getNextAvailableLayerId(txn *lmdb.Txn) (uint16, error) {
cursor, err := txn.OpenCursor(b.knownLayers)
Expand Down
7 changes: 6 additions & 1 deletion mmm/save.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,12 @@ func (il *IndexingLayer) SaveEvent(ctx context.Context, evt *nostr.Event) error
return nil
}

func (b *MultiMmapManager) storeOn(mmmtxn *lmdb.Txn, ils []*IndexingLayer, iltxns []*lmdb.Txn, evt *nostr.Event) (stored bool, err error) {
func (b *MultiMmapManager) storeOn(
mmmtxn *lmdb.Txn,
ils []*IndexingLayer,
iltxns []*lmdb.Txn,
evt *nostr.Event,
) (stored bool, err error) {
// sanity checking
if evt.CreatedAt > maxuint32 || evt.Kind > maxuint16 {
return false, fmt.Errorf("event with values out of expected boundaries")
Expand Down

0 comments on commit 0b24c4c

Please sign in to comment.