Search in sources :

Example 6 with TiRegion

use of com.pingcap.tikv.region.TiRegion 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();
}
Also used : EncodeType(com.pingcap.tidb.tipb.EncodeType) ArrayList(java.util.ArrayList) ConcreteBackOffer(com.pingcap.tikv.util.ConcreteBackOffer) BackOffer(com.pingcap.tikv.util.BackOffer) Chunk(com.pingcap.tidb.tipb.Chunk) RegionTaskException(com.pingcap.tikv.exception.RegionTaskException) ArrayDeque(java.util.ArrayDeque) TiRegion(com.pingcap.tikv.region.TiRegion) RangeSplitter(com.pingcap.tikv.util.RangeSplitter) SelectResponse(com.pingcap.tidb.tipb.SelectResponse) Metapb(org.tikv.kvproto.Metapb) RegionStoreClient(com.pingcap.tikv.region.RegionStoreClient) HashSet(java.util.HashSet)

Example 7 with TiRegion

use of com.pingcap.tikv.region.TiRegion in project tispark by pingcap.

the class LockResolverSITest method SITestNonBlocking.

@Test
public void SITestNonBlocking() {
    if (!init) {
        skipTestInit();
        return;
    }
    if (!isLockResolverClientV4()) {
        skipTestTiDBV4();
        return;
    }
    TiTimestamp startTs = session.getTimestamp();
    TiTimestamp endTs = session.getTimestamp();
    // Put <a, a> into kv
    putKV("a", "a", startTs.getVersion(), endTs.getVersion());
    startTs = session.getTimestamp();
    endTs = session.getTimestamp();
    // Prewrite <a, aa> as primary without committing it
    assertTrue(lockKey("a", "aa", "a", "aa", false, startTs.getVersion(), endTs.getVersion(), LARGE_LOCK_TTL));
    TiRegion tiRegion = session.getRegionManager().getRegionByKey(ByteString.copyFromUtf8("a"));
    RegionStoreClient client = builder.build(tiRegion);
    {
        BackOffer backOffer = ConcreteBackOffer.newGetBackOff();
        Long callerTS = session.getTimestamp().getVersion();
        System.out.println("callerTS1= " + callerTS);
        ByteString v = client.get(backOffer, ByteString.copyFromUtf8("a"), callerTS);
        assertEquals(v.toStringUtf8(), String.valueOf('a'));
    }
    try {
        // Trying to continue the commitString phase of <a, aa> will fail because CommitTS <
        // MinCommitTS
        commitString(Collections.singletonList("a"), startTs.getVersion(), endTs.getVersion());
        fail();
    } catch (KeyException e) {
        assertTrue(e.getMessage().startsWith("Key exception occurred and the reason is commit_ts_expired"));
    }
    // Trying to continue the commitString phase of <a, aa> will success because CommitTS >
    // MinCommitTS
    endTs = session.getTimestamp();
    assertTrue(commitString(Collections.singletonList("a"), startTs.getVersion(), endTs.getVersion()));
}
Also used : TiTimestamp(com.pingcap.tikv.meta.TiTimestamp) ByteString(com.google.protobuf.ByteString) TiRegion(com.pingcap.tikv.region.TiRegion) ConcreteBackOffer(com.pingcap.tikv.util.ConcreteBackOffer) BackOffer(com.pingcap.tikv.util.BackOffer) RegionStoreClient(com.pingcap.tikv.region.RegionStoreClient) KeyException(com.pingcap.tikv.exception.KeyException) Test(org.junit.Test)

Example 8 with TiRegion

use of com.pingcap.tikv.region.TiRegion in project tispark by pingcap.

the class LockResolverSITest method SITestBlocking.

@Test
public void SITestBlocking() {
    if (!init) {
        skipTestInit();
        return;
    }
    if (isLockResolverClientV4()) {
        logger.warn("Test skipped due to version of TiDB/TiKV should be 2.x or 3.x.");
        return;
    }
    TiTimestamp startTs = session.getTimestamp();
    TiTimestamp endTs = session.getTimestamp();
    // Put <a, a> into kv
    putKV("a", "a", startTs.getVersion(), endTs.getVersion());
    startTs = session.getTimestamp();
    endTs = session.getTimestamp();
    // Prewrite <a, aa> as primary without committing it
    assertTrue(lockKey("a", "aa", "a", "aa", false, startTs.getVersion(), endTs.getVersion()));
    TiRegion tiRegion = session.getRegionManager().getRegionByKey(ByteString.copyFromUtf8("a"));
    RegionStoreClient client = builder.build(tiRegion);
    {
        BackOffer backOffer = ConcreteBackOffer.newGetBackOff();
        // With TTL set to 10, after 10 milliseconds <a, aa> is resolved.
        // We should be able to read <a, a> instead.
        ByteString v = client.get(backOffer, ByteString.copyFromUtf8("a"), session.getTimestamp().getVersion());
        assertEquals(v.toStringUtf8(), String.valueOf('a'));
    }
    try {
        // Trying to continue the commitString phase of <a, aa> will fail because TxnLockNotFound
        commitString(Collections.singletonList("a"), startTs.getVersion(), endTs.getVersion());
        fail();
    } catch (KeyException e) {
        assertFalse(e.getKeyError().getRetryable().isEmpty());
    }
}
Also used : TiTimestamp(com.pingcap.tikv.meta.TiTimestamp) ByteString(com.google.protobuf.ByteString) TiRegion(com.pingcap.tikv.region.TiRegion) ConcreteBackOffer(com.pingcap.tikv.util.ConcreteBackOffer) BackOffer(com.pingcap.tikv.util.BackOffer) RegionStoreClient(com.pingcap.tikv.region.RegionStoreClient) KeyException(com.pingcap.tikv.exception.KeyException) Test(org.junit.Test)

