khatru: handle request synchronously until EOSE, no need for waitgroups.

This commit is contained in:
fiatjaf
2026-05-19 20:46:14 -03:00
parent b70dd86e7c
commit e11e32e3e2
2 changed files with 3 additions and 13 deletions
+2 -9
View File
@@ -295,9 +295,6 @@ func (rl *Relay) HandleWebsocket(w http.ResponseWriter, r *http.Request) {
case *nostr.ReqEnvelope:
rl.removeListenerId(ws, env.SubscriptionID)
eose := sync.WaitGroup{}
eose.Add(len(env.Filters))
// a context just for the "stored events" request handler
reqCtx, cancelReqCtx := context.WithCancelCause(ctx)
@@ -306,7 +303,7 @@ func (rl *Relay) HandleWebsocket(w http.ResponseWriter, r *http.Request) {
// handle each filter separately -- dispatching events as they're loaded from databases
for _, filter := range env.Filters {
err := rl.handleRequest(reqCtx, env.SubscriptionID, &eose, ws, filter)
err := rl.handleRequest(reqCtx, env.SubscriptionID, ws, filter)
if err != nil {
// fail everything if any filter is rejected
reason := err.Error()
@@ -324,11 +321,7 @@ func (rl *Relay) HandleWebsocket(w http.ResponseWriter, r *http.Request) {
}
}
go func() {
// when all events have been loaded from databases and dispatched we can fire the EOSE message
eose.Wait()
ws.WriteJSON(nostr.EOSEEnvelope(env.SubscriptionID))
}()
ws.WriteJSON(nostr.EOSEEnvelope(env.SubscriptionID))
case *nostr.CloseEnvelope:
id := string(*env)
rl.removeListenerId(ws, id)
+1 -4
View File
@@ -3,15 +3,12 @@ package khatru
import (
"context"
"errors"
"sync"
"fiatjaf.com/nostr"
"fiatjaf.com/nostr/nip45/hyperloglog"
)
func (rl *Relay) handleRequest(ctx context.Context, id string, eose *sync.WaitGroup, ws *WebSocket, filter nostr.Filter) error {
defer eose.Done()
func (rl *Relay) handleRequest(ctx context.Context, id string, ws *WebSocket, filter nostr.Filter) error {
// then check if we'll reject this filter (we apply this after overwriting
// because we may, for example, remove some things from the incoming filters
// that we know we don't support, and then if the end result is an empty