etcdserver: log quota only once
package etcdserver
import (
+ "sync"
+
pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
humanize "github.com/dustin/go-humanize"
@@ -60,12 +62,22 @@ const (
kvOverhead = 256
)
+var (
+ // only log once
+ quotaLogOnce sync.Once
+
+ defaultQuotaSize = humanize.Bytes(uint64(DefaultQuotaBytes))
+ maxQuotaSize = humanize.Bytes(uint64(MaxQuotaBytes))
+)
+
+// NewBackendQuota creates a quota layer with the given storage limit.
func NewBackendQuota(s *EtcdServer, name string) Quota {
lg := s.getLogger()
quotaBackendBytes.Set(float64(s.Cfg.QuotaBackendBytes))
if s.Cfg.QuotaBackendBytes < 0 {
// disable quotas if negative
+ quotaLogOnce.Do(func() {
if lg != nil {
lg.Info(
"disabled backend quota",
@@ -75,23 +87,27 @@ func NewBackendQuota(s *EtcdServer, name string) Quota {
} else {
plog.Warningf("disabling backend quota")
}
+ })
return &passthroughQuota{}
}
if s.Cfg.QuotaBackendBytes == 0 {
// use default size if no quota size given
+ quotaLogOnce.Do(func() {
if lg != nil {
lg.Info(
"enabled backend quota with default value",
zap.String("quota-name", name),
zap.Int64("quota-size-bytes", DefaultQuotaBytes),
- zap.String("quota-size", humanize.Bytes(uint64(DefaultQuotaBytes))),
+ zap.String("quota-size", defaultQuotaSize),
)
}
+ })
quotaBackendBytes.Set(float64(DefaultQuotaBytes))
return &backendQuota{s, DefaultQuotaBytes}
}
+ quotaLogOnce.Do(func() {
if s.Cfg.QuotaBackendBytes > MaxQuotaBytes {
if lg != nil {
lg.Warn(
@@ -100,13 +116,12 @@ func NewBackendQuota(s *EtcdServer, name string) Quota {
zap.Int64("quota-size-bytes", s.Cfg.QuotaBackendBytes),
zap.String("quota-size", humanize.Bytes(uint64(s.Cfg.QuotaBackendBytes))),
zap.Int64("quota-maximum-size-bytes", MaxQuotaBytes),
- zap.String("quota-maximum-size", humanize.Bytes(uint64(MaxQuotaBytes))),
+ zap.String("quota-maximum-size", maxQuotaSize),
)
} else {
plog.Warningf("backend quota %v exceeds maximum recommended quota %v", s.Cfg.QuotaBackendBytes, MaxQuotaBytes)
}
}
-
if lg != nil {
lg.Info(
"enabled backend quota",
@@ -115,6 +130,7 @@ func NewBackendQuota(s *EtcdServer, name string) Quota {
zap.String("quota-size", humanize.Bytes(uint64(s.Cfg.QuotaBackendBytes))),
)
}
+ })
return &backendQuota{s, s.Cfg.QuotaBackendBytes}
}
