@@ -2411,7 +2411,7 @@ func TestDefaultPlanner_PlanOptimize_Test(t *testing.T) {
24112411 // > 2 GB total group size
24122412 // 50% of files are at aggressive max block size
24132413 {
2414- "Small group size with single generation 50% at DefaultMaxPointsPerBlock and 50% at AggressiveMaxPointsPerBlock " ,
2414+ "Small group size with single generation 50% at DefaultMaxPointsPerBlock and 50% at DefaultAggressiveMaxPointsPerBlock " ,
24152415 []tsm1.FileStat {
24162416 {
24172417 Path : "01-05.tsm1" ,
@@ -2447,10 +2447,10 @@ func TestDefaultPlanner_PlanOptimize_Test(t *testing.T) {
24472447 },
24482448 },
24492449 []int {
2450- tsdb .AggressiveMaxPointsPerBlock ,
2451- tsdb .AggressiveMaxPointsPerBlock ,
2452- tsdb .AggressiveMaxPointsPerBlock ,
2453- tsdb .AggressiveMaxPointsPerBlock ,
2450+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2451+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2452+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2453+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
24542454 tsdb .DefaultMaxPointsPerBlock ,
24552455 tsdb .DefaultMaxPointsPerBlock ,
24562456 tsdb .DefaultMaxPointsPerBlock ,
@@ -2475,7 +2475,7 @@ func TestDefaultPlanner_PlanOptimize_Test(t *testing.T) {
24752475 Size : 450 * 1024 * 1024 ,
24762476 },
24772477 }, []int {
2478- tsdb .AggressiveMaxPointsPerBlock ,
2478+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
24792479 tsdb .DefaultMaxPointsPerBlock ,
24802480 tsdb .DefaultMaxPointsPerBlock ,
24812481 },
@@ -2593,16 +2593,16 @@ func TestDefaultPlanner_PlanOptimize_Test(t *testing.T) {
25932593 Size : 400 * 1024 * 1024 ,
25942594 },
25952595 }, []int {
2596- tsdb .AggressiveMaxPointsPerBlock ,
2597- tsdb .AggressiveMaxPointsPerBlock ,
2598- tsdb .AggressiveMaxPointsPerBlock ,
2596+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2597+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2598+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
25992599
2600- tsdb .AggressiveMaxPointsPerBlock ,
2601- tsdb .AggressiveMaxPointsPerBlock ,
2600+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2601+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
26022602 tsdb .DefaultMaxPointsPerBlock ,
26032603
2604- tsdb .AggressiveMaxPointsPerBlock ,
2605- tsdb .AggressiveMaxPointsPerBlock ,
2604+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2605+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
26062606 tsdb .DefaultMaxPointsPerBlock ,
26072607
26082608 tsdb .DefaultMaxPointsPerBlock ,
@@ -2685,7 +2685,7 @@ func TestDefaultPlanner_PlanOptimize_Test(t *testing.T) {
26852685 // This test is added to account for a single generation that has a group size
26862686 // over 2 GB with 1 file under 2 GB all at max points per block with aggressive compaction.
26872687 // It should not compact any further.
2688- "TSM files at AggressiveMaxPointsPerBlock " ,
2688+ "TSM files at DefaultAggressiveMaxPointsPerBlock " ,
26892689 []tsm1.FileStat {
26902690 {
26912691 Path : "01-13.tsm1" ,
@@ -2696,8 +2696,8 @@ func TestDefaultPlanner_PlanOptimize_Test(t *testing.T) {
26962696 Size : 691 * 1024 * 1024 ,
26972697 },
26982698 }, []int {
2699- tsdb .AggressiveMaxPointsPerBlock ,
2700- tsdb .AggressiveMaxPointsPerBlock ,
2699+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2700+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
27012701 }, "" , 0 ,
27022702 },
27032703 {
@@ -2716,7 +2716,7 @@ func TestDefaultPlanner_PlanOptimize_Test(t *testing.T) {
27162716 Size : 691 * 1024 * 1024 ,
27172717 },
27182718 }, []int {
2719- tsdb .AggressiveMaxPointsPerBlock ,
2719+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
27202720 tsdb .DefaultMaxPointsPerBlock ,
27212721 },
27222722 "" ,
@@ -2725,7 +2725,7 @@ func TestDefaultPlanner_PlanOptimize_Test(t *testing.T) {
27252725 {
27262726 // This test is added to account for a single generation that has a group size
27272727 // over 2 GB and multiple files under 2 GB all at max points per block for aggressive compaction.
2728- "Group size over 2 with multiple files under 2GB and at AggressiveMaxPointsPerBlock " ,
2728+ "Group size over 2 with multiple files under 2GB and at DefaultAggressiveMaxPointsPerBlock " ,
27292729 []tsm1.FileStat {
27302730 {
27312731 Path : "01-13.tsm1" ,
@@ -2740,9 +2740,9 @@ func TestDefaultPlanner_PlanOptimize_Test(t *testing.T) {
27402740 Size : 450 * 1024 * 1024 ,
27412741 },
27422742 }, []int {
2743- tsdb .AggressiveMaxPointsPerBlock ,
2744- tsdb .AggressiveMaxPointsPerBlock ,
2745- tsdb .AggressiveMaxPointsPerBlock ,
2743+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2744+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2745+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
27462746 }, "" , 0 ,
27472747 },
27482748 }
@@ -2797,6 +2797,145 @@ func TestDefaultPlanner_PlanOptimize_Test(t *testing.T) {
27972797 expectedFullyCompacted (cp , test .expectedFullyCompactedReasonExp )
27982798 })
27992799 }
2800+
2801+ type PlanOptimizeMixedTests struct {
2802+ name string
2803+ fs []tsm1.FileStat
2804+ bc []int
2805+ expectedFullyCompactedReasonExp string
2806+ expectedgenerationCount int64
2807+ fullyCompacted bool
2808+ }
2809+
2810+ mixedPlanOptimizeTests := []PlanOptimizeMixedTests {
2811+ {
2812+ // This test is added to account for halting state after
2813+ // TestDefaultPlanner_FullyCompacted_SmallSingleGeneration
2814+ // will need to ensure that once we have single TSM file under 2 GB we stop
2815+ "Single TSM file with increase block count" ,
2816+ []tsm1.FileStat {
2817+ {
2818+ Path : "01-09.tsm1" ,
2819+ Size : 650 * 1024 * 1024 ,
2820+ },
2821+ },
2822+ []int {},
2823+ "" , 0 , true ,
2824+ },
2825+ {
2826+ // This test is added to account for a single generation that has a group size
2827+ // over 2 GB with 1 file under 2 GB all at max points per block with aggressive compaction.
2828+ // It should not compact any further.
2829+ "TSM files at DefaultAggressiveMaxPointsPerBlock with increased block count" ,
2830+ []tsm1.FileStat {
2831+ {
2832+ Path : "01-13.tsm1" ,
2833+ Size : 2048 * 1024 * 1024 ,
2834+ },
2835+ {
2836+ Path : "01-14.tsm1" ,
2837+ Size : 691 * 1024 * 1024 ,
2838+ },
2839+ }, []int {
2840+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2841+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2842+ }, "" , 0 , true ,
2843+ },
2844+ {
2845+ // This test is added to account for a single generation that has a group size
2846+ // over 2 GB at max points per block with aggressive compaction, and, 1 file
2847+ // under 2 GB at default max points per block.
2848+ // It should not compact any further.
2849+ "TSM files cannot compact further, single file under 2G and at DefaultMaxPointsPerBlock with increased block count" ,
2850+ []tsm1.FileStat {
2851+ {
2852+ Path : "01-13.tsm1" ,
2853+ Size : 2048 * 1024 * 1024 ,
2854+ },
2855+ {
2856+ Path : "01-14.tsm1" ,
2857+ Size : 691 * 1024 * 1024 ,
2858+ },
2859+ }, []int {
2860+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2861+ tsdb .DefaultMaxPointsPerBlock ,
2862+ },
2863+ "" ,
2864+ 0 , true ,
2865+ },
2866+ {
2867+ // This test is added to account for a single generation that has a group size
2868+ // over 2 GB and multiple files under 2 GB all at max points per block for aggressive compaction.
2869+ "Group size over 2 with multiple files under 2GB and at DefaultAggressiveMaxPointsPerBlock with increased block count" ,
2870+ []tsm1.FileStat {
2871+ {
2872+ Path : "01-13.tsm1" ,
2873+ Size : 2048 * 1024 * 1024 ,
2874+ },
2875+ {
2876+ Path : "01-14.tsm1" ,
2877+ Size : 650 * 1024 * 1024 ,
2878+ },
2879+ {
2880+ Path : "01-15.tsm1" ,
2881+ Size : 450 * 1024 * 1024 ,
2882+ },
2883+ }, []int {
2884+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2885+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2886+ tsdb .DefaultAggressiveMaxPointsPerBlock ,
2887+ }, tsdb .SingleGenerationReasonText , 1 , false ,
2888+ },
2889+ }
2890+
2891+ mixedPlanOptimizeTestRunner := func (cp * tsm1.DefaultPlanner , reasonExp string , fullyCompacted bool ) {
2892+ compacted , reason := cp .FullyCompacted ()
2893+ require .Equal (t , reason , reasonExp , "fullyCompacted reason" )
2894+ require .Equal (t , compacted , fullyCompacted , "is fully compacted" )
2895+
2896+ // Ensure that no level planning takes place
2897+ _ , cgLen := cp .PlanLevel (1 )
2898+ require .Zero (t , cgLen , "compaction group length; PlanLevel(1)" )
2899+ _ , cgLen = cp .PlanLevel (2 )
2900+ require .Zero (t , cgLen , "compaction group length; PlanLevel(2)" )
2901+ _ , cgLen = cp .PlanLevel (3 )
2902+ require .Zero (t , cgLen , "compaction group length; PlanLevel(3)" )
2903+ }
2904+
2905+ // These tests will decrease the max points per block for aggressive compaction.
2906+ // For SetAggressiveCompactionPointsPerBlock we are using 10x the default to
2907+ // mock an administrator setting the max points per block to 100_000 and overriding
2908+ // the default of 10_000.
2909+ for _ , test := range mixedPlanOptimizeTests {
2910+ t .Run (test .name , func (t * testing.T ) {
2911+ ffs := & fakeFileStore {
2912+ PathsFn : func () []tsm1.FileStat {
2913+ return test .fs
2914+ },
2915+ }
2916+
2917+ if len (test .bc ) > 0 {
2918+ err := ffs .SetBlockCounts (test .bc )
2919+ require .NoError (t , err , "setting block counts" )
2920+ }
2921+
2922+ cp := tsm1 .NewDefaultPlanner (ffs , tsdb .DefaultCompactFullWriteColdDuration )
2923+ cp .SetAggressiveCompactionPointsPerBlock (tsdb .DefaultAggressiveMaxPointsPerBlock * 10 )
2924+ mixedPlanOptimizeTestRunner (cp , test .expectedFullyCompactedReasonExp , test .fullyCompacted )
2925+
2926+ // Reverse test files and re-run tests
2927+ slices .Reverse (test .fs )
2928+ if len (test .bc ) > 0 {
2929+ slices .Reverse (test .bc )
2930+ err := ffs .SetBlockCounts (test .bc )
2931+ require .NoError (t , err , "setting reverse block counts" )
2932+ }
2933+
2934+ cp = tsm1 .NewDefaultPlanner (ffs , tsdb .DefaultCompactFullWriteColdDuration )
2935+ cp .SetAggressiveCompactionPointsPerBlock (tsdb .DefaultAggressiveMaxPointsPerBlock * 10 )
2936+ mixedPlanOptimizeTestRunner (cp , test .expectedFullyCompactedReasonExp , test .fullyCompacted )
2937+ })
2938+ }
28002939}
28012940
28022941func TestDefaultPlanner_PlanOptimize_Tombstones (t * testing.T ) {
0 commit comments