nip46: handle ok=false from RPC calls better for instant failure.
This commit is contained in:
+16
-5
@@ -265,24 +265,35 @@ func (bunker *BunkerClient) RPC(ctx context.Context, method string, params []str
|
|||||||
bunker.listeners.Delete(id)
|
bunker.listeners.Delete(id)
|
||||||
close(respWaiter)
|
close(respWaiter)
|
||||||
}()
|
}()
|
||||||
hasWorked := make(chan struct{})
|
relayConnectionWorked := make(chan struct{})
|
||||||
|
bunkerConnectionWorked := make(chan struct{})
|
||||||
|
|
||||||
for _, url := range bunker.relays {
|
for _, url := range bunker.relays {
|
||||||
go func(url string) {
|
go func(url string) {
|
||||||
relay, err := bunker.pool.EnsureRelay(url)
|
relay, err := bunker.pool.EnsureRelay(url)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
select {
|
select {
|
||||||
case hasWorked <- struct{}{}:
|
case relayConnectionWorked <- struct{}{}:
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
relay.Publish(ctx, evt)
|
if err := relay.Publish(ctx, evt); err == nil {
|
||||||
|
select {
|
||||||
|
case bunkerConnectionWorked <- struct{}{}:
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}(url)
|
}(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case <-hasWorked:
|
case <-relayConnectionWorked:
|
||||||
// continue
|
select {
|
||||||
|
case <-bunkerConnectionWorked:
|
||||||
|
// continue
|
||||||
|
case <-ctx.Done():
|
||||||
|
return "", fmt.Errorf("couldn't reach the bunker, it is probably offline")
|
||||||
|
}
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return "", fmt.Errorf("couldn't connect to any relay")
|
return "", fmt.Errorf("couldn't connect to any relay")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user