use of com.pingcap.tidb.tipb.SelectResponse in project client-java by tikv.
the class DAGIterator method processByStreaming.
private Iterator<SelectResponse> processByStreaming(RangeSplitter.RegionTask regionTask) {
List<Coprocessor.KeyRange> ranges = regionTask.getRanges();
TiRegion region = regionTask.getRegion();
TiStore store = regionTask.getStore();
RegionStoreClient client;
try {
client = session.getRegionStoreClientBuilder().build(region, store, storeType);
Iterator<SelectResponse> responseIterator = client.coprocessStreaming(dagRequest, ranges, startTs);
if (responseIterator == null) {
eof = true;
return null;
}
return responseIterator;
} catch (Exception e) {
// see:https://github.com/pingcap/tikv-client-lib-java/pull/149
throw new TiClientInternalException("Error Closing Store client.", e);
}
}
use of com.pingcap.tidb.tipb.SelectResponse in project tispark by pingcap.
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();
Metapb.Store store = task.getStore();
try {
RegionStoreClient client = session.getRegionStoreClientBuilder().build(region, store, storeType);
client.addResolvedLocks(startTs, resolvedLocks);
Collection<RangeSplitter.RegionTask> tasks = client.coprocess(backOffer, dagRequest, region, 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();
}
use of com.pingcap.tidb.tipb.SelectResponse in project tispark by pingcap.
the class DAGIterator method processByStreaming.
private Iterator<SelectResponse> processByStreaming(RangeSplitter.RegionTask regionTask) {
List<Coprocessor.KeyRange> ranges = regionTask.getRanges();
TiRegion region = regionTask.getRegion();
Metapb.Store store = regionTask.getStore();
RegionStoreClient client;
try {
client = session.getRegionStoreClientBuilder().build(region, store, storeType);
Iterator<SelectResponse> responseIterator = client.coprocessStreaming(dagRequest, ranges, startTs);
if (responseIterator == null) {
eof = true;
return null;
}
return responseIterator;
} catch (Exception e) {
// see:https://github.com/pingcap/tikv-client-lib-java/pull/149
throw new TiClientInternalException("Error Closing Store client.", e);
}
}
use of com.pingcap.tidb.tipb.SelectResponse in project tispark by pingcap.
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 tispark by pingcap.
the class RegionStoreClientTest method coprocess.
private SelectResponse coprocess(RegionStoreClient client, DAGRequest request, List<Coprocessor.KeyRange> ranges) {
BackOffer backOffer = defaultBackOff();
Queue<SelectResponse> responseQueue = new ArrayDeque<>();
client.coprocess(backOffer, request, client.getRegion(), ranges, responseQueue, 1);
List<Chunk> resultChunk = new ArrayList<>();
while (!responseQueue.isEmpty()) {
SelectResponse response = responseQueue.poll();
if (response != null) {
resultChunk.addAll(response.getChunksList());
}
}
return SelectResponse.newBuilder().addAllChunks(resultChunk).build();
}
Aggregations