Ejemplo n.º 1
0
  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);
    }
  }