Search in sources :

Example 16 with BackOffer

use of com.pingcap.tikv.util.BackOffer in project tispark by pingcap.

the class TwoPhaseCommitter method doCommitSecondaryKeys.

private void doCommitSecondaryKeys(Iterator<ByteString> keys, long commitTs, int commitBackOfferMS) throws TiBatchWriteException {
    try {
        int taskBufferSize = writeThreadPerTask * 2;
        int totalSize = 0, cnt = 0;
        ExecutorCompletionService<Void> completionService = new ExecutorCompletionService<>(executorService);
        while (keys.hasNext()) {
            List<ByteString> keyBytes = new ArrayList<>(writeBufferSize);
            while (keyBytes.size() < writeBufferSize && keys.hasNext()) {
                keyBytes.add(keys.next());
            }
            int curSize = keyBytes.size();
            cnt++;
            if (cnt > taskBufferSize) {
                // consume one task if reaches task limit
                completionService.take().get();
            }
            BackOffer backOffer = ConcreteBackOffer.newCustomBackOff(commitBackOfferMS);
            completionService.submit(() -> {
                doCommitSecondaryKeysWithRetry(backOffer, keyBytes, curSize, commitTs);
                return null;
            });
            totalSize = totalSize + keyBytes.size();
        }
        for (int i = 0; i < Math.min(taskBufferSize, cnt); i++) {
            completionService.take().get();
        }
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        throw new TiBatchWriteException("Current thread interrupted.", e);
    } catch (ExecutionException e) {
        throw new TiBatchWriteException("Execution exception met.", e);
    }
}
Also used : ByteString(com.google.protobuf.ByteString) ArrayList(java.util.ArrayList) ExecutorCompletionService(java.util.concurrent.ExecutorCompletionService) ConcreteBackOffer(com.pingcap.tikv.util.ConcreteBackOffer) BackOffer(com.pingcap.tikv.util.BackOffer) ExecutionException(java.util.concurrent.ExecutionException) TiBatchWriteException(com.pingcap.tikv.exception.TiBatchWriteException)

Example 17 with BackOffer

use of com.pingcap.tikv.util.BackOffer in project tispark by pingcap.

the class TxnKVClient method getTimestamp.

public TiTimestamp getTimestamp() {
    BackOffer bo = ConcreteBackOffer.newTsoBackOff();
    TiTimestamp timestamp = new TiTimestamp(0, 0);
    try {
        while (true) {
            try {
                timestamp = pdClient.getTimestamp(bo);
                break;
            } catch (final TiKVException | TiClientInternalException e) {
                // retry is exhausted
                bo.doBackOff(BackOffFunction.BackOffFuncType.BoPDRPC, e);
            }
        }
    } catch (GrpcException e1) {
        LOG.error("Get tso from pd failed,", e1);
    }
    return timestamp;
}
Also used : TiTimestamp(com.pingcap.tikv.meta.TiTimestamp) TiClientInternalException(com.pingcap.tikv.exception.TiClientInternalException) TiKVException(com.pingcap.tikv.exception.TiKVException) GrpcException(com.pingcap.tikv.exception.GrpcException) ConcreteBackOffer(com.pingcap.tikv.util.ConcreteBackOffer) BackOffer(com.pingcap.tikv.util.BackOffer)

Example 18 with BackOffer

use of com.pingcap.tikv.util.BackOffer 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();
}
Also used : ArrayList(java.util.ArrayList) ConcreteBackOffer(com.pingcap.tikv.util.ConcreteBackOffer) BackOffer(com.pingcap.tikv.util.BackOffer) Chunk(com.pingcap.tidb.tipb.Chunk) SelectResponse(com.pingcap.tidb.tipb.SelectResponse) ArrayDeque(java.util.ArrayDeque)

Example 19 with BackOffer

use of com.pingcap.tikv.util.BackOffer in project tispark by pingcap.

