From 09e298c1ba476f076850f48e479e7e8564b9783b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caner=20=C3=87=C4=B1dam?= Date: Tue, 13 May 2025 13:26:06 +0300 Subject: [PATCH 1/2] add error to etherclient metrics handler --- etherclient/backoff.go | 6 +++--- etherclient/client.go | 6 +++--- etherclient/mocks/mock_client.go | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/etherclient/backoff.go b/etherclient/backoff.go index d5ab242..b2d5be8 100644 --- a/etherclient/backoff.go +++ b/etherclient/backoff.go @@ -59,9 +59,9 @@ func (ec *etherClient) withBackoff( // If metrics handler is set, call with the RPC URL and the client method that was used. if ec.metricsHandler != nil { rpcUrl := wrapper.url - u, err := url.Parse(rpcUrl) - if err == nil { - ec.metricsHandler(u.Host, method) + u, parseErr := url.Parse(rpcUrl) + if parseErr == nil { + ec.metricsHandler(u.Host, method, err) } } diff --git a/etherclient/client.go b/etherclient/client.go index e282517..eaa6cd9 100644 --- a/etherclient/client.go +++ b/etherclient/client.go @@ -57,7 +57,7 @@ type EtherClient interface { Extras SetRetryInterval(d time.Duration) - SetMetricsHandler(h func(rpcHost, clientMethod string)) + SetMetricsHandler(h func(rpcHost, clientMethod string, err error)) } type Extras interface { @@ -85,7 +85,7 @@ type etherClient struct { provider provider.Provider[*ethClientWrapper] retryInterval time.Duration - metricsHandler func(rpcHost, clientMethod string) + metricsHandler func(rpcHost, clientMethod string, err error) } var _ EtherClient = ðerClient{} @@ -121,7 +121,7 @@ func (ec *etherClient) SetRetryInterval(d time.Duration) { ec.retryInterval = d } -func (ec *etherClient) SetMetricsHandler(h func(rpcHost, clientMethod string)) { +func (ec *etherClient) SetMetricsHandler(h func(rpcHost, clientMethod string, err error)) { ec.metricsHandler = h } diff --git a/etherclient/mocks/mock_client.go b/etherclient/mocks/mock_client.go index cf986cf..325dac2 100644 --- a/etherclient/mocks/mock_client.go +++ b/etherclient/mocks/mock_client.go @@ -1193,7 +1193,7 @@ func (mr *MockEtherClientMockRecorder) SendTransaction(ctx, tx interface{}) *gom } // SetMetricsHandler mocks base method. -func (m *MockEtherClient) SetMetricsHandler(h func(string, string)) { +func (m *MockEtherClient) SetMetricsHandler(h func(string, string, error)) { m.ctrl.T.Helper() m.ctrl.Call(m, "SetMetricsHandler", h) } From 88eebd0ba34ef26fb90e2d355c4942773e36abb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caner=20=C3=87=C4=B1dam?= Date: Tue, 13 May 2025 13:29:48 +0300 Subject: [PATCH 2/2] clarify error use --- etherclient/backoff.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/etherclient/backoff.go b/etherclient/backoff.go index b2d5be8..3bd881b 100644 --- a/etherclient/backoff.go +++ b/etherclient/backoff.go @@ -53,7 +53,7 @@ func (ec *etherClient) withBackoff( wrapper := ec.provider.Provide() ethClient := wrapper.Client tCtx, cancel := context.WithTimeout(ctx, backoffContextTimeout) - err := operation(tCtx, ethClient) + opErr := operation(tCtx, ethClient) cancel() // If metrics handler is set, call with the RPC URL and the client method that was used. @@ -61,15 +61,15 @@ func (ec *etherClient) withBackoff( rpcUrl := wrapper.url u, parseErr := url.Parse(rpcUrl) if parseErr == nil { - ec.metricsHandler(u.Host, method, err) + ec.metricsHandler(u.Host, method, opErr) } } - if err != nil { + if opErr != nil { // Move onto the next provider. ec.provider.Next() } - return handleRetryErr(ctx, method, err) + return handleRetryErr(ctx, method, opErr) }, bo) if err != nil { logrus.WithError(err).WithField("method", method).Error("retry failed with error")