Skip to content

Commit f02f323

Browse files
warp: refactor warp handler stats (#944)
* warp: refactor warp handler stats * warp: update handler stats var name to signatureRequestDuration --------- Co-authored-by: Ceyhun Onur <ceyhun.onur@avalabs.org>
1 parent a439381 commit f02f323

File tree

5 files changed

+66
-128
lines changed

5 files changed

+66
-128
lines changed

plugin/evm/network_handler.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"github.com/ava-labs/subnet-evm/trie"
1717
"github.com/ava-labs/subnet-evm/warp"
1818
warpHandlers "github.com/ava-labs/subnet-evm/warp/handlers"
19-
warpStats "github.com/ava-labs/subnet-evm/warp/handlers/stats"
2019
)
2120

2221
var _ message.RequestHandler = &networkHandler{}
@@ -25,7 +24,7 @@ type networkHandler struct {
2524
stateTrieLeafsRequestHandler *syncHandlers.LeafsRequestHandler
2625
blockRequestHandler *syncHandlers.BlockRequestHandler
2726
codeRequestHandler *syncHandlers.CodeRequestHandler
28-
signatureRequestHandler warpHandlers.SignatureRequestHandler
27+
signatureRequestHandler *warpHandlers.SignatureRequestHandler
2928
}
3029

3130
// newNetworkHandler constructs the handler for serving network requests.
@@ -41,7 +40,7 @@ func newNetworkHandler(
4140
stateTrieLeafsRequestHandler: syncHandlers.NewLeafsRequestHandler(evmTrieDB, provider, networkCodec, syncStats),
4241
blockRequestHandler: syncHandlers.NewBlockRequestHandler(provider, networkCodec, syncStats),
4342
codeRequestHandler: syncHandlers.NewCodeRequestHandler(diskDB, networkCodec, syncStats),
44-
signatureRequestHandler: warpHandlers.NewSignatureRequestHandler(warpBackend, networkCodec, warpStats.NewStats()),
43+
signatureRequestHandler: warpHandlers.NewSignatureRequestHandler(warpBackend, networkCodec),
4544
}
4645
}
4746

warp/handlers/signature_request.go

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,21 @@ import (
1212
"github.com/ava-labs/avalanchego/utils/crypto/bls"
1313
"github.com/ava-labs/subnet-evm/plugin/evm/message"
1414
"github.com/ava-labs/subnet-evm/warp"
15-
"github.com/ava-labs/subnet-evm/warp/handlers/stats"
1615
"github.com/ethereum/go-ethereum/log"
1716
)
1817

