in src/java/org/apache/cassandra/io/sstable/format/big/BigSSTableReaderLoadingBuilder.java [70:159]
protected void openComponents(BigTableReader.Builder builder, SSTable.Owner owner, boolean validate, boolean online) throws IOException
{
try
{
if (online && builder.getTableMetadataRef().getLocal().params.caching.cacheKeys())
builder.setKeyCache(new KeyCache(CacheService.instance.keyCache));
StatsComponent statsComponent = StatsComponent.load(descriptor, MetadataType.STATS, MetadataType.HEADER, MetadataType.VALIDATION);
builder.setSerializationHeader(statsComponent.serializationHeader(builder.getTableMetadataRef().getLocal()));
checkArgument(!online || builder.getSerializationHeader() != null);
builder.setStatsMetadata(statsComponent.statsMetadata());
if (descriptor.version.hasKeyRange() && statsComponent.statsMetadata() != null)
{
builder.setFirst(tableMetadataRef.getLocal().partitioner.decorateKey(statsComponent.statsMetadata().firstKey));
builder.setLast(tableMetadataRef.getLocal().partitioner.decorateKey(statsComponent.statsMetadata().lastKey));
}
ValidationMetadata validationMetadata = statsComponent.validationMetadata();
validatePartitioner(builder.getTableMetadataRef().getLocal(), validationMetadata);
boolean filterNeeded = online;
if (filterNeeded)
builder.setFilter(loadFilter(validationMetadata));
boolean rebuildFilter = filterNeeded && builder.getFilter() == null;
boolean summaryNeeded = true;
if (summaryNeeded)
{
IndexSummaryComponent summaryComponent = loadSummary();
if (summaryComponent != null)
{
if (builder.getFirst() == null || builder.getLast() == null)
{
builder.setFirst(summaryComponent.first);
builder.setLast(summaryComponent.last);
}
builder.setIndexSummary(summaryComponent.indexSummary);
}
}
boolean rebuildSummary = summaryNeeded && builder.getIndexSummary() == null;
if (builder.getComponents().contains(Components.PRIMARY_INDEX) && (rebuildFilter || rebuildSummary))
{
try (FileHandle indexFile = indexFileBuilder(builder.getIndexSummary()).complete())
{
Pair<IFilter, IndexSummaryComponent> filterAndSummary = buildSummaryAndBloomFilter(indexFile, builder.getSerializationHeader(), rebuildFilter, rebuildSummary, owner != null ? owner.getMetrics() : null);
IFilter filter = filterAndSummary.left;
IndexSummaryComponent summaryComponent = filterAndSummary.right;
if (summaryComponent != null)
{
builder.setFirst(summaryComponent.first);
builder.setLast(summaryComponent.last);
builder.setIndexSummary(summaryComponent.indexSummary);
if (online)
summaryComponent.save(descriptor.fileFor(Components.SUMMARY), false);
}
if (filter != null)
{
builder.setFilter(filter);
if (online)
FilterComponent.save(filter, descriptor, false);
}
}
}
try (CompressionMetadata compressionMetadata = CompressionInfoComponent.maybeLoad(descriptor, components))
{
builder.setDataFile(dataFileBuilder(builder.getStatsMetadata())
.withCompressionMetadata(compressionMetadata)
.withCrcCheckChance(() -> tableMetadataRef.getLocal().params.crcCheckChance)
.complete());
}
if (builder.getFilter() == null)
builder.setFilter(FilterFactory.AlwaysPresent);
if (builder.getComponents().contains(Components.PRIMARY_INDEX))
builder.setIndexFile(indexFileBuilder(builder.getIndexSummary()).complete());
}
catch (IOException | RuntimeException | Error ex)
{
Throwables.closeNonNullAndAddSuppressed(ex, builder.getDataFile(), builder.getIndexFile(), builder.getFilter(), builder.getIndexSummary());
throw ex;
}
}