Skip to content

Commit 646d15c

Browse files
committed
gossip: add messages sent/received metric
This commit adds two metrics: (1) Messages sent, and (2) Messages received. These metrics will be handy when adding message batch sending on both the server and the client as it will help verify that the batching works. References: #119420 Release note: None
1 parent 588139e commit 646d15c

File tree

6 files changed

+45
-14
lines changed

6 files changed

+45
-14
lines changed

pkg/gossip/client.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,10 @@ func (c *client) sendGossip(g *Gossip, stream Gossip_GossipClient, firstReq bool
219219
infosSent := int64(len(delta))
220220
c.clientMetrics.BytesSent.Inc(bytesSent)
221221
c.clientMetrics.InfosSent.Inc(infosSent)
222+
c.clientMetrics.MessagesSent.Inc(1)
222223
c.nodeMetrics.BytesSent.Inc(bytesSent)
223224
c.nodeMetrics.InfosSent.Inc(infosSent)
225+
c.nodeMetrics.MessagesSent.Inc(1)
224226

225227
if log.V(1) {
226228
ctx := c.AnnotateCtx(stream.Context())
@@ -247,8 +249,10 @@ func (c *client) handleResponse(ctx context.Context, g *Gossip, reply *Response)
247249
infosReceived := int64(len(reply.Delta))
248250
c.clientMetrics.BytesReceived.Inc(bytesReceived)
249251
c.clientMetrics.InfosReceived.Inc(infosReceived)
252+
c.clientMetrics.MessagesReceived.Inc(1)
250253
c.nodeMetrics.BytesReceived.Inc(bytesReceived)
251254
c.nodeMetrics.InfosReceived.Inc(infosReceived)
255+
c.nodeMetrics.MessagesReceived.Inc(1)
252256

253257
// Combine remote node's infostore delta with ours.
254258
if reply.Delta != nil {

pkg/gossip/gossip.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,18 @@ var (
141141
Measurement: "Connections",
142142
Unit: metric.Unit_COUNT,
143143
}
144+
MetaMessagesSent = metric.Metadata{
145+
Name: "gossip.messages.sent",
146+
Help: "Number of sent gossip messages",
147+
Measurement: "Messages",
148+
Unit: metric.Unit_COUNT,
149+
}
150+
MetaMessagesReceived = metric.Metadata{
151+
Name: "gossip.messages.received",
152+
Help: "Number of received gossip messages",
153+
Measurement: "Messages",
154+
Unit: metric.Unit_COUNT,
155+
}
144156
MetaInfosSent = metric.Metadata{
145157
Name: "gossip.infos.sent",
146158
Help: "Number of sent gossip Info objects",

pkg/gossip/gossip.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ message MetricSnap {
7676
int64 bytes_sent = 3;
7777
int64 infos_received = 4;
7878
int64 infos_sent = 5;
79+
int64 messages_received = 7;
80+
int64 messages_sent = 8;
7981
int64 conns_refused = 6;
8082
}
8183

pkg/gossip/server.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,10 @@ func (s *server) Gossip(stream Gossip_GossipServer) error {
125125
infoCount := int64(len(reply.Delta))
126126
s.nodeMetrics.BytesSent.Inc(bytesSent)
127127
s.nodeMetrics.InfosSent.Inc(infoCount)
128+
s.nodeMetrics.MessagesSent.Inc(1)
128129
s.serverMetrics.BytesSent.Inc(bytesSent)
129130
s.serverMetrics.InfosSent.Inc(infoCount)
131+
s.serverMetrics.MessagesSent.Inc(1)
130132

131133
return stream.Send(reply)
132134
}
@@ -307,8 +309,10 @@ func (s *server) gossipReceiver(
307309
infosReceived := int64(len(args.Delta))
308310
s.nodeMetrics.BytesReceived.Inc(bytesReceived)
309311
s.nodeMetrics.InfosReceived.Inc(infosReceived)
312+
s.nodeMetrics.MessagesReceived.Inc(1)
310313
s.serverMetrics.BytesReceived.Inc(bytesReceived)
311314
s.serverMetrics.InfosReceived.Inc(infosReceived)
315+
s.serverMetrics.MessagesReceived.Inc(1)
312316

313317
freshCount, err := s.mu.is.combine(args.Delta, args.NodeID)
314318
if err != nil {

pkg/gossip/status.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ type Metrics struct {
2626
BytesSent *metric.Counter
2727
InfosReceived *metric.Counter
2828
InfosSent *metric.Counter
29+
MessagesSent *metric.Counter
30+
MessagesReceived *metric.Counter
2931
CallbacksProcessed *metric.Counter
3032
CallbacksPending *metric.Gauge
3133
CallbacksProcessingDuration metric.IHistogram
@@ -39,6 +41,8 @@ func makeMetrics() Metrics {
3941
BytesSent: metric.NewCounter(MetaBytesSent),
4042
InfosReceived: metric.NewCounter(MetaInfosReceived),
4143
InfosSent: metric.NewCounter(MetaInfosSent),
44+
MessagesReceived: metric.NewCounter(MetaMessagesReceived),
45+
MessagesSent: metric.NewCounter(MetaMessagesSent),
4246
CallbacksProcessed: metric.NewCounter(MetaCallbacksProcessed),
4347
CallbacksPending: metric.NewGauge(MetaCallbacksPending),
4448
CallbacksProcessingDuration: metric.NewHistogram(metric.HistogramOptions{
@@ -63,11 +67,13 @@ func (m Metrics) String() string {
6367
// Snapshot returns a snapshot of the metrics.
6468
func (m Metrics) Snapshot() MetricSnap {
6569
return MetricSnap{
66-
ConnsRefused: m.ConnectionsRefused.Count(),
67-
BytesReceived: m.BytesReceived.Count(),
68-
BytesSent: m.BytesSent.Count(),
69-
InfosReceived: m.InfosReceived.Count(),
70-
InfosSent: m.InfosSent.Count(),
70+
ConnsRefused: m.ConnectionsRefused.Count(),
71+
BytesReceived: m.BytesReceived.Count(),
72+
BytesSent: m.BytesSent.Count(),
73+
InfosReceived: m.InfosReceived.Count(),
74+
InfosSent: m.InfosSent.Count(),
75+
MessagesReceived: m.MessagesReceived.Count(),
76+
MessagesSent: m.MessagesSent.Count(),
7177
}
7278
}
7379

@@ -77,7 +83,8 @@ func (m MetricSnap) String() string {
7783

7884
// SafeFormat implements the redact.SafeFormatter interface.
7985
func (m MetricSnap) SafeFormat(w redact.SafePrinter, _ rune) {
80-
w.Printf("infos %d/%d sent/received, bytes %dB/%dB sent/received",
86+
w.Printf("messages %d/%d sent/received, infos %d/%d sent/received, bytes %dB/%dB sent/received",
87+
m.MessagesSent, m.MessagesReceived,
8188
m.InfosSent, m.InfosReceived,
8289
m.BytesSent, m.BytesReceived)
8390
if m.ConnsRefused > 0 {

pkg/gossip/status_test.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,16 @@ func TestGossipStatus(t *testing.T) {
2121
},
2222
MaxConns: 3,
2323
MetricSnap: MetricSnap{
24-
BytesReceived: 1000,
25-
BytesSent: 2000,
26-
InfosReceived: 10,
27-
InfosSent: 20,
28-
ConnsRefused: 17,
24+
BytesReceived: 1000,
25+
BytesSent: 2000,
26+
InfosReceived: 10,
27+
InfosSent: 20,
28+
MessagesSent: 2,
29+
MessagesReceived: 1,
30+
ConnsRefused: 17,
2931
},
3032
}
31-
if exp, act := `gossip server (2/3 cur/max conns, infos 20/10 sent/received, bytes 2000B/1000B sent/received, refused 17 conns)
33+
if exp, act := `gossip server (2/3 cur/max conns, messages 2/1 sent/received, infos 20/10 sent/received, bytes 2000B/1000B sent/received, refused 17 conns)
3234
1: localhost:1234 (17s)
3335
4: localhost:4567 (18s)
3436
`, ss.String(); exp != act {
@@ -39,13 +41,13 @@ func TestGossipStatus(t *testing.T) {
3941
ConnStatus: []OutgoingConnStatus{
4042
{
4143
ConnStatus: ss.ConnStatus[0],
42-
MetricSnap: MetricSnap{BytesReceived: 77, BytesSent: 88, InfosReceived: 11, InfosSent: 22},
44+
MetricSnap: MetricSnap{BytesReceived: 77, BytesSent: 88, InfosReceived: 11, InfosSent: 22, MessagesReceived: 3, MessagesSent: 4},
4345
},
4446
},
4547
MaxConns: 3,
4648
}
4749
if exp, act := `gossip client (1/3 cur/max conns)
48-
1: localhost:1234 (17s: infos 22/11 sent/received, bytes 88B/77B sent/received)
50+
1: localhost:1234 (17s: messages 4/3 sent/received, infos 22/11 sent/received, bytes 88B/77B sent/received)
4951
`, cs.String(); exp != act {
5052
t.Errorf("expected:\n%q\ngot:\n%q", exp, act)
5153
}

0 commit comments

Comments
 (0)