fixed excessive logging non-nil checks)
This commit is contained in:
@@ -3,8 +3,6 @@ package discovery
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -13,11 +11,34 @@ import (
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
const (
|
||||
DefaultKVBucket = "discovery_registry"
|
||||
kvTTLSecondsEnv = "DISCOVERY_KV_TTL_SECONDS"
|
||||
defaultKVTTLSeconds = 3600
|
||||
)
|
||||
const DefaultKVBucket = "discovery_registry"
|
||||
|
||||
type kvStoreOptions struct {
|
||||
ttl time.Duration
|
||||
ttlSet bool
|
||||
}
|
||||
|
||||
type KVStoreOption func(*kvStoreOptions)
|
||||
|
||||
func WithKVTTL(ttl time.Duration) KVStoreOption {
|
||||
return func(opts *kvStoreOptions) {
|
||||
if opts == nil {
|
||||
return
|
||||
}
|
||||
opts.ttl = ttl
|
||||
opts.ttlSet = true
|
||||
}
|
||||
}
|
||||
|
||||
func newKVStoreOptions(opts ...KVStoreOption) kvStoreOptions {
|
||||
var options kvStoreOptions
|
||||
for _, opt := range opts {
|
||||
if opt != nil {
|
||||
opt(&options)
|
||||
}
|
||||
}
|
||||
return options
|
||||
}
|
||||
|
||||
type KVStore struct {
|
||||
logger mlogger.Logger
|
||||
@@ -25,18 +46,20 @@ type KVStore struct {
|
||||
bucket string
|
||||
}
|
||||
|
||||
func NewKVStore(logger mlogger.Logger, js nats.JetStreamContext, bucket string) (*KVStore, error) {
|
||||
func NewKVStore(logger mlogger.Logger, js nats.JetStreamContext, bucket string, opts ...KVStoreOption) (*KVStore, error) {
|
||||
if js == nil {
|
||||
return nil, errors.New("discovery kv: jetstream is nil")
|
||||
}
|
||||
if logger != nil {
|
||||
logger = logger.Named("discovery_kv")
|
||||
if logger == nil {
|
||||
logger = zap.NewNop()
|
||||
}
|
||||
logger = logger.Named("discovery_kv")
|
||||
bucket = strings.TrimSpace(bucket)
|
||||
if bucket == "" {
|
||||
bucket = DefaultKVBucket
|
||||
}
|
||||
ttl := kvTTL(logger)
|
||||
options := newKVStoreOptions(opts...)
|
||||
ttl := options.ttl
|
||||
kv, err := js.KeyValue(bucket)
|
||||
if err != nil {
|
||||
if errors.Is(err, nats.ErrBucketNotFound) {
|
||||
@@ -46,9 +69,9 @@ func NewKVStore(logger mlogger.Logger, js nats.JetStreamContext, bucket string)
|
||||
History: 1,
|
||||
TTL: ttl,
|
||||
})
|
||||
if err == nil && logger != nil {
|
||||
if err == nil {
|
||||
fields := []zap.Field{zap.String("bucket", bucket)}
|
||||
if ttl > 0 {
|
||||
if options.ttlSet {
|
||||
fields = append(fields, zap.Duration("ttl", ttl))
|
||||
}
|
||||
logger.Info("Discovery KV bucket created", fields...)
|
||||
@@ -57,7 +80,7 @@ func NewKVStore(logger mlogger.Logger, js nats.JetStreamContext, bucket string)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else if ttl > 0 {
|
||||
} else if options.ttlSet {
|
||||
ensureKVTTL(logger, js, kv, bucket, ttl)
|
||||
}
|
||||
|
||||
@@ -68,33 +91,13 @@ func NewKVStore(logger mlogger.Logger, js nats.JetStreamContext, bucket string)
|
||||
}, nil
|
||||
}
|
||||
|
||||
func kvTTL(logger mlogger.Logger) time.Duration {
|
||||
raw := strings.TrimSpace(os.Getenv(kvTTLSecondsEnv))
|
||||
if raw == "" {
|
||||
return time.Duration(defaultKVTTLSeconds) * time.Second
|
||||
}
|
||||
secs, err := strconv.Atoi(raw)
|
||||
if err != nil {
|
||||
if logger != nil {
|
||||
logger.Warn("Invalid discovery KV TTL seconds, using default", zap.String("env", kvTTLSecondsEnv), zap.String("value", raw), zap.Int("default_seconds", defaultKVTTLSeconds))
|
||||
}
|
||||
return time.Duration(defaultKVTTLSeconds) * time.Second
|
||||
}
|
||||
if secs <= 0 {
|
||||
return 0
|
||||
}
|
||||
return time.Duration(secs) * time.Second
|
||||
}
|
||||
|
||||
func ensureKVTTL(logger mlogger.Logger, js nats.JetStreamContext, kv nats.KeyValue, bucket string, ttl time.Duration) {
|
||||
if kv == nil || js == nil || ttl <= 0 {
|
||||
if kv == nil || js == nil {
|
||||
return
|
||||
}
|
||||
status, err := kv.Status()
|
||||
if err != nil {
|
||||
if logger != nil {
|
||||
logger.Warn("Failed to read discovery KV status", zap.String("bucket", bucket), zap.Error(err))
|
||||
}
|
||||
logger.Warn("Failed to read discovery KV status", zap.String("bucket", bucket), zap.Error(err))
|
||||
return
|
||||
}
|
||||
if status.TTL() == ttl {
|
||||
@@ -103,22 +106,16 @@ func ensureKVTTL(logger mlogger.Logger, js nats.JetStreamContext, kv nats.KeyVal
|
||||
stream := "KV_" + bucket
|
||||
info, err := js.StreamInfo(stream)
|
||||
if err != nil {
|
||||
if logger != nil {
|
||||
logger.Warn("Failed to read discovery KV stream info", zap.String("bucket", bucket), zap.String("stream", stream), zap.Error(err))
|
||||
}
|
||||
logger.Warn("Failed to read discovery KV stream info", zap.String("bucket", bucket), zap.String("stream", stream), zap.Error(err))
|
||||
return
|
||||
}
|
||||
cfg := info.Config
|
||||
cfg.MaxAge = ttl
|
||||
if _, err := js.UpdateStream(&cfg); err != nil {
|
||||
if logger != nil {
|
||||
logger.Warn("Failed to update discovery KV TTL", zap.String("bucket", bucket), zap.Duration("ttl", ttl), zap.Error(err))
|
||||
}
|
||||
logger.Warn("Failed to update discovery KV TTL", zap.String("bucket", bucket), zap.Duration("ttl", ttl), zap.Error(err))
|
||||
return
|
||||
}
|
||||
if logger != nil {
|
||||
logger.Info("Discovery KV TTL updated", zap.String("bucket", bucket), zap.Duration("ttl", ttl))
|
||||
}
|
||||
logger.Info("Discovery KV TTL updated", zap.String("bucket", bucket), zap.Duration("ttl", ttl))
|
||||
}
|
||||
|
||||
func (s *KVStore) Put(entry RegistryEntry) error {
|
||||
@@ -134,7 +131,7 @@ func (s *KVStore) Put(entry RegistryEntry) error {
|
||||
return err
|
||||
}
|
||||
_, err = s.kv.Put(kvKeyFromRegistryKey(key), payload)
|
||||
if err != nil && s.logger != nil {
|
||||
if err != nil {
|
||||
fields := append(entryFields(entry), zap.String("bucket", s.bucket), zap.String("key", key), zap.Error(err))
|
||||
s.logger.Warn("Failed to persist discovery entry", fields...)
|
||||
}
|
||||
@@ -149,7 +146,7 @@ func (s *KVStore) Delete(id string) error {
|
||||
if key == "" {
|
||||
return nil
|
||||
}
|
||||
if err := s.kv.Delete(key); err != nil && s.logger != nil {
|
||||
if err := s.kv.Delete(key); err != nil {
|
||||
s.logger.Warn("Failed to delete discovery entry", zap.String("bucket", s.bucket), zap.String("key", key), zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user