19-
// SignatureRequestHandler is a peer.RequestHandler for message.SignatureRequest
20-
// serving requested BLS signature data
21-
type SignatureRequestHandler interface {
22-
OnSignatureRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, signatureRequest message.SignatureRequest) ([]byte, error)
23-
}
24-
25-
// signatureRequestHandler implements the SignatureRequestHandler interface
26-
type signatureRequestHandler struct {
18+
// SignatureRequestHandler serves warp signature requests. It is a peer.RequestHandler for message.SignatureRequest.
19+
type SignatureRequestHandler struct {
2720
backend warp.Backend
2821
codec codec.Manager
29-
stats stats.SignatureRequestHandlerStats
22+
stats *handlerStats
3023
}
3124

32-
func NewSignatureRequestHandler(backend warp.Backend, codec codec.Manager, stats stats.SignatureRequestHandlerStats) SignatureRequestHandler {
33-
return &signatureRequestHandler{
25+
func NewSignatureRequestHandler(backend warp.Backend, codec codec.Manager) *SignatureRequestHandler {
26+
return &SignatureRequestHandler{
3427
backend: backend,
3528
codec: codec,
36-
stats: stats,
29+
stats: newStats(),
3730
}
3831
}
3932

@@ -42,7 +35,7 @@ func NewSignatureRequestHandler(backend warp.Backend, codec codec.Manager, stats
4235
// Expects returned errors to be treated as FATAL
4336
// Returns empty response if signature is not found
4437
// Assumes ctx is active
45-
func (s *signatureRequestHandler) OnSignatureRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, signatureRequest message.SignatureRequest) ([]byte, error) {
38+
func (s *SignatureRequestHandler) OnSignatureRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, signatureRequest message.SignatureRequest) ([]byte, error) {
4639
startTime := time.Now()
4740
s.stats.IncSignatureRequest()
4841

warp/handlers/signature_request_test.go

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
avalancheWarp "github.com/ava-labs/avalanchego/vms/platformvm/warp"
1616
"github.com/ava-labs/subnet-evm/plugin/evm/message"
1717
"github.com/ava-labs/subnet-evm/warp"
18-
"github.com/ava-labs/subnet-evm/warp/handlers/stats"
1918
"github.com/stretchr/testify/require"
2019
)
2120

@@ -38,24 +37,22 @@ func TestSignatureHandler(t *testing.T) {
3837
unknownMessageID := ids.GenerateTestID()
3938

4039
emptySignature := [bls.SignatureLen]byte{}
41-
mockHandlerStats := &stats.MockSignatureRequestHandlerStats{}
42-
signatureRequestHandler := NewSignatureRequestHandler(backend, message.Codec, mockHandlerStats)
4340

4441
tests := map[string]struct {
4542
setup func() (request message.SignatureRequest, expectedResponse []byte)
46-
verifyStats func(t *testing.T, stats *stats.MockSignatureRequestHandlerStats)
43+
verifyStats func(t *testing.T, stats *handlerStats)
4744
}{
4845
"normal": {
4946
setup: func() (request message.SignatureRequest, expectedResponse []byte) {
5047
return message.SignatureRequest{
5148
MessageID: messageID,
5249
}, signature[:]
5350
},
54-
verifyStats: func(t *testing.T, stats *stats.MockSignatureRequestHandlerStats) {
55-
require.EqualValues(t, 1, mockHandlerStats.SignatureRequestCount)
56-
require.EqualValues(t, 1, mockHandlerStats.SignatureRequestHit)
57-
require.EqualValues(t, 0, mockHandlerStats.SignatureRequestMiss)
58-
require.Greater(t, mockHandlerStats.SignatureRequestDuration, time.Duration(0))
51+
verifyStats: func(t *testing.T, stats *handlerStats) {
52+
require.EqualValues(t, 1, stats.signatureRequest.Count())
53+
require.EqualValues(t, 1, stats.signatureHit.Count())
54+
require.EqualValues(t, 0, stats.signatureMiss.Count())
55+
require.Greater(t, stats.signatureRequestDuration.Value(), time.Duration(0))
5956
},
6057
},
6158
"unknown": {
@@ -64,27 +61,28 @@ func TestSignatureHandler(t *testing.T) {
6461
MessageID: unknownMessageID,
6562
}, emptySignature[:]
6663
},
67-
verifyStats: func(t *testing.T, stats *stats.MockSignatureRequestHandlerStats) {
68-
require.EqualValues(t, 1, mockHandlerStats.SignatureRequestCount)
69-
require.EqualValues(t, 1, mockHandlerStats.SignatureRequestMiss)
70-
require.EqualValues(t, 0, mockHandlerStats.SignatureRequestHit)
71-
require.Greater(t, mockHandlerStats.SignatureRequestDuration, time.Duration(0))
64+
verifyStats: func(t *testing.T, stats *handlerStats) {
65+
require.EqualValues(t, 1, stats.signatureRequest.Count())
66+
require.EqualValues(t, 0, stats.signatureHit.Count())
67+
require.EqualValues(t, 1, stats.signatureMiss.Count())
68+
require.Greater(t, stats.signatureRequestDuration.Value(), time.Duration(0))
7269
},
7370
},
7471
}
7572

7673
for name, test := range tests {
77-
// Reset stats before each test
78-
mockHandlerStats.Reset()
79-
8074
t.Run(name, func(t *testing.T) {
75+
handler := NewSignatureRequestHandler(backend, message.Codec)
76+
handler.stats.Clear()
77+
8178
request, expectedResponse := test.setup()
82-
responseBytes, err := signatureRequestHandler.OnSignatureRequest(context.Background(), ids.GenerateTestNodeID(), 1, request)
79+
responseBytes, err := handler.OnSignatureRequest(context.Background(), ids.GenerateTestNodeID(), 1, request)
8380
require.NoError(t, err)
8481

82+
test.verifyStats(t, handler.stats)
83+
8584
// If the expected response is empty, assert that the handler returns an empty response and return early.
8685
if len(expectedResponse) == 0 {
87-
test.verifyStats(t, mockHandlerStats)
8886
require.Len(t, responseBytes, 0, "expected response to be empty")
8987
return
9088
}
@@ -93,7 +91,6 @@ func TestSignatureHandler(t *testing.T) {
9391
require.NoError(t, err, "error unmarshalling SignatureResponse")
9492

9593
require.Equal(t, expectedResponse, response.Signature[:])
96-
test.verifyStats(t, mockHandlerStats)
9794
})
9895
}
9996
}

warp/handlers/stats.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// (c) 2023, Ava Labs, Inc. All rights reserved.
2+
// See the file LICENSE for licensing terms.
3+
4+
package handlers
5+
6+
import (
7+
"time"
8+
9+
"github.com/ava-labs/subnet-evm/metrics"
10+
)
11+
12+
type handlerStats struct {
13+
// SignatureRequestHandler metrics
14+
signatureRequest metrics.Counter
15+
signatureHit metrics.Counter
16+
signatureMiss metrics.Counter
17+
signatureRequestDuration metrics.Gauge
18+
}
19+
20+
func newStats() *handlerStats {
21+
return &handlerStats{
22+
signatureRequest: metrics.GetOrRegisterCounter("signature_request_count", nil),
23+
signatureHit: metrics.GetOrRegisterCounter("signature_request_hit", nil),
24+
signatureMiss: metrics.GetOrRegisterCounter("signature_request_miss", nil),
25+
signatureRequestDuration: metrics.GetOrRegisterGauge("signature_request_duration", nil),
26+
}
27+
}
28+
29+
func (h *handlerStats) IncSignatureRequest() { h.signatureRequest.Inc(1) }
30+
func (h *handlerStats) IncSignatureHit() { h.signatureHit.Inc(1) }
31+
func (h *handlerStats) IncSignatureMiss() { h.signatureMiss.Inc(1) }
32+
func (h *handlerStats) UpdateSignatureRequestTime(duration time.Duration) {
33+
h.signatureRequestDuration.Inc(int64(duration))
34+
}
35+
func (h *handlerStats) Clear() {
36+
h.signatureRequest.Clear()
37+
h.signatureHit.Clear()
38+
h.signatureMiss.Clear()
39+
h.signatureRequestDuration.Update(0)
40+
}

warp/handlers/stats/stats.go

Lines changed: 0 additions & 91 deletions
This file was deleted.

0 commit comments

Comments
 (0)