khatru: fix bbolt halting problem by deleting outside of the loop that fetches events to be deleted.

fixes nostr:nevent1qvzqqqqx25pzq2f38nys0gq4hs5k4l4s426689psdk7d52kzjk9s0ypne2nt7927qy88wumn8ghj7mn0wvhxcmmv9uq32amnwvaz7tmjv4kxz7fwv3sk6atn9e5k7tcqyphrdv7jerr3f5mtlpcl7j7dg26ecxj9vrd5pyf0jknkqmp5qyyj28gxd3q
This commit is contained in:
fiatjaf
2025-12-19 00:23:16 -03:00
parent 78d8f36e2d
commit c6bd1ee446
2 changed files with 84 additions and 8 deletions

View File

@@ -8,6 +8,7 @@ import (
"strings"
"fiatjaf.com/nostr"
"golang.org/x/sync/errgroup"
)
var (
@@ -61,20 +62,24 @@ func (rl *Relay) handleDeleteRequest(ctx context.Context, evt nostr.Event) error
ctx := context.WithValue(ctx, internalCallKey, struct{}{})
errg, ctx := errgroup.WithContext(ctx)
for target := range rl.QueryStored(ctx, f) {
// got the event, now check if the user can delete it
if target.PubKey == evt.PubKey {
// delete it
if err := rl.DeleteEvent(ctx, target.ID); err != nil {
return err
}
errg.Go(func() error {
if err := rl.DeleteEvent(ctx, target.ID); err != nil {
return err
}
// if it was tracked to be expired that is not needed anymore
if rl.expirationManager != nil {
rl.expirationManager.removeEvent(target.ID)
}
// if it was tracked to be expired that is not needed anymore
if rl.expirationManager != nil {
rl.expirationManager.removeEvent(target.ID)
}
haveDeletedSomething = true
haveDeletedSomething = true
return nil
})
} else {
// fail and stop here
return ErrNotAuthor
@@ -83,6 +88,10 @@ func (rl *Relay) handleDeleteRequest(ctx context.Context, evt nostr.Event) error
// don't try to query this same event again
break
}
if err := errg.Wait(); err != nil {
return err
}
}
}