Skip to content

Commit 2af8a0c

Browse files
committed
Check provider online status just before it is used
1 parent a5556b4 commit 2af8a0c

File tree

4 files changed

+22
-29
lines changed

4 files changed

+22
-29
lines changed

internal/endpoint.go

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,6 @@ type Endpoint struct {
2626
AddXForwardedHeaders bool `yaml:"add_xfwd_headers,omitempty"`
2727
}
2828

29-
// GetActiveProviders returns a list of providers that are currently considered online
30-
func (p *Endpoint) GetActiveProviders() []*Provider {
31-
var active []*Provider
32-
33-
for _, e := range p.Providers {
34-
if !e.online {
35-
continue
36-
}
37-
38-
active = append(active, e)
39-
}
40-
41-
return active
42-
}
43-
4429
func (e *Endpoint) HTTPHealthcheck(provider *Provider) error {
4530
// TODO move to healthcheck loop
4631
if provider.IsRateLimited() {

internal/http.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ var defaultClient = &http.Client{
2626
}
2727

2828
func ProxyHTTP(ctx context.Context, endpoint *Endpoint, req *rpc.BatchRequest, timing *servertiming.Header) (*rpc.BatchResponse, *Provider, error) {
29-
providers := endpoint.GetActiveProviders()
29+
for _, provider := range endpoint.Providers {
30+
if !provider.online {
31+
continue
32+
}
3033

31-
for _, provider := range providers {
3234
m := timing.NewMetric(provider.Name).Start()
3335
res, err := SendHTTPRPCRequest(ctx, provider, req)
3436
m.Stop()

internal/provider_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ func TestInvalidChainID(t *testing.T) {
4343
assert.Contains(t, err.Error(), "chainId mismatch")
4444

4545
// Verify no active endpoints are returned
46-
active := provider.GetActiveProviders()
47-
assert.Empty(t, active)
46+
for _, p := range provider.Providers {
47+
assert.False(t, p.online)
48+
}
4849
}
4950

5051
// TestRateLimitWithRetryAfter tests connecting to a provider that returns a 429 rate limit with retry-after header
@@ -85,8 +86,9 @@ func TestRateLimitWithRetryAfter(t *testing.T) {
8586
assert.True(t, provider.Providers[0].retryAt.Before(time.Now().Add(30*time.Second)))
8687

8788
// Verify endpoint is not returned as active during rate limiting
88-
active := provider.GetActiveProviders()
89-
assert.Empty(t, active)
89+
for _, p := range provider.Providers {
90+
assert.False(t, p.online)
91+
}
9092
}
9193

9294
// TestSlowProvider tests connecting to a provider that is slow to respond

internal/ws.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,18 @@ func (proxy *WebSocketProxy) pumpClient(client *Client) {
272272
}
273273

274274
// DialAnyProvider dials any provider and returns a WebSocketProxy
275-
func (proxy *WebSocketProxy) DialAnyProvider(provider *Endpoint, timing *servertiming.Header) (*Provider, error) {
276-
for _, endpoint := range provider.GetActiveProviders() {
277-
if endpoint.Ws == "" {
275+
func (proxy *WebSocketProxy) DialAnyProvider(e *Endpoint, timing *servertiming.Header) (*Provider, error) {
276+
for _, p := range e.Providers {
277+
if p.Ws == "" {
278278
continue
279279
}
280280

281-
m := timing.NewMetric(endpoint.Name).Start()
282-
err := proxy.DialProvider(provider, endpoint)
281+
if !p.online {
282+
continue
283+
}
284+
285+
m := timing.NewMetric(p.Name).Start()
286+
err := proxy.DialProvider(e, p)
283287
m.Stop()
284288

285289
// In case the request was closed before the provider connection was established
@@ -294,13 +298,13 @@ func (proxy *WebSocketProxy) DialAnyProvider(provider *Endpoint, timing *servert
294298
}
295299

296300
if err != nil {
297-
endpoint.SetStatus(false, err)
301+
p.SetStatus(false, err)
298302
continue
299303
}
300304

301-
endpoint.SetStatus(true, nil)
305+
p.SetStatus(true, nil)
302306

303-
return endpoint, nil
307+
return p, nil
304308
}
305309

306310
return nil, ErrNoProvidersAvailable

0 commit comments

Comments
 (0)