mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-14 10:10:42 -07:00
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:
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user