the class LockResolverSITest method cleanLockTest.

@Test
public void cleanLockTest() {
    if (!init) {
        skipTestInit();
        return;
    }
    for (int i = 0; i < 26; i++) {
        String k = String.valueOf((char) ('a' + i));
        TiTimestamp startTs = session.getTimestamp();
        TiTimestamp endTs = session.getTimestamp();
        assertTrue(lockKey(k, k, k, k, false, startTs.getVersion(), endTs.getVersion()));
    }
    List<Mutation> mutations = new ArrayList<>();
    List<String> keys = new ArrayList<>();
    for (int i = 0; i < 26; i++) {
        String k = String.valueOf((char) ('a' + i));
        String v = String.valueOf((char) ('a' + i + 1));
        Mutation m = Mutation.newBuilder().setKey(ByteString.copyFromUtf8(k)).setOp(Op.Put).setValue(ByteString.copyFromUtf8(v)).build();
        mutations.add(m);
        keys.add(k);
    }
    TiTimestamp startTs = session.getTimestamp();
    TiTimestamp endTs = session.getTimestamp();
    boolean res = prewriteString(mutations, startTs.getVersion(), mutations.get(0).getKey().toStringUtf8(), DEFAULT_TTL);
    assertTrue(res);
    res = commitString(keys, startTs.getVersion(), endTs.getVersion());
    assertTrue(res);
    for (int i = 0; i < 26; i++) {
        TiRegion tiRegion = session.getRegionManager().getRegionByKey(ByteString.copyFromUtf8(String.valueOf((char) ('a' + i))));
        RegionStoreClient client = builder.build(tiRegion);
        BackOffer backOffer = ConcreteBackOffer.newGetBackOff();
        ByteString v = client.get(backOffer, ByteString.copyFromUtf8(String.valueOf((char) ('a' + i))), session.getTimestamp().getVersion());
        assertEquals(v.toStringUtf8(), String.valueOf((char) ('a' + i + 1)));
    }
}
Also used : TiTimestamp(com.pingcap.tikv.meta.TiTimestamp) ByteString(com.google.protobuf.ByteString) TiRegion(com.pingcap.tikv.region.TiRegion) ArrayList(java.util.ArrayList) ConcreteBackOffer(com.pingcap.tikv.util.ConcreteBackOffer) BackOffer(com.pingcap.tikv.util.BackOffer) ByteString(com.google.protobuf.ByteString) Mutation(org.tikv.kvproto.Kvrpcpb.Mutation) RegionStoreClient(com.pingcap.tikv.region.RegionStoreClient) Test(org.junit.Test)

Aggregations

BackOffer (com.pingcap.tikv.util.BackOffer)19 ConcreteBackOffer (com.pingcap.tikv.util.ConcreteBackOffer)19 RegionStoreClient (com.pingcap.tikv.region.RegionStoreClient)13 TiRegion (com.pingcap.tikv.region.TiRegion)10 ByteString (com.google.protobuf.ByteString)9 TiTimestamp (com.pingcap.tikv.meta.TiTimestamp)6 ArrayList (java.util.ArrayList)6 GrpcException (com.pingcap.tikv.exception.GrpcException)5 TiKVException (com.pingcap.tikv.exception.TiKVException)4 Metapb (org.tikv.kvproto.Metapb)4 KeyException (com.pingcap.tikv.exception.KeyException)3 TiBatchWriteException (com.pingcap.tikv.exception.TiBatchWriteException)3 Test (org.junit.Test)3 Chunk (com.pingcap.tidb.tipb.Chunk)2 SelectResponse (com.pingcap.tidb.tipb.SelectResponse)2 RegionException (com.pingcap.tikv.exception.RegionException)2 ArrayDeque (java.util.ArrayDeque)2 List (java.util.List)2 ExecutionException (java.util.concurrent.ExecutionException)2 ExecutorCompletionService (java.util.concurrent.ExecutorCompletionService)2