protected void openComponents()

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;
        }
    }