Skip to content

Commit 091ed49

Browse files
committed
sstable: fix IndexSize, TopLevelIndexSize and NumDataBlocks
The RawColumnWriter has several bugs related to setting properties: IndexSize: In previous table formats, IndexSize recorded the _uncompressed_ size of the index block. The RawColumnWriter incorrectly totalled the compressed sizes of all index blocks. TopLevelIndexSize: The RawColumnWriter did not set this property at all. NumDataBlocks: When a table had a two-level index, the RawColumnWriter miscalculated NumDataBlocks. It improperly set the value to the number of entries in the first index block multipled by the count of bottom-level index blocks.
1 parent f126236 commit 091ed49

File tree

7 files changed

+48
-23
lines changed

7 files changed

+48
-23
lines changed

sstable/colblk_writer.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -845,7 +845,7 @@ func (w *RawColumnWriter) flushBufferedIndexBlocks() (rootIndex block.Handle, er
845845
if err != nil {
846846
return rootIndex, err
847847
}
848-
w.props.IndexSize = rootIndex.Length + block.TrailerLen
848+
w.props.IndexSize = uint64(len(w.indexBuffering.partitions[0].block))
849849
w.props.NumDataBlocks = uint64(w.indexBuffering.partitions[0].nEntries)
850850
w.props.IndexType = binarySearchIndex
851851
default:
@@ -855,15 +855,17 @@ func (w *RawColumnWriter) flushBufferedIndexBlocks() (rootIndex block.Handle, er
855855
if err != nil {
856856
return block.Handle{}, err
857857
}
858-
w.props.IndexSize += bh.Length + block.TrailerLen
859-
w.props.NumDataBlocks += uint64(w.indexBuffering.partitions[0].nEntries)
858+
w.props.IndexSize += uint64(len(part.block))
859+
w.props.NumDataBlocks += uint64(part.nEntries)
860860
w.topLevelIndexBlock.AddBlockHandle(part.sep.UserKey, bh, part.properties)
861861
}
862-
rootIndex, err = w.layout.WriteIndexBlock(w.topLevelIndexBlock.Finish(w.topLevelIndexBlock.Rows()))
862+
topLevelIndex := w.topLevelIndexBlock.Finish(w.topLevelIndexBlock.Rows())
863+
rootIndex, err = w.layout.WriteIndexBlock(topLevelIndex)
863864
if err != nil {
864865
return block.Handle{}, err
865866
}
866-
w.props.IndexSize += rootIndex.Length + block.TrailerLen
867+
w.props.TopLevelIndexSize = uint64(len(topLevelIndex))
868+
w.props.IndexSize += uint64(len(topLevelIndex))
867869
w.props.IndexType = twoLevelIndex
868870
w.props.IndexPartitions = uint64(len(w.indexBuffering.partitions))
869871
}

