Skip to content

Commit c969279

Browse files
committed
db: add some tests for compression stats
1 parent afb4d60 commit c969279

File tree

7 files changed

+128
-23
lines changed

7 files changed

+128
-23
lines changed

data_test.go

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,6 +1253,10 @@ func runTableStatsCmd(td *datadriven.TestData, d *DB) string {
12531253
fmt.Fprintf(&b, "tombstone-dense-blocks-ratio: %0.1f\n", f.Stats.TombstoneDenseBlocksRatio)
12541254
}
12551255

1256+
if !f.Stats.CompressionStats.IsEmpty() {
1257+
fmt.Fprintf(&b, "compression: %s\n", f.Stats.CompressionStats.String())
1258+
}
1259+
12561260
return b.String()
12571261
}
12581262
}
@@ -1801,30 +1805,34 @@ func parseDBOptionsArgs(opts *Options, args []datadriven.CmdArg) error {
18011805
opts.TargetFileSizes[i] = opts.TargetFileSizes[i-1] * 2
18021806
}
18031807
case "value-separation":
1804-
if len(cmdArg.Vals) != 5 {
1805-
return errors.New("value-separation expects 5 arguments: (enabled, minimum-size, max-blob-reference-depth, rewrite-minimum-age, target-garbage-ratio)")
1806-
}
18071808
var policy ValueSeparationPolicy
1808-
var err error
1809-
policy.Enabled, err = strconv.ParseBool(cmdArg.Vals[0])
1810-
if err != nil {
1811-
return err
1812-
}
1813-
policy.MinimumSize, err = strconv.Atoi(cmdArg.Vals[1])
1814-
if err != nil {
1815-
return err
1816-
}
1817-
policy.MaxBlobReferenceDepth, err = strconv.Atoi(cmdArg.Vals[2])
1818-
if err != nil {
1819-
return err
1820-
}
1821-
policy.RewriteMinimumAge, err = time.ParseDuration(cmdArg.Vals[3])
1822-
if err != nil {
1823-
return err
1824-
}
1825-
policy.TargetGarbageRatio, err = strconv.ParseFloat(cmdArg.Vals[4], 64)
1826-
if err != nil {
1827-
return err
1809+
if len(cmdArg.Vals) == 1 && cmdArg.Vals[0] == "off" || cmdArg.Vals[0] == "disabled" {
1810+
policy.Enabled = false
1811+
} else {
1812+
if len(cmdArg.Vals) != 5 {
1813+
return errors.New("value-separation expects 5 arguments: (enabled, minimum-size, max-blob-reference-depth, rewrite-minimum-age, target-garbage-ratio)")
1814+
}
1815+
var err error
1816+
policy.Enabled, err = strconv.ParseBool(cmdArg.Vals[0])
1817+
if err != nil {
1818+
return err
1819+
}
1820+
policy.MinimumSize, err = strconv.Atoi(cmdArg.Vals[1])
1821+
if err != nil {
1822+
return err
1823+
}
1824+
policy.MaxBlobReferenceDepth, err = strconv.Atoi(cmdArg.Vals[2])
1825+
if err != nil {
1826+
return err
1827+
}
1828+
policy.RewriteMinimumAge, err = time.ParseDuration(cmdArg.Vals[3])
1829+
if err != nil {
1830+
return err
1831+
}
1832+
policy.TargetGarbageRatio, err = strconv.ParseFloat(cmdArg.Vals[4], 64)
1833+
if err != nil {
1834+
return err
1835+
}
18281836
}
18291837
opts.Experimental.ValueSeparationPolicy = func() ValueSeparationPolicy {
18301838
return policy

testdata/compaction/set_with_del_sstable_Pebblev5

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ num-deletions: 1
8989
num-range-key-sets: 0
9090
point-deletions-bytes-estimate: 0
9191
range-deletions-bytes-estimate: 1536
92+
compression: None:79
9293

9394
compact a-e L1
9495
----
@@ -107,6 +108,7 @@ num-deletions: 1
107108
num-range-key-sets: 0
108109
point-deletions-bytes-estimate: 0
109110
range-deletions-bytes-estimate: 768
111+
compression: None:87,Snappy:76/87
110112

111113
# Same as above, except range tombstone covers multiple grandparent file boundaries.
112114

testdata/compaction/set_with_del_sstable_Pebblev6

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ num-deletions: 1
8989
num-range-key-sets: 0
9090
point-deletions-bytes-estimate: 0
9191
range-deletions-bytes-estimate: 1570
92+
compression: None:79
9293

9394
compact a-e L1
9495
----
@@ -107,6 +108,7 @@ num-deletions: 1
107108
num-range-key-sets: 0
108109
point-deletions-bytes-estimate: 0
109110
range-deletions-bytes-estimate: 785
111+
compression: None:87,Snappy:76/87
110112

111113
# Same as above, except range tombstone covers multiple grandparent file boundaries.
112114

testdata/compaction/set_with_del_sstable_Pebblev7

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ num-deletions: 1
8989
num-range-key-sets: 0
9090
point-deletions-bytes-estimate: 0
9191
range-deletions-bytes-estimate: 1518
92+
compression: None:79
9293

9394
compact a-e L1
9495
----
@@ -107,6 +108,7 @@ num-deletions: 1
107108
num-range-key-sets: 0
108109
point-deletions-bytes-estimate: 0
109110
range-deletions-bytes-estimate: 759
111+
compression: None:87,Snappy:76/87
110112

111113
# Same as above, except range tombstone covers multiple grandparent file boundaries.
112114

testdata/compaction_picker_scores

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ num-deletions: 1
3838
num-range-key-sets: 0
3939
point-deletions-bytes-estimate: 0
4040
range-deletions-bytes-estimate: 328899
41+
compression: None:79
4142

4243
scores
4344
----
@@ -94,6 +95,7 @@ num-deletions: 5
9495
num-range-key-sets: 0
9596
point-deletions-bytes-estimate: 163850
9697
range-deletions-bytes-estimate: 0
98+
compression: None:128
9799

98100
scores
99101
----
@@ -147,6 +149,7 @@ num-deletions: 5
147149
num-range-key-sets: 0
148150
point-deletions-bytes-estimate: 163860
149151
range-deletions-bytes-estimate: 0
152+
compression: None:129
150153

151154
maybe-compact
152155
----

testdata/compaction_tombstones

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ num-deletions: 2
1616
num-range-key-sets: 0
1717
point-deletions-bytes-estimate: 0
1818
range-deletions-bytes-estimate: 0
19+
compression: None:85
1920

2021
maybe-compact
2122
----
@@ -38,6 +39,7 @@ num-deletions: 2
3839
num-range-key-sets: 0
3940
point-deletions-bytes-estimate: 0
4041
range-deletions-bytes-estimate: 0
42+
compression: None:85
4143

4244
maybe-compact
4345
----
@@ -59,6 +61,7 @@ num-deletions: 1
5961
num-range-key-sets: 0
6062
point-deletions-bytes-estimate: 0
6163
range-deletions-bytes-estimate: 0
64+
compression: None:87,Snappy:76/87
6265

6366
maybe-compact
6467
----
@@ -82,6 +85,7 @@ num-deletions: 1
8285
num-range-key-sets: 0
8386
point-deletions-bytes-estimate: 2
8487
range-deletions-bytes-estimate: 0
88+
compression: None:124
8589

8690
maybe-compact
8791
----
@@ -121,6 +125,7 @@ num-deletions: 2
121125
num-range-key-sets: 0
122126
point-deletions-bytes-estimate: 2
123127
range-deletions-bytes-estimate: 101
128+
compression: None:87,Snappy:96/129
124129

125130
maybe-compact
126131
----
@@ -154,6 +159,7 @@ num-deletions: 1
154159
num-range-key-sets: 0
155160
point-deletions-bytes-estimate: 2
156161
range-deletions-bytes-estimate: 0
162+
compression: None:36,Snappy:131/169
157163

158164
close-snapshot
159165
15
@@ -198,6 +204,7 @@ num-deletions: 1
198204
num-range-key-sets: 0
199205
point-deletions-bytes-estimate: 0
200206
range-deletions-bytes-estimate: 16824
207+
compression: None:16929
201208

202209
# Because we set max bytes low, maybe-compact will trigger an automatic
203210
# compaction in preference over an elision-only compaction.
@@ -235,6 +242,7 @@ num-deletions: 3
235242
num-range-key-sets: 0
236243
point-deletions-bytes-estimate: 6150
237244
range-deletions-bytes-estimate: 0
245+
compression: None:128
238246

239247
# By plain file size, 000005 should be picked because it is larger and
240248
# overlaps the same amount of data in L6. However, 000004 has a high
@@ -269,6 +277,7 @@ num-deletions: 0
269277
num-range-key-sets: 0
270278
point-deletions-bytes-estimate: 0
271279
range-deletions-bytes-estimate: 0
280+
compression: None:79
272281

273282
wait-pending-table-stats
274283
000005
@@ -278,6 +287,7 @@ num-deletions: 0
278287
num-range-key-sets: 0
279288
point-deletions-bytes-estimate: 0
280289
range-deletions-bytes-estimate: 0
290+
compression: None:83
281291

282292
wait-pending-table-stats
283293
000006
@@ -287,6 +297,7 @@ num-deletions: 0
287297
num-range-key-sets: 1
288298
point-deletions-bytes-estimate: 0
289299
range-deletions-bytes-estimate: 0
300+
compression: None:83
290301

291302
maybe-compact
292303
----
@@ -320,6 +331,7 @@ num-deletions: 1
320331
num-range-key-sets: 0
321332
point-deletions-bytes-estimate: 0
322333
range-deletions-bytes-estimate: 94
334+
compression: None:227
323335

324336
maybe-compact
325337
----
@@ -361,6 +373,7 @@ num-deletions: 1
361373
num-range-key-sets: 0
362374
point-deletions-bytes-estimate: 2459
363375
range-deletions-bytes-estimate: 0
376+
compression: None:120
364377

365378
wait-pending-table-stats
366379
000005
@@ -370,6 +383,7 @@ num-deletions: 1
370383
num-range-key-sets: 0
371384
point-deletions-bytes-estimate: 0
372385
range-deletions-bytes-estimate: 8380
386+
compression: None:87,Snappy:73/84
373387

374388
# With multiple compactions, there is non-determinism in the output table
375389
# numbers, so the test overwrites them to 0.
@@ -407,6 +421,7 @@ num-deletions: 1
407421
num-range-key-sets: 0
408422
point-deletions-bytes-estimate: 2459
409423
range-deletions-bytes-estimate: 0
424+
compression: None:120
410425

411426
wait-pending-table-stats
412427
000005
@@ -416,6 +431,7 @@ num-deletions: 1
416431
num-range-key-sets: 0
417432
point-deletions-bytes-estimate: 0
418433
range-deletions-bytes-estimate: 8380
434+
compression: None:87,Snappy:73/84
419435

420436
# With multiple compactions, there is non-determinism in the output table
421437
# numbers, so the test overwrites them to 0.
@@ -478,6 +494,7 @@ num-deletions: 3
478494
num-range-key-sets: 0
479495
point-deletions-bytes-estimate: 7
480496
range-deletions-bytes-estimate: 0
497+
compression: None:36,Snappy:95/108
481498

482499
# Force a high tombstone density ratio to trigger the compaction
483500
# In a real scenario, this would be calculated based on the actual
@@ -491,6 +508,7 @@ num-range-key-sets: 0
491508
point-deletions-bytes-estimate: 7
492509
range-deletions-bytes-estimate: 0
493510
tombstone-dense-blocks-ratio: 0.9
511+
compression: None:36,Snappy:95/108
494512

495513
# Now the compaction should be triggered with tombstone-density type
496514
# since the file has a high tombstone density. The compaction log
@@ -540,6 +558,7 @@ num-deletions: 3
540558
num-range-key-sets: 0
541559
point-deletions-bytes-estimate: 7
542560
range-deletions-bytes-estimate: 0
561+
compression: None:36,Snappy:95/108
543562

544563
# Force a high tombstone density ratio to trigger the compaction
545564
wait-pending-table-stats force-tombstone-density-ratio=0.9
@@ -551,6 +570,7 @@ num-range-key-sets: 0
551570
point-deletions-bytes-estimate: 7
552571
range-deletions-bytes-estimate: 0
553572
tombstone-dense-blocks-ratio: 0.9
573+
compression: None:36,Snappy:95/108
554574

555575
# A regular tombstone density compaction should be triggered (not a move optimization)
556576
# because there are overlapping files in L5 that prevent the optimization
@@ -599,6 +619,7 @@ num-deletions: 3
599619
num-range-key-sets: 0
600620
point-deletions-bytes-estimate: 857149
601621
range-deletions-bytes-estimate: 0
622+
compression: None:36,Snappy:95/108
602623

603624
# Force a high tombstone density ratio to trigger the compaction
604625
wait-pending-table-stats force-tombstone-density-ratio=0.9
@@ -610,6 +631,7 @@ num-range-key-sets: 0
610631
point-deletions-bytes-estimate: 857149
611632
range-deletions-bytes-estimate: 0
612633
tombstone-dense-blocks-ratio: 0.9
634+
compression: None:36,Snappy:95/108
613635

614636
# No compaction is triggered because the overlapping bytes in L6 exceed MaxOverlapBytes.
615637
# Pebble avoids triggering a compaction in this case to prevent excessive overlap in the

testdata/table_stats

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -980,3 +980,69 @@ num-deletions: 3
980980
num-range-key-sets: 0
981981
point-deletions-bytes-estimate: 3942
982982
range-deletions-bytes-estimate: 0
983+
compression: None:36,Snappy:73/84
984+
985+
define format-major-version=25 block-size=100 value-separation=off
986+
----
987+
988+
batch
989+
set a <rand-bytes=4096>
990+
set b <rand-bytes=4096>
991+
set c <rand-bytes=4096>
992+
set d <rand-bytes=4096>
993+
set e <rand-bytes=4096>
994+
----
995+
996+
flush
997+
----
998+
L0.0:
999+
000005:[a#10,SET-e#14,SET]
1000+
1001+
compact a-c
1002+
----
1003+
L6:
1004+
000005:[a#10,SET-e#14,SET]
1005+
1006+
wait-pending-table-stats
1007+
000005
1008+
----
1009+
num-entries: 5
1010+
num-deletions: 0
1011+
num-range-key-sets: 0
1012+
point-deletions-bytes-estimate: 0
1013+
range-deletions-bytes-estimate: 0
1014+
compression: None:20986
1015+
1016+
build dummy
1017+
set c1 c1
1018+
----
1019+
1020+
ingest-and-excise dummy excise=b-e
1021+
----
1022+
1023+
lsm
1024+
----
1025+
L6:
1026+
000007(000005):[a#10,SET-a#10,SET]
1027+
000006:[c1#16,SET-c1#16,SET]
1028+
000008(000005):[e#14,SET-e#14,SET]
1029+
1030+
wait-pending-table-stats
1031+
000007
1032+
----
1033+
num-entries: 1
1034+
num-deletions: 0
1035+
num-range-key-sets: 0
1036+
point-deletions-bytes-estimate: 0
1037+
range-deletions-bytes-estimate: 0
1038+
compression: None:20986
1039+
1040+
wait-pending-table-stats
1041+
000008
1042+
----
1043+
num-entries: 1
1044+
num-deletions: 0
1045+
num-range-key-sets: 0
1046+
point-deletions-bytes-estimate: 0
1047+
range-deletions-bytes-estimate: 0
1048+
compression: None:20986

0 commit comments

Comments
 (0)