fix pinging relays: use the main relay context, not the relay connection temporary context.

This commit is contained in:
fiatjaf 2025-01-17 14:08:54 -03:00
parent 06a15fdaab
commit 3e1c0ddc7e
3 changed files with 10 additions and 7 deletions

View File

@ -3,9 +3,11 @@ package nostr
import (
"context"
"crypto/tls"
"errors"
"fmt"
"io"
"net/http"
"time"
ws "github.com/coder/websocket"
)
@ -51,5 +53,7 @@ func (c *Connection) Close() error {
}
func (c *Connection) Ping(ctx context.Context) error {
ctx, cancel := context.WithTimeoutCause(ctx, time.Millisecond*800, errors.New("ping took too long"))
defer cancel()
return c.conn.Ping(ctx)
}

View File

@ -186,7 +186,7 @@ func (r *Relay) ConnectWithTLS(ctx context.Context, tlsConfig *tls.Config) error
select {
case <-ticker.C:
if r.Connection != nil {
err := r.Connection.Ping(ctx)
err := r.Connection.Ping(r.connectionContext)
if err != nil {
InfoLogger.Printf("{%s} error writing ping: %v; closing websocket", r.URL, err)
r.Close() // this should trigger a context cancelation
@ -213,6 +213,7 @@ func (r *Relay) ConnectWithTLS(ctx context.Context, tlsConfig *tls.Config) error
for {
buf.Reset()
if err := conn.ReadMessage(r.connectionContext, buf); err != nil {
r.ConnectionError = err
r.close(err)

View File

@ -55,12 +55,10 @@ func TestFollowListRecursion(t *testing.T) {
results := make(chan result)
go func() {
for _, item := range followList.Items {
go func() {
fl := sys.FetchFollowList(ctx, item.Pubkey)
meta := sys.FetchProfileMetadata(ctx, item.Pubkey)
fmt.Println(" ~", item.Pubkey, meta.Name, len(fl.Items))
results <- result{item.Pubkey, fl, meta}
}()
fl := sys.FetchFollowList(ctx, item.Pubkey)
meta := sys.FetchProfileMetadata(ctx, item.Pubkey)
fmt.Println(" ~", item.Pubkey, meta.Name, len(fl.Items))
results <- result{item.Pubkey, fl, meta}
}
}()