Skip to content

Commit 568e72c

Browse files
jasonstackdjatnieks
authored andcommitted
CNDB-13785: fix IndexComponentDiscover#StateBuilder to pass MB instead of bytes (#1699)
1 parent a097be4 commit 568e72c

File tree

4 files changed

+51
-11
lines changed

4 files changed

+51
-11
lines changed

src/java/org/apache/cassandra/index/sai/disk/format/IndexComponentDiscovery.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.apache.cassandra.utils.NoSpamLogger;
4343

4444
import static org.apache.cassandra.config.CassandraRelevantProperties.SAI_CUSTOM_COMPONENTS_DISCOVERY_CLASS;
45+
import static org.apache.cassandra.index.sai.disk.format.SSTableIndexComponentsState.State.toMB;
4546

4647
/**
4748
* Handles "discovering" SAI index components files from disk for a given sstable.
@@ -253,9 +254,9 @@ private static class StateBuilder
253254
void addTo(SSTableIndexComponentsState.Builder builder, @Nullable String indexName)
254255
{
255256
if (indexName == null)
256-
builder.addPerSSTable(buildId, totalSizeInBytes);
257+
builder.addPerSSTable(buildId, toMB(totalSizeInBytes));
257258
else
258-
builder.addPerIndex(indexName, buildId, totalSizeInBytes);
259+
builder.addPerIndex(indexName, buildId, toMB(totalSizeInBytes));
259260
}
260261

261262
static SSTableIndexComponentsState convert(Map<String, StateBuilder> states)

src/java/org/apache/cassandra/index/sai/disk/format/SSTableIndexComponentsState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ private static State of(IndexComponents.ForRead components)
342342
return new State(components.buildId(), toMB(components.liveSizeOnDiskInBytes()));
343343
}
344344

345-
private static long toMB(long bytes)
345+
public static long toMB(long bytes)
346346
{
347347
if (bytes == 0)
348348
return 0;

test/unit/org/apache/cassandra/index/sai/disk/format/IndexDescriptorTest.java

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.apache.cassandra.index.sai.disk.format;
2020

2121
import java.io.IOException;
22+
import java.nio.file.Path;
2223
import java.util.Arrays;
2324
import java.util.HashSet;
2425
import java.util.Set;
@@ -272,30 +273,53 @@ public void testReload() throws Throwable
272273
assertTrue(components.has(IndexComponentType.KD_TREE_POSTING_LISTS));
273274
}
274275

275-
private static void createFileOnDisk(Descriptor descriptor, String componentStr) throws IOException
276+
private static void createEmptyFileOnDisk(Descriptor descriptor, String componentStr) throws IOException
276277
{
277278
Files.touch(new File(PathUtils.getPath(descriptor.baseFileUri() + '-' + componentStr)).toJavaIOFile());
278279
}
279280

281+
private static void createileOnDisk(Descriptor descriptor, String componentStr, int size) throws IOException
282+
{
283+
if (size == 0)
284+
{
285+
createEmptyFileOnDisk(descriptor, componentStr);
286+
}
287+
else
288+
{
289+
Path filePath = PathUtils.getPath(descriptor.baseFileUri() + '-' + componentStr);
290+
Files.write(new byte[size], filePath.toFile());
291+
}
292+
}
293+
280294
static void createFakeDataFile(Descriptor descriptor) throws IOException
281295
{
282-
createFileOnDisk(descriptor, SSTableFormat.Components.DATA.name());
296+
createEmptyFileOnDisk(descriptor, SSTableFormat.Components.DATA.name());
283297
}
284298

285299
static void createFakeTOCFile(Descriptor descriptor) throws IOException
286300
{
287-
createFileOnDisk(descriptor, SSTableFormat.Components.TOC.name());
301+
createEmptyFileOnDisk(descriptor, SSTableFormat.Components.TOC.name());
288302
}
289303

290304
static void createFakePerSSTableComponents(Descriptor descriptor, Version version, int generation) throws IOException
305+
{
306+
createFakePerSSTableComponents(descriptor, version, generation, 0);
307+
}
308+
309+
static void createFakePerSSTableComponents(Descriptor descriptor, Version version, int generation, int sizeInBytes) throws IOException
291310
{
292311
for (IndexComponentType type : version.onDiskFormat().perSSTableComponentTypes())
293-
createFileOnDisk(descriptor, version.fileNameFormatter().format(type, (String)null, generation));
312+
createileOnDisk(descriptor, version.fileNameFormatter().format(type, (String)null, generation), sizeInBytes);
294313
}
295314

296315
static void createFakePerIndexComponents(Descriptor descriptor, IndexContext context, Version version, int generation) throws IOException
316+
{
317+
createFakePerIndexComponents(descriptor, context, version, generation, 0);
318+
}
319+
320+
static void createFakePerIndexComponents(Descriptor descriptor, IndexContext context, Version version, int generation, int sizeInBytes) throws IOException
297321
{
298322
for (IndexComponentType type : version.onDiskFormat().perIndexComponentTypes(context))
299-
createFileOnDisk(descriptor, version.fileNameFormatter().format(type, context, generation));
323+
createileOnDisk(descriptor, version.fileNameFormatter().format(type, context, generation), sizeInBytes);
300324
}
301325
}

test/unit/org/apache/cassandra/index/sai/disk/format/SSTableIndexComponentsStateTest.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.apache.cassandra.index.sai.SAITester;
3030
import org.apache.cassandra.index.sai.disk.format.SSTableIndexComponentsState.UnapplicableDiffException;
3131
import org.apache.cassandra.io.sstable.Descriptor;
32+
import org.apache.cassandra.io.sstable.format.SSTableReader;
33+
import org.mockito.Mockito;
3234

3335
import static org.apache.cassandra.index.sai.disk.format.IndexDescriptorTest.createFakeDataFile;
3436
import static org.apache.cassandra.index.sai.disk.format.IndexDescriptorTest.createFakePerIndexComponents;
@@ -342,9 +344,17 @@ public void buildFromDescriptorTest() throws IOException
342344
Descriptor descriptor = Descriptor.fromFilename(temporaryFolder.newFolder().getAbsolutePath() + "/ca-1-bti-Data.db");
343345

344346
createFakeDataFile(descriptor);
345-
createFakePerSSTableComponents(descriptor, Version.latest(), 0);
346-
createFakePerIndexComponents(descriptor, idx1, Version.latest(), 1);
347-
createFakePerIndexComponents(descriptor, idx2, Version.DB, 0);
347+
createFakePerSSTableComponents(descriptor, Version.latest(), 0, 1 * 1024 * 1024); // 1mb per file
348+
createFakePerIndexComponents(descriptor, idx1, Version.latest(), 1, 2 * 1024 * 1024); // 2mb per file
349+
createFakePerIndexComponents(descriptor, idx2, Version.DB, 0, 3 * 1024 * 1024); // 3mb per file
350+
351+
SSTableReader sstable = Mockito.mock(SSTableReader.class);
352+
Mockito.when(sstable.getDescriptor()).thenReturn(descriptor);
353+
SSTableIndexComponentsState discovered = IndexComponentDiscovery.instance().discoverComponents(sstable);
354+
assertEquals(6, discovered.perSSTable().sizeInMB);
355+
assertEquals(8, discovered.perIndex(idx1.getIndexName()).sizeInMB);
356+
assertEquals(12, discovered.perIndex(idx2.getIndexName()).sizeInMB);
357+
assertEquals(26, discovered.totalSizeInMB());
348358

349359
IndexDescriptor indexDescriptor = loadDescriptor(descriptor, idx1, idx2);
350360

@@ -355,12 +365,17 @@ public void buildFromDescriptorTest() throws IOException
355365

356366
assertEquals(Version.latest(), state.perSSTable().buildId.version());
357367
assertEquals(0, state.perSSTable().buildId.generation());
368+
assertEquals(6, state.perSSTable().sizeInMB);
358369

359370
assertEquals(Version.latest(), state.perIndex(idx1.getIndexName()).buildId.version());
360371
assertEquals(1, state.perIndex(idx1.getIndexName()).buildId.generation());
372+
assertEquals(8, state.perIndex(idx1.getIndexName()).sizeInMB);
361373

362374
assertEquals(Version.DB, state.perIndex(idx2.getIndexName()).buildId.version());
363375
assertEquals(0, state.perIndex(idx2.getIndexName()).buildId.generation());
376+
assertEquals(12, state.perIndex(idx2.getIndexName()).sizeInMB);
377+
378+
assertEquals(26, state.totalSizeInMB());
364379
}
365380
finally
366381
{

0 commit comments

Comments
 (0)