From 76810cfb77c0d2da091a939a153805c5bd95d9a0 Mon Sep 17 00:00:00 2001 From: Martin Chodur Date: Thu, 28 May 2020 10:26:30 +0200 Subject: [PATCH] refactor tools: changed check of valid retention and compaction lvls to use map Signed-off-by: Martin Chodur --- pkg/replicate/scheme.go | 34 ++++++++++++++-------------------- pkg/replicate/scheme_test.go | 2 +- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/pkg/replicate/scheme.go b/pkg/replicate/scheme.go index d1695e08e3b..bae7fa1f6e1 100644 --- a/pkg/replicate/scheme.go +++ b/pkg/replicate/scheme.go @@ -29,8 +29,8 @@ import ( type BlockFilter struct { logger log.Logger labelSelector labels.Selector - resolutionLevels []compact.ResolutionLevel - compactionLevels []int + resolutionLevels map[compact.ResolutionLevel]struct{} + compactionLevels map[int]struct{} } // NewBlockFilter returns block filter. @@ -40,11 +40,19 @@ func NewBlockFilter( resolutionLevels []compact.ResolutionLevel, compactionLevels []int, ) *BlockFilter { + allowedResolutions := make(map[compact.ResolutionLevel]struct{}) + for _, resolutionLevel := range resolutionLevels { + allowedResolutions[resolutionLevel] = struct{}{} + } + allowedCompactions := make(map[int]struct{}) + for _, compactionLevel := range compactionLevels { + allowedCompactions[compactionLevel] = struct{}{} + } return &BlockFilter{ labelSelector: labelSelector, logger: logger, - resolutionLevels: resolutionLevels, - compactionLevels: compactionLevels, + resolutionLevels: allowedResolutions, + compactionLevels: allowedCompactions, } } @@ -77,27 +85,13 @@ func (bf *BlockFilter) Filter(b *metadata.Meta) bool { } gotResolution := compact.ResolutionLevel(b.Thanos.Downsample.Resolution) - resolutionMatch := false - for _, allowedResolution := range bf.resolutionLevels { - if gotResolution == allowedResolution { - resolutionMatch = true - break - } - } - if !resolutionMatch { + if _, ok := bf.resolutionLevels[gotResolution]; !ok { level.Debug(bf.logger).Log("msg", "filtering block", "reason", "resolution doesn't match allowed resolutions", "got_resolution", gotResolution, "allowed_resolutions", bf.resolutionLevels) return false } gotCompactionLevel := b.BlockMeta.Compaction.Level - compactionMatch := false - for _, allowedCompactionLevel := range bf.compactionLevels { - if gotCompactionLevel == allowedCompactionLevel { - compactionMatch = true - break - } - } - if !compactionMatch { + if _, ok := bf.compactionLevels[gotCompactionLevel]; !ok { level.Debug(bf.logger).Log("msg", "filtering block", "reason", "compaction level doesn't match allowed levels", "got_compaction_level", gotCompactionLevel, "allowed_compaction_levels", bf.compactionLevels) return false } diff --git a/pkg/replicate/scheme_test.go b/pkg/replicate/scheme_test.go index fc9e66943d2..e8686f90efc 100644 --- a/pkg/replicate/scheme_test.go +++ b/pkg/replicate/scheme_test.go @@ -311,7 +311,7 @@ func TestReplicationSchemeAll(t *testing.T) { selector = c.selector } - filter := NewBlockFilter(logger, selector, compact.ResolutionLevelRaw, 1).Filter + filter := NewBlockFilter(logger, selector, []compact.ResolutionLevel{compact.ResolutionLevelRaw}, []int{1}).Filter fetcher, err := block.NewMetaFetcher(logger, 32, objstore.WithNoopInstr(originBucket), "", nil, nil, nil) testutil.Ok(t, err)