Skip to content

Commit 5258b38

Browse files
author
Nitsan Wakart
committed
Bug fix: should not write single index block
1 parent 29fd4b4 commit 5258b38

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

src/java/org/apache/cassandra/io/sstable/SSTableCursorWriter.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,15 @@ private void appendBIGIndex(byte[] key, int keyLength, long partitionStart, int
203203
ByteArrayUtil.writeWithShortLength(key, 0, keyLength, indexFileWriter);
204204

205205
indexFileWriter.writeUnsignedVInt(partitionStart);
206-
if (rowIndexEntriesOffsets.isEmpty())
206+
207+
// if the list of entries has one or fewer entries, no point in index entries.
208+
/** See: {@link org.apache.cassandra.io.sstable.format.big.RowIndexEntry#create} */
209+
if (rowIndexEntriesOffsets.size() <= 1)
207210
{
208211
/**
209212
* {@link RowIndexEntry#serialize(DataOutputPlus, ByteBuffer)}
210213
*/
211-
indexFileWriter.writeUnsignedVInt32(0);
214+
indexFileWriter.writeUnsignedVInt32(0); // size
212215
}
213216
else {
214217
// add last block
@@ -223,11 +226,14 @@ private void appendBIGIndex(byte[] key, int keyLength, long partitionStart, int
223226
// Write the headerLength, partitionDeletionTime and rowIndexEntriesOffsets.size() after the entries,
224227
// just to calculate size.
225228
rowIndexEntries.writeUnsignedVInt((long)headerLength);
226-
this.deletionTimeSerializer.serialize(partitionDeletionTime, rowIndexEntries);
227-
rowIndexEntries.writeUnsignedVInt32(rowIndexEntriesOffsets.size());
229+
deletionTimeSerializer.serialize(partitionDeletionTime, rowIndexEntries);
230+
231+
rowIndexEntries.writeUnsignedVInt32(rowIndexEntriesOffsets.size()); // number of entries
228232

229233
// bytes until offsets
230-
indexFileWriter.writeUnsignedVInt32(rowIndexEntries.getLength() + rowIndexEntriesOffsets.size() * 4);
234+
int entriesAndOffsetsSize = rowIndexEntries.getLength() + rowIndexEntriesOffsets.size() * 4;
235+
assert entriesAndOffsetsSize > 0;
236+
indexFileWriter.writeUnsignedVInt32(entriesAndOffsetsSize); // size != 0
231237
// copy the header elements
232238
indexFileWriter.write(rowIndexEntries.getData(), endOfEntries, rowIndexEntries.getLength() - endOfEntries);
233239
indexFileWriter.write(rowIndexEntries.getData(), 0, endOfEntries);

0 commit comments

Comments
 (0)