diff --git a/cache/compression.go b/cache/compression.go index 30c57b7b3..9524ff3b8 100644 --- a/cache/compression.go +++ b/cache/compression.go @@ -12,7 +12,7 @@ import ( "github.com/go-kit/log/level" "github.com/golang/snappy" - "github.com/grafana/dskit/util/stringsutil" + "github.com/grafana/dskit/internal/slices" ) const ( @@ -35,9 +35,10 @@ func (cfg *CompressionConfig) RegisterFlagsWithPrefix(f *flag.FlagSet, prefix st } func (cfg *CompressionConfig) Validate() error { - if cfg.Compression != "" && !stringsutil.SliceContains(supportedCompressions, cfg.Compression) { + if cfg.Compression != "" && !slices.Contains(supportedCompressions, cfg.Compression) { return errUnsupportedCompression } + return nil } diff --git a/internal/slices/slices.go b/internal/slices/slices.go new file mode 100644 index 000000000..838e9bf83 --- /dev/null +++ b/internal/slices/slices.go @@ -0,0 +1,11 @@ +package slices + +func Contains[T comparable](haystack []T, needle T) bool { + for _, e := range haystack { + if e == needle { + return true + } + } + + return false +} diff --git a/ring/client/pool.go b/ring/client/pool.go index 2ec86539b..77a17f35f 100644 --- a/ring/client/pool.go +++ b/ring/client/pool.go @@ -14,8 +14,8 @@ import ( "google.golang.org/grpc/health/grpc_health_v1" "github.com/grafana/dskit/concurrency" + "github.com/grafana/dskit/internal/slices" "github.com/grafana/dskit/services" - "github.com/grafana/dskit/util/stringsutil" ) // PoolClient is the interface that should be implemented by a @@ -171,7 +171,7 @@ func (p *Pool) removeStaleClients() { } for _, addr := range p.RegisteredAddresses() { - if stringsutil.SliceContains(serviceAddrs, addr) { + if slices.Contains(serviceAddrs, addr) { continue } level.Info(p.logger).Log("msg", "removing stale client", "addr", addr) diff --git a/ring/ring.go b/ring/ring.go index 655efaf43..493e6ac14 100644 --- a/ring/ring.go +++ b/ring/ring.go @@ -6,6 +6,7 @@ import ( "context" "flag" "fmt" + "math" "math/rand" "net/http" @@ -19,13 +20,12 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" + "github.com/grafana/dskit/flagext" + dsmath "github.com/grafana/dskit/internal/math" + "github.com/grafana/dskit/internal/slices" "github.com/grafana/dskit/kv" shardUtil "github.com/grafana/dskit/ring/shard" "github.com/grafana/dskit/services" - - "github.com/grafana/dskit/flagext" - dsmath "github.com/grafana/dskit/internal/math" - "github.com/grafana/dskit/util/stringsutil" ) const ( @@ -291,7 +291,7 @@ func (r *Ring) updateRingState(ringDesc *Desc) { // Filter out all instances belonging to excluded zones. if len(r.cfg.ExcludedZones) > 0 { for instanceID, instance := range ringDesc.Ingesters { - if stringsutil.SliceContains(r.cfg.ExcludedZones, instance.Zone) { + if slices.Contains(r.cfg.ExcludedZones, instance.Zone) { delete(ringDesc.Ingesters, instanceID) } } @@ -364,13 +364,13 @@ func (r *Ring) Get(key uint32, op Operation, bufDescs []InstanceDesc, bufHosts, } // We want n *distinct* instances && distinct zones. - if stringsutil.SliceContains(distinctHosts, info.InstanceID) { + if slices.Contains(distinctHosts, info.InstanceID) { continue } // Ignore if the instances don't have a zone set. if r.cfg.ZoneAwarenessEnabled && info.Zone != "" { - if stringsutil.SliceContains(distinctZones, info.Zone) { + if slices.Contains(distinctZones, info.Zone) { continue } } diff --git a/ring/ring_test.go b/ring/ring_test.go index 019bdab0c..ae59ac9c2 100644 --- a/ring/ring_test.go +++ b/ring/ring_test.go @@ -23,12 +23,12 @@ import ( "google.golang.org/grpc/status" "github.com/grafana/dskit/flagext" + "github.com/grafana/dskit/internal/slices" "github.com/grafana/dskit/kv" "github.com/grafana/dskit/kv/consul" "github.com/grafana/dskit/ring/shard" "github.com/grafana/dskit/services" "github.com/grafana/dskit/test" - "github.com/grafana/dskit/util/stringsutil" ) const ( @@ -1280,7 +1280,7 @@ func TestRing_ShuffleShard_Shuffling(t *testing.T) { numMatching := 0 for _, c := range currShard { - if stringsutil.SliceContains(otherShard, c) { + if slices.Contains(otherShard, c) { numMatching++ } } @@ -2218,7 +2218,7 @@ func TestRingUpdates(t *testing.T) { // Ensure there's no instance in an excluded zone. if len(testData.excludedZones) > 0 { - assert.False(t, stringsutil.SliceContains(testData.excludedZones, ing.Zone)) + assert.False(t, slices.Contains(testData.excludedZones, ing.Zone)) } } diff --git a/util/stringsutil/stringsutil.go b/util/stringsutil/stringsutil.go deleted file mode 100644 index 0baff4c99..000000000 --- a/util/stringsutil/stringsutil.go +++ /dev/null @@ -1,11 +0,0 @@ -package stringsutil - -// SliceContains returns true if the search value is within the list of input values. -func SliceContains(values []string, search string) bool { - for _, v := range values { - if search == v { - return true - } - } - return false -}