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);
}
}
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;
}
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();
}
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)));
}
}
Aggregations