Skip to content

Commit 6c389ca

Browse files
committed
sstable: add (spanID, tiering attr) cols to data block
Fixes: #5466
1 parent 337f0ba commit 6c389ca

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+524
-193
lines changed

blob_rewrite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func TestBlobRewrite(t *testing.T) {
129129
} else {
130130
ikv.V = base.MakeInPlaceValue([]byte(parts[1]))
131131
}
132-
require.NoError(t, vs.Add(tw, &ikv, false /* forceObsolete */, false /* isLikeyMVCCGarbage */))
132+
require.NoError(t, vs.Add(tw, &ikv, false /* forceObsolete */, false /* isLikeyMVCCGarbage */, base.KVMeta{}))
133133
}
134134
return buf.String()
135135
case "close-output":
@@ -321,6 +321,7 @@ func TestBlobRewriteRandomized(t *testing.T) {
321321
},
322322
base.ShortAttribute(0),
323323
false, /* forceObsolete */
324+
base.KVMeta{},
324325
))
325326
require.NoError(t, tw.Close())
326327
originalValueIndices[i] = i

cockroachkvs/cockroachkvs_bench_test.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ func benchmarkCockroachDataColBlockWriter(b *testing.B, keyConfig KeyGenConfig,
193193
_, keys, values := generateDataBlock(rng, targetBlockSize, keyConfig, valueLen)
194194

195195
var w colblk.DataBlockEncoder
196-
w.Init(&KeySchema)
196+
w.Init(colblk.ColumnFormatv1, &KeySchema)
197197

198198
b.ResetTimer()
199199
for i := 0; i < b.N; i++ {
@@ -202,7 +202,8 @@ func benchmarkCockroachDataColBlockWriter(b *testing.B, keyConfig KeyGenConfig,
202202
for w.Size() < targetBlockSize {
203203
ik := base.MakeInternalKey(keys[count], base.SeqNum(rng.Uint64N(uint64(base.SeqNumMax))), base.InternalKeyKindSet)
204204
kcmp := w.KeyWriter.ComparePrev(ik.UserKey)
205-
w.Add(ik, values[count], block.InPlaceValuePrefix(kcmp.PrefixEqual()), kcmp, false /* isObsolete */)
205+
w.Add(ik, values[count], block.InPlaceValuePrefix(kcmp.PrefixEqual()), kcmp,
206+
false /* isObsolete */, base.KVMeta{})
206207
count++
207208
}
208209
_, _ = w.Finish(w.Rows(), w.Size())
@@ -315,10 +316,10 @@ func benchmarkCockroachDataColBlockIter(
315316

316317
var decoder colblk.DataBlockDecoder
317318
var it colblk.DataBlockIter
318-
it.InitOnce(&KeySchema, &Comparer, getInternalValuer(func([]byte) base.InternalValue {
319+
it.InitOnce(colblk.ColumnFormatv1, &KeySchema, &Comparer, getInternalValuer(func([]byte) base.InternalValue {
319320
return base.MakeInPlaceValue([]byte("mock external value"))
320321
}))
321-
bd := decoder.Init(&KeySchema, serializedBlock)
322+
bd := decoder.Init(colblk.ColumnFormatv1, &KeySchema, serializedBlock)
322323
if err := it.Init(&decoder, bd, transforms); err != nil {
323324
b.Fatal(err)
324325
}
@@ -382,19 +383,19 @@ func BenchmarkInitDataBlockMetadata(b *testing.B) {
382383
}, 8)
383384

384385
var w colblk.DataBlockEncoder
385-
w.Init(&KeySchema)
386+
w.Init(colblk.ColumnFormatv1, &KeySchema)
386387
for j := 0; w.Size() < targetBlockSize; j++ {
387388
ik := base.MakeInternalKey(keys[j], base.SeqNum(rng.Uint64N(uint64(base.SeqNumMax))), base.InternalKeyKindSet)
388389
kcmp := w.KeyWriter.ComparePrev(ik.UserKey)
389390
vp := block.InPlaceValuePrefix(kcmp.PrefixEqual())
390-
w.Add(ik, values[j], vp, kcmp, false /* isObsolete */)
391+
w.Add(ik, values[j], vp, kcmp, false /* isObsolete */, base.KVMeta{})
391392
}
392393
finished, _ := w.Finish(w.Rows(), w.Size())
393394

394395
var md block.Metadata
395396

396397
b.ResetTimer()
397398
for range b.N {
398-
colblk.InitDataBlockMetadata(&KeySchema, &md, finished)
399+
colblk.InitDataBlockMetadata(colblk.ColumnFormatv1, &KeySchema, &md, finished)
399400
}
400401
}

cockroachkvs/cockroachkvs_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ func TestKeySchema_KeySeeker(t *testing.T) {
207207
var bd colblk.BlockDecoder
208208
var ks colblk.KeySeeker
209209
var maxKeyLen int
210-
enc.Init(&KeySchema)
210+
enc.Init(colblk.ColumnFormatv1, &KeySchema)
211211

212212
initKeySeeker := func() {
213213
ksPointer := &cockroachKeySeeker{}
@@ -231,11 +231,11 @@ func TestKeySchema_KeySeeker(t *testing.T) {
231231
UserKey: k,
232232
Trailer: pebble.MakeInternalKeyTrailer(0, base.InternalKeyKindSet),
233233
}
234-
enc.Add(ikey, k, block.InPlaceValuePrefix(false), kcmp, false /* isObsolete */)
234+
enc.Add(ikey, k, block.InPlaceValuePrefix(false), kcmp, false /* isObsolete */, base.KVMeta{})
235235
rows++
236236
}
237237
blk, _ := enc.Finish(rows, enc.Size())
238-
bd = dec.Init(&KeySchema, blk)
238+
bd = dec.Init(colblk.ColumnFormatv1, &KeySchema, blk)
239239
return buf.String()
240240
case "is-lower-bound":
241241
initKeySeeker()
@@ -410,10 +410,10 @@ func testCockroachDataColBlock(t *testing.T, seed uint64, keyCfg KeyGenConfig) {
410410

411411
var decoder colblk.DataBlockDecoder
412412
var it colblk.DataBlockIter
413-
it.InitOnce(&KeySchema, &Comparer, getInternalValuer(func([]byte) base.InternalValue {
413+
it.InitOnce(colblk.ColumnFormatv1, &KeySchema, &Comparer, getInternalValuer(func([]byte) base.InternalValue {
414414
return base.MakeInPlaceValue([]byte("mock external value"))
415415
}))
416-
bd := decoder.Init(&KeySchema, serializedBlock)
416+
bd := decoder.Init(colblk.ColumnFormatv1, &KeySchema, serializedBlock)
417417
if err := it.Init(&decoder, bd, blockiter.Transforms{}); err != nil {
418418
t.Fatal(err)
419419
}
@@ -460,12 +460,12 @@ func generateDataBlock(
460460
keys, values = RandomKVs(rng, targetBlockSize/valueLen, cfg, valueLen)
461461

462462
var w colblk.DataBlockEncoder
463-
w.Init(&KeySchema)
463+
w.Init(colblk.ColumnFormatv1, &KeySchema)
464464
count := 0
465465
for w.Size() < targetBlockSize {
466466
ik := base.MakeInternalKey(keys[count], base.SeqNum(rng.Uint64N(uint64(base.SeqNumMax))), base.InternalKeyKindSet)
467467
kcmp := w.KeyWriter.ComparePrev(ik.UserKey)
468-
w.Add(ik, values[count], block.InPlaceValuePrefix(kcmp.PrefixEqual()), kcmp, false /* isObsolete */)
468+
w.Add(ik, values[count], block.InPlaceValuePrefix(kcmp.PrefixEqual()), kcmp, false /* isObsolete */, base.KVMeta{})
469469
count++
470470
}
471471
data, _ = w.Finish(w.Rows(), w.Size())

cockroachkvs/key_schema_test.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@ func TestKeySchema(t *testing.T) {
4040
func runDataDrivenTest(t *testing.T, path string) {
4141
var blockData []byte
4242
var e colblk.DataBlockEncoder
43-
e.Init(&KeySchema)
43+
colFmt := colblk.ColumnFormatv1
44+
e.Init(colFmt, &KeySchema)
4445
var iter colblk.DataBlockIter
45-
iter.InitOnce(&KeySchema, &Comparer, nil)
46+
iter.InitOnce(colFmt, &KeySchema, &Comparer, nil)
4647

4748
datadriven.RunTest(t, path, func(t *testing.T, td *datadriven.TestData) string {
4849
switch td.Cmd {
@@ -52,7 +53,7 @@ func runDataDrivenTest(t *testing.T, path string) {
5253
for _, l := range crstrings.Lines(td.Input) {
5354
key, value := parseInternalKV(l)
5455
kcmp := e.KeyWriter.ComparePrev(key.UserKey)
55-
e.Add(key, value, 0, kcmp, false /* isObsolete */)
56+
e.Add(key, value, 0, kcmp, false /* isObsolete */, base.KVMeta{})
5657
buf = e.MaterializeLastUserKey(buf[:0])
5758
if !Comparer.Equal(key.UserKey, buf) {
5859
td.Fatalf(t, "incorrect MaterializeLastKey: %s instead of %s", formatUserKey(buf), formatUserKey(key.UserKey))
@@ -66,22 +67,22 @@ func runDataDrivenTest(t *testing.T, path string) {
6667

6768
case "describe":
6869
var d colblk.DataBlockDecoder
69-
bd := d.Init(&KeySchema, blockData)
70+
bd := d.Init(colFmt, &KeySchema, blockData)
7071
f := binfmt.New(blockData)
7172
tp := treeprinter.New()
7273
d.Describe(f, tp, bd)
7374
return tp.String()
7475

7576
case "suffix-types":
7677
var d colblk.DataBlockDecoder
77-
bd := d.Init(&KeySchema, blockData)
78+
bd := d.Init(colFmt, &KeySchema, blockData)
7879
var ks cockroachKeySeeker
7980
ks.init(&d, bd)
8081
return fmt.Sprintf("suffix-types: %s", ks.suffixTypes)
8182

8283
case "keys":
8384
var d colblk.DataBlockDecoder
84-
bd := d.Init(&KeySchema, blockData)
85+
bd := d.Init(colFmt, &KeySchema, blockData)
8586
require.NoError(t, iter.Init(&d, bd, blockiter.Transforms{}))
8687
defer iter.Close()
8788
var buf bytes.Buffer
@@ -98,7 +99,7 @@ func runDataDrivenTest(t *testing.T, path string) {
9899

99100
case "seek":
100101
var d colblk.DataBlockDecoder
101-
bd := d.Init(&KeySchema, blockData)
102+
bd := d.Init(colFmt, &KeySchema, blockData)
102103
require.NoError(t, iter.Init(&d, bd, blockiter.Transforms{}))
103104
defer iter.Close()
104105
var buf strings.Builder
@@ -133,21 +134,22 @@ func TestKeySchema_RandomKeys(t *testing.T) {
133134
slices.SortFunc(keys, Compare)
134135

135136
var enc colblk.DataBlockEncoder
136-
enc.Init(&KeySchema)
137+
colFmt := colblk.ColumnFormatv1
138+
enc.Init(colFmt, &KeySchema)
137139
for i := range keys {
138140
ikey := pebble.InternalKey{
139141
UserKey: keys[i],
140142
Trailer: pebble.MakeInternalKeyTrailer(0, pebble.InternalKeyKindSet),
141143
}
142-
enc.Add(ikey, keys[i], block.InPlaceValuePrefix(false), enc.KeyWriter.ComparePrev(keys[i]), false /* isObsolete */)
144+
enc.Add(ikey, keys[i], block.InPlaceValuePrefix(false), enc.KeyWriter.ComparePrev(keys[i]), false /* isObsolete */, base.KVMeta{})
143145
}
144146
blk, _ := enc.Finish(len(keys), enc.Size())
145147
blk = crbytes.CopyAligned(blk)
146148

147149
var dec colblk.DataBlockDecoder
148-
bd := dec.Init(&KeySchema, blk)
150+
bd := dec.Init(colFmt, &KeySchema, blk)
149151
var it colblk.DataBlockIter
150-
it.InitOnce(&KeySchema, &Comparer, nil)
152+
it.InitOnce(colFmt, &KeySchema, &Comparer, nil)
151153
require.NoError(t, it.Init(&dec, bd, blockiter.NoTransforms))
152154
// Ensure that a scan across the block finds all the relevant keys.
153155
var valBuf []byte

data_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -673,13 +673,13 @@ func runBuildCmd(
673673
if err != nil {
674674
return err
675675
}
676-
if err := w.Raw().AddWithBlobHandle(tmp, handle, base.ShortAttribute(0), false); err != nil {
676+
if err := w.Raw().AddWithBlobHandle(tmp, handle, base.ShortAttribute(0), false, base.KVMeta{}); err != nil {
677677
return err
678678
}
679679
continue
680680
}
681681
// Otherwise add it as an ordinary value.
682-
if err := w.Raw().Add(tmp, v, false); err != nil {
682+
if err := w.Raw().Add(tmp, v, false, base.KVMeta{}); err != nil {
683683
return err
684684
}
685685
}
@@ -1964,14 +1964,14 @@ func (vs *defineDBValueSeparator) EstimatedReferenceSize() uint64 {
19641964
// Add adds the provided key-value pair to the sstable, possibly separating the
19651965
// value into a blob file.
19661966
func (vs *defineDBValueSeparator) Add(
1967-
tw sstable.RawWriter, kv *base.InternalKV, forceObsolete bool, _ bool,
1967+
tw sstable.RawWriter, kv *base.InternalKV, forceObsolete bool, _ bool, kvMeta base.KVMeta,
19681968
) error {
19691969
// In datadriven tests, all defined values are in-place initially. See
19701970
// runDBDefineCmdReuseFS.
19711971
v := kv.V.InPlaceValue()
19721972
// If the value doesn't begin with "blob", don't separate it.
19731973
if !bytes.HasPrefix(v, []byte("blob")) {
1974-
return tw.Add(kv.K, v, forceObsolete)
1974+
return tw.Add(kv.K, v, forceObsolete, kvMeta)
19751975
}
19761976

19771977
// This looks like a blob reference. Parse it.
@@ -1996,7 +1996,7 @@ func (vs *defineDBValueSeparator) Add(
19961996
// Return a KV that uses the original key but our constructed blob reference.
19971997
vs.kv.K = kv.K
19981998
vs.kv.V = iv
1999-
return vs.pbr.Add(tw, &vs.kv, forceObsolete, false /* isLikelyMVCCGarbage */)
1999+
return vs.pbr.Add(tw, &vs.kv, forceObsolete, false /* isLikelyMVCCGarbage */, kvMeta)
20002000
}
20012001

20022002
// FinishOutput implements valsep.ValueSeparation.

excise_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,8 @@ func TestConcurrentExcise(t *testing.T) {
590590
VisitPointKey: func(key *InternalKey, value LazyValue, _ IteratorLevel) error {
591591
val, _, err := value.Value(nil)
592592
require.NoError(t, err)
593-
require.NoError(t, w.Add(base.MakeInternalKey(key.UserKey, 0, key.Kind()), val, false /* forceObsolete */))
593+
require.NoError(t, w.Add(base.MakeInternalKey(key.UserKey, 0, key.Kind()), val,
594+
false /* forceObsolete */, base.KVMeta{}))
594595
return nil
595596
},
596597
VisitRangeDel: func(start, end []byte, seqNum base.SeqNum) error {

file_cache_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ func (t *fileCacheTest) newTestHandle() (*fileCacheHandle, *fileCacheTestFS) {
219219
}
220220
tw := sstable.NewWriter(w, sstable.WriterOptions{TableFormat: sstable.TableFormatPebblev2})
221221
ik := base.ParseInternalKey(fmt.Sprintf("k.SET.%d", i))
222-
if err := tw.Raw().Add(ik, xxx[:i], false); err != nil {
222+
if err := tw.Raw().Add(ik, xxx[:i], false, base.KVMeta{}); err != nil {
223223
t.Fatal(err)
224224
}
225225
if err := tw.RangeKeySet([]byte("k"), []byte("l"), nil, xxx[:i]); err != nil {

ingest_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,12 @@ func TestIngestLoad(t *testing.T) {
127127
if blobtest.IsBlobHandle(data[j+1:]) {
128128
ih, _, err := bv.ParseInlineHandle(data[j+1:])
129129
require.NoError(t, err)
130-
if err := w.AddWithBlobHandle(key, ih, base.ShortAttribute(0), false /* forceObsolete */); err != nil {
130+
if err := w.AddWithBlobHandle(key, ih, base.ShortAttribute(0), false /* forceObsolete */, base.KVMeta{}); err != nil {
131131
return err.Error()
132132
}
133133
} else {
134134
value := []byte(data[j+1:])
135-
if err := w.Add(key, value, false /* forceObsolete */); err != nil {
135+
if err := w.Add(key, value, false /* forceObsolete */, base.KVMeta{}); err != nil {
136136
return err.Error()
137137
}
138138
}
@@ -221,7 +221,7 @@ func TestIngestLoadRand(t *testing.T) {
221221
// Duplicate key, ignore.
222222
continue
223223
}
224-
require.NoError(t, w.Add(keys[i], nil, false /* forceObsolete */))
224+
require.NoError(t, w.Add(keys[i], nil, false /* forceObsolete */, base.KVMeta{}))
225225
count++
226226
rawKeySize += uint64(keys[i].Size())
227227
}
@@ -853,7 +853,7 @@ func testIngestSharedImpl(
853853
VisitPointKey: func(key *InternalKey, value LazyValue, _ IteratorLevel) error {
854854
val, _, err := value.Value(nil)
855855
require.NoError(t, err)
856-
require.NoError(t, w.Add(base.MakeInternalKey(key.UserKey, 0, key.Kind()), val, false /* forceObsolete */))
856+
require.NoError(t, w.Add(base.MakeInternalKey(key.UserKey, 0, key.Kind()), val, false /* forceObsolete */, base.KVMeta{}))
857857
return nil
858858
},
859859
VisitRangeDel: func(start, end []byte, seqNum base.SeqNum) error {
@@ -1373,7 +1373,7 @@ func TestIngestExternal(t *testing.T) {
13731373
VisitPointKey: func(key *InternalKey, value LazyValue, _ IteratorLevel) error {
13741374
val, _, err := value.Value(nil)
13751375
require.NoError(t, err)
1376-
require.NoError(t, w.Add(base.MakeInternalKey(key.UserKey, 0, key.Kind()), val, false /* forceObsolete */))
1376+
require.NoError(t, w.Add(base.MakeInternalKey(key.UserKey, 0, key.Kind()), val, false /* forceObsolete */, base.KVMeta{}))
13771377
return nil
13781378
},
13791379
VisitRangeDel: func(start, end []byte, seqNum base.SeqNum) error {
@@ -1986,7 +1986,7 @@ func TestIngestCompact(t *testing.T) {
19861986

19871987
w := sstable.NewRawWriter(objstorageprovider.NewFileWritable(f), sstable.WriterOptions{})
19881988
key := []byte("a")
1989-
require.NoError(t, w.Add(base.MakeInternalKey(key, 0, InternalKeyKindSet), nil, false /* forceObsolete */))
1989+
require.NoError(t, w.Add(base.MakeInternalKey(key, 0, InternalKeyKindSet), nil, false /* forceObsolete */, base.KVMeta{}))
19901990
require.NoError(t, w.Close())
19911991

19921992
// Make N copies of the sstable.
@@ -2629,7 +2629,7 @@ func TestIngest_UpdateSequenceNumber(t *testing.T) {
26292629
}
26302630
key := base.ParseInternalKey(data[:j])
26312631
value := []byte(data[j+1:])
2632-
if err := w.Add(key, value, false /* forceObsolete */); err != nil {
2632+
if err := w.Add(key, value, false /* forceObsolete */, base.KVMeta{}); err != nil {
26332633
return nil, err
26342634
}
26352635
}

0 commit comments

Comments
 (0)