Skip to content

Commit 055c964

Browse files
committed
add unit tests
Signed-off-by: Yi Jin <[email protected]>
1 parent 7028bf7 commit 055c964

File tree

3 files changed

+47
-10
lines changed

3 files changed

+47
-10
lines changed

pkg/compact/compact.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ type CompactionLifecycleCallback interface {
842842
PreCompactionCallback(ctx context.Context, logger log.Logger, group *Group, toCompactBlocks []*metadata.Meta) error
843843
PostCompactionCallback(ctx context.Context, logger log.Logger, group *Group, blockID ulid.ULID) error
844844
GetBlockPopulator(ctx context.Context, logger log.Logger, group *Group) (tsdb.BlockPopulator, error)
845-
HandleError(ctx context.Context, logger log.Logger, group *Group, toCompactBlocks []*metadata.Meta, err error)
845+
HandleError(ctx context.Context, logger log.Logger, group *Group, toCompactBlocks []*metadata.Meta, err error) int // how many error cases it handles
846846
}
847847

848848
type DefaultCompactionLifecycleCallback struct {
@@ -874,7 +874,8 @@ func (c DefaultCompactionLifecycleCallback) GetBlockPopulator(_ context.Context,
874874
return tsdb.DefaultBlockPopulator{}, nil
875875
}
876876

877-
func (c DefaultCompactionLifecycleCallback) HandleError(_ context.Context, _ log.Logger, _ *Group, _ []*metadata.Meta, err error) {
877+
func (c DefaultCompactionLifecycleCallback) HandleError(_ context.Context, _ log.Logger, _ *Group, _ []*metadata.Meta, err error) int {
878+
return 0
878879
}
879880

880881
// Compactor provides compaction against an underlying storage of time series data.
@@ -1257,8 +1258,8 @@ func (cg *Group) compact(ctx context.Context, dir string, planner Planner, comp
12571258
compIDs, e = comp.CompactWithBlockPopulator(dir, toCompactDirs, nil, populateBlockFunc)
12581259
return e
12591260
}); err != nil {
1260-
compactionLifecycleCallback.HandleError(ctx, cg.logger, cg, toCompact, err)
1261-
return false, nil, halt(errors.Wrapf(err, "compact blocks %v", toCompactDirs))
1261+
handledErrs := compactionLifecycleCallback.HandleError(ctx, cg.logger, cg, toCompact, err)
1262+
return false, nil, halt(errors.Wrapf(err, "compact blocks %v, handled %d errors", toCompactDirs, handledErrs))
12621263
}
12631264
if len(compIDs) == 0 {
12641265
// No compacted blocks means all compacted blocks are of no sample.

pkg/compact/overlapping.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const (
2323
overlappingReason = "blocks-overlapping"
2424

2525
symbolTableSizeExceedsError = "symbol table size exceeds"
26-
symbolTableSizeLimit = 1024 * 1024
26+
symbolTableSizeLimit = 128 * 1024
2727
)
2828

2929
type OverlappingCompactionLifecycleCallback struct {
@@ -130,7 +130,11 @@ func (o OverlappingCompactionLifecycleCallback) GetBlockPopulator(_ context.Cont
130130
return tsdb.DefaultBlockPopulator{}, nil
131131
}
132132

133-
func (o OverlappingCompactionLifecycleCallback) HandleError(ctx context.Context, logger log.Logger, g *Group, toCompact []*metadata.Meta, compactErr error) {
133+
func (o OverlappingCompactionLifecycleCallback) HandleError(ctx context.Context, logger log.Logger, g *Group, toCompact []*metadata.Meta, compactErr error) int {
134+
handledErrs := 0
135+
if compactErr == nil {
136+
return handledErrs
137+
}
134138
level.Error(logger).Log("msg", "failed to compact blocks", "err", compactErr)
135139
if strings.Contains(compactErr.Error(), symbolTableSizeExceedsError) {
136140
for _, m := range toCompact {
@@ -142,10 +146,12 @@ func (o OverlappingCompactionLifecycleCallback) HandleError(ctx context.Context,
142146
level.Warn(logger).Log("msg", "bypass small blocks", "block", m.String(), "series", m.Stats.NumSeries)
143147
continue
144148
}
149+
handledErrs++
145150
if err := block.MarkForNoCompact(ctx, logger, g.bkt, m.ULID, symbolTableSizeExceedsError,
146151
fmt.Sprintf("failed to compact blocks: %s", m.ULID.String()), o.noCompaction); err != nil {
147152
level.Error(logger).Log("msg", "failed to mark block for no compact", "block", m.String(), "err", err)
148153
}
149154
}
150155
}
156+
return handledErrs
151157
}

pkg/compact/overlapping_test.go

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/go-kit/log"
1414
"github.com/pkg/errors"
1515
"github.com/prometheus/client_golang/prometheus"
16+
"github.com/stretchr/testify/require"
1617
"github.com/thanos-io/objstore"
1718
"github.com/thanos-io/thanos/pkg/block/metadata"
1819
"github.com/thanos-io/thanos/pkg/compact/downsample"
@@ -150,19 +151,48 @@ func TestHandleError(t *testing.T) {
150151
logger := log.NewNopLogger()
151152
callback := NewOverlappingCompactionLifecycleCallback(reg, logger, true)
152153
for _, tcase := range []struct {
153-
testName string
154-
input []*metadata.Meta
155-
err error
154+
testName string
155+
input []*metadata.Meta
156+
err error
157+
handledErrs int
158+
errBlockIdx int
156159
}{
157160
{
158161
testName: "empty error",
162+
input: []*metadata.Meta{},
163+
},
164+
{
165+
testName: "non empty error but not handled",
166+
input: []*metadata.Meta{
167+
createCustomBlockMeta(1, 1, 2, metadata.ReceiveSource, 1),
168+
createCustomBlockMeta(2, 1, 6, metadata.CompactorSource, 1),
169+
},
170+
err: errors.New("some error"),
171+
handledErrs: 0,
172+
},
173+
{
174+
testName: "non empty error symbol table size exceeds",
175+
input: []*metadata.Meta{
176+
createCustomBlockMeta(1, 1, 2, metadata.ReceiveSource, 1),
177+
createCustomBlockMeta(2, 1, 6, metadata.CompactorSource, 1),
178+
createCustomBlockMeta(3, 1, 6, metadata.ReceiveSource, 1024*1024),
179+
},
180+
err: errors.New(symbolTableSizeExceedsError + " 1024*1024"),
181+
handledErrs: 1,
182+
errBlockIdx: 2,
159183
},
160184
} {
161185
t.Run(tcase.testName, func(t *testing.T) {
162186
ctx := context.Background()
163187
bkt := objstore.NewInMemBucket()
164188
group := &Group{logger: log.NewNopLogger(), bkt: bkt}
165-
callback.HandleError(ctx, logger, group, tcase.input, tcase.err)
189+
require.Equal(t, tcase.handledErrs, callback.HandleError(ctx, logger, group, tcase.input, tcase.err))
190+
if tcase.handledErrs > 0 {
191+
for i := 0; i < len(tcase.input); i++ {
192+
ok, _ := bkt.Exists(ctx, path.Join(tcase.input[i].ULID.String(), metadata.NoCompactMarkFilename))
193+
require.Equal(t, i == tcase.errBlockIdx, ok)
194+
}
195+
}
166196
})
167197
}
168198
}

0 commit comments

Comments
 (0)