Search in sources :

Example 6 with SelectResponse

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();
}
Also used : KeyRange(org.tikv.kvproto.Coprocessor.KeyRange) DAGRequest(com.pingcap.tidb.tipb.DAGRequest) ByteString(com.google.protobuf.ByteString) SelectResponse(com.pingcap.tidb.tipb.SelectResponse)

Example 7 with SelectResponse

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;
}
Also used : SelectResponse(com.pingcap.tidb.tipb.SelectResponse)

Example 8 with SelectResponse

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();
}
Also used : EncodeType(com.pingcap.tidb.tipb.EncodeType) ConcreteBackOffer(org.tikv.common.util.ConcreteBackOffer) BackOffer(org.tikv.common.util.BackOffer) TiStore(org.tikv.common.region.TiStore) Chunk(com.pingcap.tidb.tipb.Chunk) RegionTaskException(org.tikv.common.exception.RegionTaskException) TiRegion(org.tikv.common.region.TiRegion) RangeSplitter(org.tikv.common.util.RangeSplitter) SelectResponse(com.pingcap.tidb.tipb.SelectResponse) RegionStoreClient(org.tikv.common.region.RegionStoreClient)

Aggregations

SelectResponse (com.pingcap.tidb.tipb.SelectResponse)8 Chunk (com.pingcap.tidb.tipb.Chunk)3 EncodeType (com.pingcap.tidb.tipb.EncodeType)2 RegionTaskException (com.pingcap.tikv.exception.RegionTaskException)2 RegionStoreClient (com.pingcap.tikv.region.RegionStoreClient)2 TiRegion (com.pingcap.tikv.region.TiRegion)2 BackOffer (com.pingcap.tikv.util.BackOffer)2 ConcreteBackOffer (com.pingcap.tikv.util.ConcreteBackOffer)2 ArrayDeque (java.util.ArrayDeque)2 ArrayList (java.util.ArrayList)2 RegionTaskException (org.tikv.common.exception.RegionTaskException)2 RegionStoreClient (org.tikv.common.region.RegionStoreClient)2 TiRegion (org.tikv.common.region.TiRegion)2 TiStore (org.tikv.common.region.TiStore)2 Metapb (org.tikv.kvproto.Metapb)2 ByteString (com.google.protobuf.ByteString)1 DAGRequest (com.pingcap.tidb.tipb.DAGRequest)1 TiClientInternalException (com.pingcap.tikv.exception.TiClientInternalException)1 RangeSplitter (com.pingcap.tikv.util.RangeSplitter)1 HashSet (java.util.HashSet)1