Skip to content
This repository was archived by the owner on Sep 28, 2023. It is now read-only.

Commit 9c8ada2

Browse files
Support multiple slices over RocksDBPartitions
1 parent b5a1bb5 commit 9c8ada2

File tree

1 file changed

+45
-2
lines changed

1 file changed

+45
-2
lines changed

src/java/org/apache/cassandra/rocksdb/RocksDBPartition.java

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.nio.ByteBuffer;
2222
import java.util.ArrayList;
23+
import java.util.Iterator;
2324
import java.util.List;
2425

2526
import org.apache.commons.lang.NotImplementedException;
@@ -147,8 +148,50 @@ public UnfilteredRowIterator unfilteredIterator()
147148

148149
public UnfilteredRowIterator unfilteredIterator(ColumnFilter columns, Slices slices, boolean reversed)
149150
{
150-
//TODO: support multiple slices
151-
return sliceIterator(slices.get(0), columns, (reversed ? PartitionIterOrder.REVERSED : PartitionIterOrder.NORMAL));
151+
if(slices.size() == 1) {
152+
return sliceIterator(slices.get(0), columns, reversed
153+
? PartitionIterOrder.REVERSED
154+
: PartitionIterOrder.NORMAL);
155+
}
156+
157+
return new SlicesIterator(slices, columns, reversed);
158+
}
159+
160+
private class SlicesIterator extends AbstractUnfilteredRowIterator {
161+
private final Iterator<Slice> slices;
162+
private final PartitionIterOrder iterOrder;
163+
private final ColumnFilter columnFilter;
164+
165+
private Iterator<Unfiltered> currentSlice;
166+
167+
private SlicesIterator(Slices slices, ColumnFilter columnFilter, boolean isReverseOrder) {
168+
super(RocksDBPartition.this.metadata, RocksDBPartition.this.partitionKey, DeletionTime.LIVE,
169+
RocksDBPartition.this.metadata.partitionColumns(), null, isReverseOrder, EncodingStats.NO_STATS);
170+
this.slices = slices.iterator();
171+
this.iterOrder = isReverseOrder ? PartitionIterOrder.REVERSED : PartitionIterOrder.NORMAL;
172+
this.columnFilter = columnFilter;
173+
}
174+
175+
protected Unfiltered computeNext()
176+
{
177+
while (true)
178+
{
179+
if (currentSlice == null)
180+
{
181+
if(slices.hasNext()) {
182+
currentSlice = sliceIterator(slices.next(), columnFilter, iterOrder);
183+
}
184+
else {
185+
return endOfData();
186+
}
187+
}
188+
189+
if (currentSlice.hasNext())
190+
return currentSlice.next();
191+
192+
currentSlice = null;
193+
}
194+
}
152195
}
153196

154197

0 commit comments

Comments
 (0)