Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,17 @@
import org.tikv.common.util.ConcreteBackOffer;

public class RawScanIterator extends ScanIterator {
private ByteString cf;

public RawScanIterator(
TiConfiguration conf,
RegionStoreClientBuilder builder,
ByteString cf,
ByteString startKey,
ByteString endKey,
int limit) {
super(conf, builder, startKey, endKey, limit);
this.cf = cf;
}

TiRegion loadCurrentRegionToCache() throws Exception {
Expand All @@ -47,7 +50,7 @@ TiRegion loadCurrentRegionToCache() throws Exception {
} else {
while (true) {
try {
currentCache = client.rawScan(backOffer, startKey, limit);
currentCache = client.rawScan(backOffer, startKey, cf, limit);
break;
} catch (final TiKVException e) {
backOffer.doBackOff(BackOffFunction.BackOffFuncType.BoRegionMiss, e);
Expand Down
54 changes: 49 additions & 5 deletions src/main/java/org/tikv/common/region/RegionStoreClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,26 @@ public void rawPut(BackOffer backOffer, ByteString key, ByteString value) {
rawPutHelper(resp);
}

public void rawPut(BackOffer backOffer, ByteString key, ByteString value, ByteString cf) {
Supplier<RawPutRequest> factory =
() ->
RawPutRequest.newBuilder()
.setContext(region.getContext())
.setCfBytes(cf)
.setKey(key)
.setValue(value)
.build();

KVErrorHandler<RawPutResponse> handler =
new KVErrorHandler<>(
regionManager,
this,
region,
resp -> resp.hasRegionError() ? resp.getRegionError() : null);
RawPutResponse resp = callWithRetry(backOffer, TikvGrpc.METHOD_RAW_PUT, factory, handler);
rawPutHelper(resp);
}

private void rawPutHelper(RawPutResponse resp) {
if (resp == null) {
this.regionManager.onRequestFail(region);
Expand Down Expand Up @@ -369,6 +389,28 @@ public void rawBatchPut(BackOffer backOffer, List<KvPair> kvPairs) {
handleRawBatchPut(resp);
}

public void rawBatchPut(BackOffer backOffer, List<KvPair> kvPairs, ByteString cf) {
if (kvPairs.isEmpty()) {
return;
}
Supplier<RawBatchPutRequest> factory =
() ->
RawBatchPutRequest.newBuilder()
.setContext(region.getContext())
.setCfBytes(cf)
.addAllPairs(kvPairs)
.build();
KVErrorHandler<RawBatchPutResponse> handler =
new KVErrorHandler<>(
regionManager,
this,
region,
resp -> resp.hasRegionError() ? resp.getRegionError() : null);
RawBatchPutResponse resp =
callWithRetry(backOffer, TikvGrpc.METHOD_RAW_BATCH_PUT, factory, handler);
handleRawBatchPut(resp);
}

private void handleRawBatchPut(RawBatchPutResponse resp) {
if (resp == null) {
this.regionManager.onRequestFail(region);
Expand All @@ -388,11 +430,13 @@ private void handleRawBatchPut(RawBatchPutResponse resp) {
* @param keyOnly true if value of KvPair is not needed
* @return KvPair list
*/
private List<KvPair> rawScan(BackOffer backOffer, ByteString key, int limit, boolean keyOnly) {
private List<KvPair> rawScan(
BackOffer backOffer, ByteString key, ByteString cf, int limit, boolean keyOnly) {
Supplier<RawScanRequest> factory =
() ->
RawScanRequest.newBuilder()
.setContext(region.getContext())
.setCfBytes(cf)
.setStartKey(key)
.setKeyOnly(keyOnly)
.setLimit(limit)
Expand All @@ -408,12 +452,12 @@ private List<KvPair> rawScan(BackOffer backOffer, ByteString key, int limit, boo
return rawScanHelper(resp);
}

public List<KvPair> rawScan(BackOffer backOffer, ByteString key) {
return rawScan(backOffer, key, getConf().getScanBatchSize());
public List<KvPair> rawScan(BackOffer backOffer, ByteString key, ByteString cf) {
return rawScan(backOffer, key, cf, getConf().getScanBatchSize());
}

public List<KvPair> rawScan(BackOffer backOffer, ByteString key, int limit) {
return rawScan(backOffer, key, limit, false);
public List<KvPair> rawScan(BackOffer backOffer, ByteString key, ByteString cf, int limit) {
return rawScan(backOffer, key, cf, limit, false);
}

private List<KvPair> rawScanHelper(RawScanResponse resp) {
Expand Down
27 changes: 20 additions & 7 deletions src/main/java/org/tikv/raw/RawKVClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -135,27 +135,35 @@ public ByteString get(ByteString key) {
* @param endKey raw end key, exclusive
* @return list of key-value pairs in range
*/
public List<Kvrpcpb.KvPair> scan(ByteString startKey, ByteString endKey) {
Iterator<Kvrpcpb.KvPair> iterator = rawScanIterator(conf, clientBuilder, startKey, endKey);
public List<Kvrpcpb.KvPair> scan(ByteString cf, ByteString startKey, ByteString endKey) {
Iterator<Kvrpcpb.KvPair> iterator = rawScanIterator(conf, clientBuilder, cf, startKey, endKey);
List<Kvrpcpb.KvPair> result = new ArrayList<>();
iterator.forEachRemaining(result::add);
return result;
}

public List<Kvrpcpb.KvPair> scan(ByteString startKey, ByteString endKey) {
return scan(ByteString.EMPTY, startKey, endKey);
}

/**
* Scan raw key-value pairs from TiKV in range [startKey, endKey)
*
* @param startKey raw start key, inclusive
* @param limit limit of key-value pairs
* @return list of key-value pairs in range
*/
public List<Kvrpcpb.KvPair> scan(ByteString startKey, int limit) {
Iterator<Kvrpcpb.KvPair> iterator = rawScanIterator(conf, clientBuilder, startKey, limit);
public List<Kvrpcpb.KvPair> scan(ByteString cf, ByteString startKey, int limit) {
Iterator<Kvrpcpb.KvPair> iterator = rawScanIterator(conf, clientBuilder, cf, startKey, limit);
List<Kvrpcpb.KvPair> result = new ArrayList<>();
iterator.forEachRemaining(result::add);
return result;
}

public List<Kvrpcpb.KvPair> scan(ByteString startKey, int limit) {
return scan(ByteString.EMPTY, startKey, limit);
}

/**
* Delete a raw key-value pair from TiKV if key exists
*
Expand Down Expand Up @@ -294,14 +302,19 @@ private void sendBatchPut(BackOffer backOffer, List<Batch> batches) {
private Iterator<Kvrpcpb.KvPair> rawScanIterator(
TiConfiguration conf,
RegionStoreClientBuilder builder,
ByteString cf,
ByteString startKey,
ByteString endKey) {
return new RawScanIterator(conf, builder, startKey, endKey, Integer.MAX_VALUE);
return new RawScanIterator(conf, builder, cf, startKey, endKey, Integer.MAX_VALUE);
}

private Iterator<Kvrpcpb.KvPair> rawScanIterator(
TiConfiguration conf, RegionStoreClientBuilder builder, ByteString startKey, int limit) {
return new RawScanIterator(conf, builder, startKey, ByteString.EMPTY, limit);
TiConfiguration conf,
RegionStoreClientBuilder builder,
ByteString cf,
ByteString startKey,
int limit) {
return new RawScanIterator(conf, builder, cf, startKey, ByteString.EMPTY, limit);
}

private BackOffer defaultBackOff() {
Expand Down