Skip to content

Commit 6f74a14

Browse files
committed
db: enable new formats
1 parent ed57946 commit 6f74a14

File tree

8 files changed

+52
-5
lines changed

8 files changed

+52
-5
lines changed

cockroachkvs/cockroachkvs_bench_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,18 @@ func BenchmarkRandSeekInSST(b *testing.B) {
7979
valueLen: 128, // ~200 KVs per data block
8080
version: sstable.TableFormatPebblev7,
8181
},
82+
{
83+
name: "v8/single-level",
84+
numKeys: 200 * 100, // ~100 data blocks.
85+
valueLen: 128, // ~200 KVs per data block
86+
version: sstable.TableFormatPebblev8,
87+
},
88+
{
89+
name: "v8/two-level",
90+
numKeys: 200 * 5000, // ~5000 data blocks
91+
valueLen: 128, // ~200 KVs per data block
92+
version: sstable.TableFormatPebblev8,
93+
},
8294
}
8395
keyCfg := KeyGenConfig{
8496
PrefixAlphabetLen: 26,

format_major_version.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,12 @@ const (
253253
// Previously, marking for compaction required a manifest rotation.
254254
FormatMarkForCompactionInVersionEdit
255255

256+
// FormatTieredStorage is a format major version that adds support for
257+
// tiered storage based on the age of a key-value pair. It introduces a new
258+
// columnar block format (among other things) that is required for tracking
259+
// the attribute used to derive the age.
260+
FormatTieredStorage
261+
256262
// -- Add new versions here --
257263

258264
// FormatNewest is the most recent format major version.
@@ -293,6 +299,8 @@ func (v FormatMajorVersion) resolveDefault() FormatMajorVersion {
293299
func (v FormatMajorVersion) MaxTableFormat() sstable.TableFormat {
294300
v = v.resolveDefault()
295301
switch {
302+
case v >= FormatTieredStorage:
303+
return sstable.TableFormatPebblev8
296304
case v >= formatFooterAttributes:
297305
return sstable.TableFormatPebblev7
298306
case v >= FormatTableFormatV6:
@@ -398,6 +406,9 @@ var formatMajorVersionMigrations = map[FormatMajorVersion]func(*DB) error{
398406
FormatMarkForCompactionInVersionEdit: func(d *DB) error {
399407
return d.finalizeFormatVersUpgrade(FormatMarkForCompactionInVersionEdit)
400408
},
409+
FormatTieredStorage: func(d *DB) error {
410+
return d.finalizeFormatVersUpgrade(FormatTieredStorage)
411+
},
401412
}
402413

403414
const formatVersionMarkerName = `format-version`
@@ -511,7 +522,11 @@ func (d *DB) ratchetFormatMajorVersionLocked(formatVers FormatMajorVersion) erro
511522
defer func() { d.mu.formatVers.ratcheting = false }()
512523

513524
for nextVers := d.FormatMajorVersion() + 1; nextVers <= formatVers; nextVers++ {
514-
if err := formatMajorVersionMigrations[nextVers](d); err != nil {
525+
migration, ok := formatMajorVersionMigrations[nextVers]
526+
if !ok || migration == nil {
527+
return errors.Errorf("pebble: no migration function defined for format version %d", nextVers)
528+
}
529+
if err := migration(d); err != nil {
515530
return errors.Wrapf(err, "migrating to version %d", nextVers)
516531
}
517532

format_major_version_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,12 @@ func TestFormatMajorVersionStableValues(t *testing.T) {
3838
require.Equal(t, FormatV2BlobFiles, FormatMajorVersion(26))
3939
require.Equal(t, FormatBackingValueSize, FormatMajorVersion(27))
4040
require.Equal(t, FormatMarkForCompactionInVersionEdit, FormatMajorVersion(28))
41+
require.Equal(t, FormatTieredStorage, FormatMajorVersion(29))
4142

4243
// When we add a new version, we should add a check for the new version above
4344
// in addition to updating the expected values below.
44-
require.Equal(t, FormatNewest, FormatMajorVersion(28))
45-
require.Equal(t, internalFormatNewest, FormatMajorVersion(28))
45+
require.Equal(t, FormatNewest, FormatMajorVersion(29))
46+
require.Equal(t, internalFormatNewest, FormatMajorVersion(29))
4647
}
4748

4849
func TestFormatMajorVersion_MigrationDefined(t *testing.T) {
@@ -233,6 +234,7 @@ func TestFormatMajorVersions_TableFormat(t *testing.T) {
233234
FormatV2BlobFiles: {sstable.TableFormatPebblev1, sstable.TableFormatPebblev7},
234235
FormatBackingValueSize: {sstable.TableFormatPebblev1, sstable.TableFormatPebblev7},
235236
FormatMarkForCompactionInVersionEdit: {sstable.TableFormatPebblev1, sstable.TableFormatPebblev7},
237+
FormatTieredStorage: {sstable.TableFormatPebblev1, sstable.TableFormatPebblev8},
236238
}
237239

238240
// Valid versions.
@@ -297,7 +299,7 @@ func TestFormatMajorVersions_MaxTableFormat(t *testing.T) {
297299
},
298300
{
299301
fmv: FormatNewest,
300-
want: sstable.TableFormatPebblev7,
302+
want: sstable.TableFormatPebblev8,
301303
},
302304
}
303305
for _, tc := range testCases {

sstable/writer_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ func TestWriter(t *testing.T) {
5050
{TableFormat: TableFormatPebblev5, File: "testdata/writer_v5"},
5151
{TableFormat: TableFormatPebblev6, File: "testdata/writer_v6"},
5252
{TableFormat: TableFormatPebblev7, File: "testdata/writer_v7"},
53+
{TableFormat: TableFormatPebblev8, File: "testdata/writer_v8"},
5354
}
5455
for _, tff := range formatFiles {
5556
t.Run(tff.TableFormat.String(), func(t *testing.T) {
@@ -66,6 +67,7 @@ func TestRewriter(t *testing.T) {
6667
{TableFormat: TableFormatPebblev5, File: "testdata/rewriter_v5"},
6768
{TableFormat: TableFormatPebblev6, File: "testdata/rewriter_v6"},
6869
{TableFormat: TableFormatPebblev7, File: "testdata/rewriter_v7"},
70+
{TableFormat: TableFormatPebblev8, File: "testdata/writer_v8"},
6971
}
7072
for _, tff := range formatFiles {
7173
t.Run(tff.TableFormat.String(), func(t *testing.T) {

testdata/checkpoint

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ sync: db/marker.format-version.000015.028
100100
close: db/marker.format-version.000015.028
101101
remove: db/marker.format-version.000014.027
102102
sync: db
103+
create: db/marker.format-version.000016.029
104+
sync: db/marker.format-version.000016.029
105+
close: db/marker.format-version.000016.029
106+
remove: db/marker.format-version.000015.028
107+
sync: db
103108
get-disk-usage: db
104109

105110
batch db

testdata/checkpoint_shared

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ sync: db/marker.format-version.000012.028
8585
close: db/marker.format-version.000012.028
8686
remove: db/marker.format-version.000011.027
8787
sync: db
88+
create: db/marker.format-version.000013.029
89+
sync: db/marker.format-version.000013.029
90+
close: db/marker.format-version.000013.029
91+
remove: db/marker.format-version.000012.028
92+
sync: db
8893
get-disk-usage: db
8994
create: db/REMOTE-OBJ-CATALOG-000001
9095
sync: db/REMOTE-OBJ-CATALOG-000001

testdata/event_listener

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,12 @@ close: db/marker.format-version.000015.028
123123
remove: db/marker.format-version.000014.027
124124
sync: db
125125
upgraded to format version: 028
126+
create: db/marker.format-version.000016.029
127+
sync: db/marker.format-version.000016.029
128+
close: db/marker.format-version.000016.029
129+
remove: db/marker.format-version.000015.028
130+
sync: db
131+
upgraded to format version: 029
126132
get-disk-usage: db
127133

128134
flush

tool/testdata/db_upgrade

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ db get foo yellow
2727
db upgrade foo
2828
----
2929
----
30-
Upgrading DB from internal version 16 to 28.
30+
Upgrading DB from internal version 16 to 29.
3131
WARNING!!!
3232
This DB will not be usable with older versions of Pebble!
3333

0 commit comments

Comments
 (0)