sstable/properties.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ type Properties struct {
153153
FilterSize uint64 `prop:"rocksdb.filter.size"`
154154
// Total number of index partitions if kTwoLevelIndexSearch is used.
155155
IndexPartitions uint64 `prop:"rocksdb.index.partitions"`
156-
// The size of index block.
156+
// The size (uncompressed) of index block.
157157
IndexSize uint64 `prop:"rocksdb.index.size"`
158158
// The index type. TODO(peter): add a more detailed description.
159159
IndexType uint32 `prop:"rocksdb.block.based.table.index.type"`
@@ -190,7 +190,7 @@ type Properties struct {
190190
// The cumulative bytes of values in this table that were pinned by
191191
// open snapshots. This value is comparable to RawValueSize.
192192
SnapshotPinnedValueSize uint64 `prop:"pebble.raw.snapshot-pinned-values.size"`
193-
// Size of the top-level index if kTwoLevelIndexSearch is used.
193+
// Size (uncompressed) of the top-level index if kTwoLevelIndexSearch is used.
194194
TopLevelIndexSize uint64 `prop:"rocksdb.top-level.index.size"`
195195
// User collected properties. Currently, we only use them to store block
196196
// properties aggregated at the table level.

sstable/testdata/columnar_writer/simple_binary

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ sstable
103103
│ ├── 00600 rocksdb.raw.value.size (14)
104104
│ ├── restart points
105105
│ │ └── 00614 [restart 0]
106-
│ └── trailer [compression=none checksum=0xf75fa767]
106+
│ └── trailer [compression=none checksum=0x38193e35]
107107
├── meta-index offset: 776 length: 33
108108
│ ├── 0000 rocksdb.properties block:149/622 [restart]
109109
│ ├── restart points
@@ -130,7 +130,7 @@ rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_
130130
rocksdb.comparator: pebble.internal.testkeys
131131
rocksdb.data.size: 93
132132
rocksdb.filter.size: 0
133-
rocksdb.index.size: 56
133+
rocksdb.index.size: 51
134134
rocksdb.block.based.table.index.type: 0
135135
pebble.colblk.schema: DefaultKeySchema(pebble.internal.testkeys,16)
136136
rocksdb.merge.operator: pebble.concatenate
@@ -250,7 +250,7 @@ sstable
250250
│ ├── 00568 rocksdb.raw.value.size (14)
251251
│ ├── restart points
252252
│ │ └── 00582 [restart 0]
253-
│ └── trailer [compression=none checksum=0x54772987]
253+
│ └── trailer [compression=none checksum=0x1341bc55]
254254
├── meta-index offset: 772 length: 33
255255
│ ├── 0000 rocksdb.properties block:177/590 [restart]
256256
│ ├── restart points
@@ -645,7 +645,7 @@ sstable
645645
│ ├── 00570 rocksdb.raw.value.size (15)
646646
│ ├── restart points
647647
│ │ └── 00585 [restart 0]
648-
│ └── trailer [compression=none checksum=0x98e2c466]
648+
│ └── trailer [compression=none checksum=0xa3e92c5a]
649649
├── meta-index offset: 1295 length: 33
650650
│ ├── 0000 rocksdb.properties block:697/593 [restart]
651651
│ ├── restart points
@@ -675,7 +675,7 @@ rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_
675675
rocksdb.comparator: pebble.internal.testkeys
676676
rocksdb.data.size: 582
677677
rocksdb.filter.size: 0
678-
rocksdb.index.size: 115
678+
rocksdb.index.size: 110
679679
rocksdb.block.based.table.index.type: 0
680680
pebble.colblk.schema: DefaultKeySchema(pebble.internal.testkeys,16)
681681
rocksdb.merge.operator: pebble.concatenate
@@ -1036,7 +1036,7 @@ sstable
10361036
│ ├── 00570 rocksdb.raw.value.size (15)
10371037
│ ├── restart points
10381038
│ │ └── 00585 [restart 0]
1039-
│ └── trailer [compression=none checksum=0x98e2c466]
1039+
│ └── trailer [compression=none checksum=0xa3e92c5a]
10401040
├── meta-index offset: 1295 length: 33
10411041
│ ├── 0000 rocksdb.properties block:697/593 [restart]
10421042
│ ├── restart points
@@ -1133,7 +1133,7 @@ sstable
11331133
│ ├── 00558 rocksdb.raw.value.size (14)
11341134
│ ├── restart points
11351135
│ │ └── 00572 [restart 0]
1136-
│ └── trailer [compression=none checksum=0xd4a2d9f6]
1136+
│ └── trailer [compression=none checksum=0x50f07e7e]
11371137
├── meta-index offset: 674 length: 59
11381138
│ ├── 0000 rocksdb.properties block:89/580 [restart]
11391139
│ ├── 0024 rocksdb.range_del2 block:33/51 [restart]
@@ -1251,7 +1251,7 @@ sstable
12511251
│ ├── 00640 rocksdb.raw.value.size (14)
12521252
│ ├── restart points
12531253
│ │ └── 00654 [restart 0]
1254-
│ └── trailer [compression=none checksum=0xbdc87030]
1254+
│ └── trailer [compression=none checksum=0x29bae4b8]
12551255
├── meta-index offset: 773 length: 57
12561256
│ ├── 0000 pebble.range_key block:33/68 [restart]
12571257
│ ├── 0021 rocksdb.properties block:106/662 [restart]

sstable/testdata/writer_blob_value_handles

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ sstable
132132
│ ├── 00589 rocksdb.property.collectors (41)
133133
│ ├── 00630 rocksdb.raw.key.size (21)
134134
│ ├── 00651 rocksdb.raw.value.size (24)
135-
│ └── trailer [compression=snappy checksum=0xf0c5768d]
135+
│ └── trailer [compression=snappy checksum=0x277c72db]
136136
├── meta-index offset: 767 length: 46
137137
│ ├── 0000 rocksdb.properties block:200/562
138138
│ │

sstable/testdata/writer_v5

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_
101101
rocksdb.comparator: pebble.internal.testkeys
102102
rocksdb.data.size: 0
103103
rocksdb.filter.size: 0
104-
rocksdb.index.size: 33
104+
rocksdb.index.size: 28
105105
rocksdb.block.based.table.index.type: 0
106106
pebble.colblk.schema: DefaultKeySchema(pebble.internal.testkeys,16)
107107
rocksdb.merge.operator: pebble.concatenate
@@ -317,7 +317,7 @@ rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_
317317
rocksdb.comparator: pebble.internal.testkeys
318318
rocksdb.data.size: 0
319319
rocksdb.filter.size: 0
320-
rocksdb.index.size: 33
320+
rocksdb.index.size: 28
321321
rocksdb.block.based.table.index.type: 0
322322
pebble.colblk.schema: DefaultKeySchema(pebble.internal.testkeys,16)
323323
rocksdb.merge.operator: pebble.concatenate

sstable/testdata/writer_v6

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_
101101
rocksdb.comparator: pebble.internal.testkeys
102102
rocksdb.data.size: 0
103103
rocksdb.filter.size: 0
104-
rocksdb.index.size: 33
104+
rocksdb.index.size: 28
105105
rocksdb.block.based.table.index.type: 0
106106
pebble.colblk.schema: DefaultKeySchema(pebble.internal.testkeys,16)
107107
rocksdb.merge.operator: pebble.concatenate
@@ -239,6 +239,29 @@ sstable
239239
├── meta-index offset: 974 length: 46
240240
└── footer offset: 1025 length: 57
241241

242+
props
243+
----
244+
rocksdb.num.entries: 3
245+
rocksdb.raw.key.size: 27
246+
rocksdb.raw.value.size: 3
247+
rocksdb.deleted.keys: 0
248+
rocksdb.num.range-deletions: 0
249+
rocksdb.num.data.blocks: 3
250+
rocksdb.compression: Snappy
251+
rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0;
252+
rocksdb.comparator: pebble.internal.testkeys
253+
rocksdb.data.size: 237
254+
rocksdb.filter.size: 0
255+
rocksdb.index.partitions: 3
256+
rocksdb.index.size: 158
257+
rocksdb.block.based.table.index.type: 2
258+
pebble.colblk.schema: DefaultKeySchema(pebble.internal.testkeys,16)
259+
rocksdb.merge.operator: pebble.concatenate
260+
rocksdb.merge.operands: 0
261+
rocksdb.property.collectors: [obsolete-key]
262+
rocksdb.top-level.index.size: 48
263+
obsolete-key: hex:00
264+
242265
# Exercise the non-Reader layout-decoding codepath.
243266

244267
decode-layout
@@ -317,7 +340,7 @@ rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_
317340
rocksdb.comparator: pebble.internal.testkeys
318341
rocksdb.data.size: 0
319342
rocksdb.filter.size: 0
320-
rocksdb.index.size: 33
343+
rocksdb.index.size: 28
321344
rocksdb.block.based.table.index.type: 0
322345
pebble.colblk.schema: DefaultKeySchema(pebble.internal.testkeys,16)
323346
rocksdb.merge.operator: pebble.concatenate

sstable/testdata/writer_value_blocks

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@ sstable
669669
│ ├── 00578 rocksdb.top-level.index.size (24)
670670
│ ├── restart points
671671
│ │ └── 00602 [restart 0]
672-
│ └── trailer [compression=none checksum=0x307b671a]
672+
│ └── trailer [compression=none checksum=0xc70b061b]
673673
├── meta-index offset: 1308 length: 64
674674
│ ├── 0000 pebble.value_index block:680/8 value-blocks-index-lengths: 1(num), 2(offset), 1(length) [restart]
675675
│ ├── 0027 rocksdb.properties block:693/610 [restart]
@@ -961,7 +961,7 @@ sstable
961961
│ ├── 00518 rocksdb.raw.value.size (14)
962962
│ ├── restart points
963963
│ │ └── 00532 [restart 0]
964-
│ └── trailer [compression=none checksum=0x62079e3b]
964+
│ └── trailer [compression=none checksum=0x9b925786]
965965
├── meta-index offset: 691 length: 33
966966
│ ├── 0000 rocksdb.properties block:146/540 [restart]
967967
│ ├── restart points
@@ -1103,7 +1103,7 @@ sstable
11031103
│ ├── 00556 rocksdb.property.collectors (41)
11041104
│ ├── 00597 rocksdb.raw.key.size (21)
11051105
│ ├── 00618 rocksdb.raw.value.size (23)
1106-
│ └── trailer [compression=snappy checksum=0x6a5dbad6]
1106+
│ └── trailer [compression=snappy checksum=0x5d7f7403]
11071107
├── meta-index offset: 676 length: 46
11081108
│ ├── 0000 rocksdb.properties block:146/525
11091109
│ │

0 commit comments

Comments
 (0)