Merge pull request #2249 from nats-io/varz-js

Fix for varz JetStream usage showing total account usage vs server usage.
This commit is contained in:
Derek Collison
2021-05-24 14:11:10 -07:00
committed by GitHub
2 changed files with 53 additions and 5 deletions

View File

@@ -1538,7 +1538,7 @@ func (js *jetStream) dynamicAccountLimits() *JetStreamAccountLimits {
return limits
}
// Report on JetStream stats and usage.
// Report on JetStream stats and usage for this server.
func (js *jetStream) usageStats() *JetStreamStats {
var stats JetStreamStats
@@ -1556,10 +1556,10 @@ func (js *jetStream) usageStats() *JetStreamStats {
// Collect account information.
for _, jsa := range accounts {
jsa.mu.RLock()
stats.Memory += uint64(jsa.memTotal)
stats.Store += uint64(jsa.storeTotal)
stats.API.Total += jsa.apiTotal
stats.API.Errors += jsa.apiErrors
stats.Memory += uint64(jsa.usage.mem)
stats.Store += uint64(jsa.usage.store)
stats.API.Total += jsa.usage.api
stats.API.Errors += jsa.usage.err
jsa.mu.RUnlock()
}
return &stats

View File

@@ -7012,6 +7012,54 @@ func TestJetStreamClusterNilMsgWithHeaderThroughSourcedStream(t *testing.T) {
}
}
// Make sure varz reports the server usage not replicated usage etc.
func TestJetStreamClusterVarzReporting(t *testing.T) {
c := createJetStreamClusterExplicit(t, "JSC", 3)
defer c.shutdown()
s := c.randomServer()
nc, js := jsClientConnect(t, s)
defer nc.Close()
_, err := js.AddStream(&nats.StreamConfig{
Name: "TEST",
Replicas: 3,
})
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
// ~100k per message.
msg := []byte(strings.Repeat("A", 99_960))
msz := fileStoreMsgSize("TEST", nil, msg)
total := msz * 10
for i := 0; i < 10; i++ {
if _, err := js.Publish("TEST", msg); err != nil {
t.Fatalf("Unexpected publish error: %v", err)
}
}
// To show the bug we need this to allow remote usage to replicate.
time.Sleep(2 * usageTick)
v, err := s.Varz(nil)
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
if v.JetStream.Stats.Store > total {
t.Fatalf("Single server varz JetStream store usage should be <= %d, got %d", total, v.JetStream.Stats.Store)
}
info, err := js.AccountInfo()
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
if info.Store < total*3 {
t.Fatalf("Expected account information to show usage ~%d, got %d", total*3, info.Store)
}
}
// Support functions
// Used to setup superclusters for tests.