Example 9 with TiRegion

use of com.pingcap.tikv.region.TiRegion in project tispark by pingcap.

the class LockResolverTest method commit.

boolean commit(List<ByteString> keys, long startTS, long commitTS) {
    if (keys.size() == 0)
        return true;
    BackOffer backOffer = ConcreteBackOffer.newCustomBackOff(1000);
    for (ByteString byteStringK : keys) {
        while (true) {
            try {
                TiRegion tiRegion = session.getRegionManager().getRegionByKey(byteStringK);
                RegionStoreClient client = builder.build(tiRegion);
                client.commit(backOffer, Collections.singletonList(byteStringK), startTS, commitTS);
                break;
            } catch (RegionException e) {
                backOffer.doBackOff(BackOffFunction.BackOffFuncType.BoRegionMiss, e);
            }
        }
    }
    return true;
}
Also used : ByteString(com.google.protobuf.ByteString) TiRegion(com.pingcap.tikv.region.TiRegion) ConcreteBackOffer(com.pingcap.tikv.util.ConcreteBackOffer) BackOffer(com.pingcap.tikv.util.BackOffer) RegionException(com.pingcap.tikv.exception.RegionException) RegionStoreClient(com.pingcap.tikv.region.RegionStoreClient)

Example 10 with TiRegion

use of com.pingcap.tikv.region.TiRegion in project tispark by pingcap.

the class LockResolverTest method prewrite.

boolean prewrite(List<Mutation> mutations, long startTS, ByteString primary, long ttl, boolean useAsyncCommit, Iterable<ByteString> secondaries) {
    if (mutations.size() == 0)
        return true;
    BackOffer backOffer = ConcreteBackOffer.newCustomBackOff(1000);
    for (Mutation m : mutations) {
        while (true) {
            try {
                TiRegion region = session.getRegionManager().getRegionByKey(m.getKey());
                RegionStoreClient client = builder.build(region);
                client.prewrite(backOffer, primary, Collections.singletonList(m), startTS, ttl, false, useAsyncCommit, secondaries);
                break;
            } catch (RegionException e) {
                backOffer.doBackOff(BackOffFunction.BackOffFuncType.BoRegionMiss, e);
            }
        }
    }
    return true;
}
Also used : TiRegion(com.pingcap.tikv.region.TiRegion) ConcreteBackOffer(com.pingcap.tikv.util.ConcreteBackOffer) BackOffer(com.pingcap.tikv.util.BackOffer) Mutation(org.tikv.kvproto.Kvrpcpb.Mutation) RegionException(com.pingcap.tikv.exception.RegionException) RegionStoreClient(com.pingcap.tikv.region.RegionStoreClient)

Aggregations

TiRegion (com.pingcap.tikv.region.TiRegion)43 ByteString (com.google.protobuf.ByteString)19 RegionStoreClient (com.pingcap.tikv.region.RegionStoreClient)17 ArrayList (java.util.ArrayList)16 BackOffer (com.pingcap.tikv.util.BackOffer)10 ConcreteBackOffer (com.pingcap.tikv.util.ConcreteBackOffer)10 List (java.util.List)10 Test (org.junit.Test)9 TiKVException (com.pingcap.tikv.exception.TiKVException)8 HashMap (java.util.HashMap)8 Map (java.util.Map)8 Kvrpcpb (org.tikv.kvproto.Kvrpcpb)8 Metapb (org.tikv.kvproto.Metapb)8 GrpcException (com.pingcap.tikv.exception.GrpcException)7 KeyException (com.pingcap.tikv.exception.KeyException)7 TiClientInternalException (com.pingcap.tikv.exception.TiClientInternalException)6 RegionException (com.pingcap.tikv.exception.RegionException)4 TiBatchWriteException (com.pingcap.tikv.exception.TiBatchWriteException)4 Key (com.pingcap.tikv.key.Key)4 TiTimestamp (com.pingcap.tikv.meta.TiTimestamp)4