diff --git a/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java b/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java index 2af25a1ab98..11db11c6414 100644 --- a/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java +++ b/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java @@ -23,15 +23,15 @@ import org.tikv.kvproto.Metapb.Region; public class RequestKeyV2Codec implements RequestKeyCodec { - protected static final ByteString RAW_KEY_PREFIX = ByteString.copyFromUtf8("r"); - protected static final ByteString RAW_END_KEY = - ByteString.copyFrom(new byte[] {(byte) (RAW_KEY_PREFIX.toByteArray()[0] + 1)}); - - protected static final ByteString TXN_KEY_PREFIX = ByteString.copyFromUtf8("x"); - protected static final ByteString TXN_END_KEY = - ByteString.copyFrom(new byte[] {(byte) (TXN_KEY_PREFIX.toByteArray()[0] + 1)}); + protected static final ByteString RAW_DEFAULT_PREFIX = + ByteString.copyFrom(new byte[] {'r', 0, 0, 0}); + protected static final ByteString RAW_DEFAULT_END = + ByteString.copyFrom(new byte[] {'r', 0, 0, 1}); + protected static final ByteString TXN_DEFAULT_PREFIX = + ByteString.copyFrom(new byte[] {'x', 0, 0, 0}); + protected static final ByteString TXN_DEFAULT_END = + ByteString.copyFrom(new byte[] {'x', 0, 0, 1}); protected ByteString keyPrefix; - protected ByteString infiniteEndKey; @Override @@ -49,7 +49,7 @@ public ByteString decodeKey(ByteString key) { throw new IllegalArgumentException("key corrupted, wrong prefix"); } - return key.substring(1); + return key.substring(keyPrefix.size()); } @Override diff --git a/src/main/java/org/tikv/common/apiversion/RequestKeyV2RawCodec.java b/src/main/java/org/tikv/common/apiversion/RequestKeyV2RawCodec.java index 255815d8403..432f6d2e8a0 100644 --- a/src/main/java/org/tikv/common/apiversion/RequestKeyV2RawCodec.java +++ b/src/main/java/org/tikv/common/apiversion/RequestKeyV2RawCodec.java @@ -21,7 +21,7 @@ public class RequestKeyV2RawCodec extends RequestKeyV2Codec { public RequestKeyV2RawCodec() { super(); - this.keyPrefix = RAW_KEY_PREFIX; - this.infiniteEndKey = RAW_END_KEY; + this.keyPrefix = RAW_DEFAULT_PREFIX; + this.infiniteEndKey = RAW_DEFAULT_END; } } diff --git a/src/main/java/org/tikv/common/apiversion/RequestKeyV2TxnCodec.java b/src/main/java/org/tikv/common/apiversion/RequestKeyV2TxnCodec.java index 9fe0effccd5..3690a46cf76 100644 --- a/src/main/java/org/tikv/common/apiversion/RequestKeyV2TxnCodec.java +++ b/src/main/java/org/tikv/common/apiversion/RequestKeyV2TxnCodec.java @@ -21,7 +21,7 @@ public class RequestKeyV2TxnCodec extends RequestKeyV2Codec { public RequestKeyV2TxnCodec() { super(); - this.keyPrefix = TXN_KEY_PREFIX; - this.infiniteEndKey = TXN_END_KEY; + this.keyPrefix = TXN_DEFAULT_PREFIX; + this.infiniteEndKey = TXN_DEFAULT_END; } } diff --git a/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java b/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java index 24cbf3012a2..871a20cdf20 100644 --- a/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java +++ b/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java @@ -164,9 +164,10 @@ void testV2Codec(RequestKeyV2Codec v2) { end = ByteString.EMPTY; range = v2.encodeRange(start, end); assertEquals(v2.encodeKey(start), range.first); - assertArrayEquals( - new byte[] {(byte) (v2.encodeKey(ByteString.EMPTY).byteAt(0) + 1)}, - range.second.toByteArray()); + + byte[] max = v2.encodeKey(ByteString.EMPTY).toByteArray(); + max[max.length - 1] += 1; + assertArrayEquals(max, range.second.toByteArray()); region = Region.newBuilder()