public IndexedSliceReader( SSTableReader sstable, RowIndexEntry indexEntry, FileDataInput input, ByteBuffer startColumn, ByteBuffer finishColumn, boolean reversed) { this.sstable = sstable; this.originalInput = input; this.startColumn = startColumn; this.finishColumn = finishColumn; this.reversed = reversed; this.comparator = sstable.metadata.comparator; try { if (sstable.descriptor.hasPromotedIndexes) { this.indexes = indexEntry.columnsIndex(); if (indexes.isEmpty()) { setToRowStart(sstable, indexEntry, input); this.emptyColumnFamily = ColumnFamily.serializer() .deserializeFromSSTableNoColumns(ColumnFamily.create(sstable.metadata), file); fetcher = new SimpleBlockFetcher(); } else { this.emptyColumnFamily = ColumnFamily.create(sstable.metadata); emptyColumnFamily.delete(indexEntry.deletionInfo()); fetcher = new IndexedBlockFetcher(indexEntry); } } else { setToRowStart(sstable, indexEntry, input); IndexHelper.skipBloomFilter(file); this.indexes = IndexHelper.deserializeIndex(file); this.emptyColumnFamily = ColumnFamily.serializer() .deserializeFromSSTableNoColumns(ColumnFamily.create(sstable.metadata), file); fetcher = indexes.isEmpty() ? new SimpleBlockFetcher() : new IndexedBlockFetcher(); } } catch (IOException e) { sstable.markSuspect(); throw new IOError(e); } }