use of com.pingcap.tidb.tipb.SelectResponse in project tispark by pingcap.
the class RegionStoreClientTest method doCoprocessTest.
private void doCoprocessTest(RegionStoreClient client) throws Exception {
server.put("key1", "value1");
server.put("key2", "value2");
server.put("key4", "value4");
server.put("key5", "value5");
server.put("key6", "value6");
server.put("key7", "value7");
DAGRequest.Builder builder = DAGRequest.newBuilder();
builder.addExecutors(Executor.newBuilder().setTp(ExecType.TypeTableScan).build());
builder.setStartTsFallback(1);
List<KeyRange> keyRanges = ImmutableList.of(createByteStringRange(ByteString.copyFromUtf8("key1"), ByteString.copyFromUtf8("key4")), createByteStringRange(ByteString.copyFromUtf8("key6"), ByteString.copyFromUtf8("key7")));
SelectResponse resp = coprocess(client, builder.build(), keyRanges);
assertEquals(5, resp.getChunksCount());
Set<String> results = ImmutableSet.copyOf(resp.getChunksList().stream().map(c -> c.getRowsData().toStringUtf8()).collect(Collectors.toList()));
assertTrue(results.containsAll(ImmutableList.of("value1", "value2", "value4", "value6", "value7")));
builder = DAGRequest.newBuilder();
builder.setStartTsFallback(1);
keyRanges = ImmutableList.of(createByteStringRange(ByteString.copyFromUtf8("error1"), ByteString.copyFromUtf8("error2")));
server.putError("error1", KVMockServer.ABORT);
try {
coprocess(client, builder.build(), keyRanges);
fail();
} catch (Exception e) {
assertTrue(true);
}
server.clearAllMap();
client.close();
}
use of com.pingcap.tidb.tipb.SelectResponse in project client-java by tikv.
the class DAGIterator method advanceNextResponse.
private boolean advanceNextResponse() {
if (!hasMoreResponse()) {
return false;
}
switch(pushDownType) {
case STREAMING:
SelectResponse resp = responseIterator.next();
chunkList = resp.getChunksList();
this.encodeType = resp.getEncodeType();
break;
case NORMAL:
chunkList = response.getChunksList();
this.encodeType = this.response.getEncodeType();
break;
}
if (chunkList == null || chunkList.isEmpty()) {
return false;
}
chunkIndex = 0;
createDataInputReader();
return true;
}
use of com.pingcap.tidb.tipb.SelectResponse in project client-java by tikv.
the class DAGIterator method process.
private SelectResponse process(RangeSplitter.RegionTask regionTask) {
Queue<RangeSplitter.RegionTask> remainTasks = new ArrayDeque<>();
Queue<SelectResponse> responseQueue = new ArrayDeque<>();
remainTasks.add(regionTask);
BackOffer backOffer = ConcreteBackOffer.newCopNextMaxBackOff();
HashSet<Long> resolvedLocks = new HashSet<>();
// the remaining tasks.
while (!remainTasks.isEmpty()) {
RangeSplitter.RegionTask task = remainTasks.poll();
if (task == null) {
continue;
}
List<Coprocessor.KeyRange> ranges = task.getRanges();
TiRegion region = task.getRegion();
TiStore store = task.getStore();
try {
RegionStoreClient client = session.getRegionStoreClientBuilder().build(region, store, storeType);
client.addResolvedLocks(startTs, resolvedLocks);
Collection<RangeSplitter.RegionTask> tasks = client.coprocess(backOffer, dagRequest, ranges, responseQueue, startTs);
if (tasks != null) {
remainTasks.addAll(tasks);
}
resolvedLocks.addAll(client.getResolvedLocks(startTs));
} catch (Throwable e) {
// Handle region task failed
logger.error("Process region tasks failed, remain " + remainTasks.size() + " tasks not executed due to", e);
// Rethrow to upper levels
throw new RegionTaskException("Handle region task failed:", e);
}
}
// Add all chunks to the final result
List<Chunk> resultChunk = new ArrayList<>();
EncodeType encodeType = null;
while (!responseQueue.isEmpty()) {
SelectResponse response = responseQueue.poll();
if (response != null) {
encodeType = response.getEncodeType();
resultChunk.addAll(response.getChunksList());
}
}
return SelectResponse.newBuilder().addAllChunks(resultChunk).setEncodeType(encodeType).build();
}
Aggregations