From d9b0d56c33e52fa67c78beffff4b0578063c2d5f Mon Sep 17 00:00:00 2001 From: iosmanthus Date: Sun, 5 Jun 2022 21:58:00 +0800 Subject: [PATCH 1/5] draft: change the default prefix for API v2 Signed-off-by: iosmanthus --- .../tikv/common/apiversion/RequestKeyV2Codec.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java b/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java index 2af25a1ab98..d0de1e0609a 100644 --- a/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java +++ b/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java @@ -23,13 +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_KEY_PREFIX = ByteString.copyFromUtf8("r") + .concat(ByteString.copyFrom(new byte[]{0})); protected static final ByteString RAW_END_KEY = - ByteString.copyFrom(new byte[] {(byte) (RAW_KEY_PREFIX.toByteArray()[0] + 1)}); + 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_KEY_PREFIX = ByteString.copyFromUtf8("x") + .concat(ByteString.copyFrom(new byte[]{0})); protected static final ByteString TXN_END_KEY = - ByteString.copyFrom(new byte[] {(byte) (TXN_KEY_PREFIX.toByteArray()[0] + 1)}); + ByteString.copyFrom(new byte[]{(byte) (TXN_KEY_PREFIX.toByteArray()[0] + 1)}); protected ByteString keyPrefix; protected ByteString infiniteEndKey; @@ -49,7 +51,7 @@ public ByteString decodeKey(ByteString key) { throw new IllegalArgumentException("key corrupted, wrong prefix"); } - return key.substring(1); + return key.substring(keyPrefix.size()); } @Override From 3bb2fa1286e757fb0b304a58b19216f0a46f5560 Mon Sep 17 00:00:00 2001 From: iosmanthus Date: Sun, 5 Jun 2022 22:08:03 +0800 Subject: [PATCH 2/5] ./dev/javafmt Signed-off-by: iosmanthus --- .../tikv/common/apiversion/RequestKeyV2Codec.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java b/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java index d0de1e0609a..9a89f4c0485 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") - .concat(ByteString.copyFrom(new byte[]{0})); + protected static final ByteString RAW_KEY_PREFIX = + ByteString.copyFromUtf8("r").concat(ByteString.copyFrom(new byte[] {0})); protected static final ByteString RAW_END_KEY = - ByteString.copyFrom(new byte[]{(byte) (RAW_KEY_PREFIX.toByteArray()[0] + 1)}); + ByteString.copyFrom(new byte[] {(byte) (RAW_KEY_PREFIX.toByteArray()[0] + 1)}); - protected static final ByteString TXN_KEY_PREFIX = ByteString.copyFromUtf8("x") - .concat(ByteString.copyFrom(new byte[]{0})); + protected static final ByteString TXN_KEY_PREFIX = + ByteString.copyFromUtf8("x").concat(ByteString.copyFrom(new byte[] {0})); protected static final ByteString TXN_END_KEY = - ByteString.copyFrom(new byte[]{(byte) (TXN_KEY_PREFIX.toByteArray()[0] + 1)}); + ByteString.copyFrom(new byte[] {(byte) (TXN_KEY_PREFIX.toByteArray()[0] + 1)}); protected ByteString keyPrefix; protected ByteString infiniteEndKey; From fa85250a3901152bb2f998e1fb094e706ebc06f3 Mon Sep 17 00:00:00 2001 From: iosmanthus Date: Sun, 5 Jun 2022 22:30:46 +0800 Subject: [PATCH 3/5] fix wrong end key for default keyspace Signed-off-by: iosmanthus --- .../tikv/common/apiversion/RequestKeyV2Codec.java | 14 ++++---------- .../common/apiversion/RequestKeyCodecTest.java | 5 ++--- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java b/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java index 9a89f4c0485..7fffe5184f9 100644 --- a/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java +++ b/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java @@ -23,17 +23,11 @@ import org.tikv.kvproto.Metapb.Region; public class RequestKeyV2Codec implements RequestKeyCodec { - protected static final ByteString RAW_KEY_PREFIX = - ByteString.copyFromUtf8("r").concat(ByteString.copyFrom(new byte[] {0})); - 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").concat(ByteString.copyFrom(new byte[] {0})); - protected static final ByteString TXN_END_KEY = - ByteString.copyFrom(new byte[] {(byte) (TXN_KEY_PREFIX.toByteArray()[0] + 1)}); + protected static final ByteString RAW_KEY_PREFIX = ByteString.copyFrom(new byte[] {'r', 0}); + protected static final ByteString RAW_END_KEY = ByteString.copyFrom(new byte[] {'r', 1}); + protected static final ByteString TXN_KEY_PREFIX = ByteString.copyFrom(new byte[] {'x', 0}); + protected static final ByteString TXN_END_KEY = ByteString.copyFrom(new byte[] {'x', 1}); protected ByteString keyPrefix; - protected ByteString infiniteEndKey; @Override diff --git a/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java b/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java index 24cbf3012a2..71b19e7fa68 100644 --- a/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java +++ b/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java @@ -164,9 +164,8 @@ 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[] min = v2.encodeKey(ByteString.EMPTY).toByteArray(); + assertArrayEquals(new byte[] {min[0], (byte) (min[1] + 1)}, range.second.toByteArray()); region = Region.newBuilder() From ec63ba5342a2c6d9af572e9a03be166c7022038c Mon Sep 17 00:00:00 2001 From: iosmanthus Date: Mon, 6 Jun 2022 16:00:20 +0800 Subject: [PATCH 4/5] reserve 3 bytes for keyspace id Signed-off-by: iosmanthus --- .../tikv/common/apiversion/RequestKeyV2Codec.java | 12 ++++++++---- .../tikv/common/apiversion/RequestKeyV2RawCodec.java | 4 ++-- .../tikv/common/apiversion/RequestKeyV2TxnCodec.java | 4 ++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java b/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java index 7fffe5184f9..11db11c6414 100644 --- a/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java +++ b/src/main/java/org/tikv/common/apiversion/RequestKeyV2Codec.java @@ -23,10 +23,14 @@ import org.tikv.kvproto.Metapb.Region; public class RequestKeyV2Codec implements RequestKeyCodec { - protected static final ByteString RAW_KEY_PREFIX = ByteString.copyFrom(new byte[] {'r', 0}); - protected static final ByteString RAW_END_KEY = ByteString.copyFrom(new byte[] {'r', 1}); - protected static final ByteString TXN_KEY_PREFIX = ByteString.copyFrom(new byte[] {'x', 0}); - protected static final ByteString TXN_END_KEY = ByteString.copyFrom(new byte[] {'x', 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; 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; } } From 53d867870219d6a0299e4814c385c6cc4de8a379 Mon Sep 17 00:00:00 2001 From: iosmanthus Date: Mon, 6 Jun 2022 16:04:15 +0800 Subject: [PATCH 5/5] fix unit tests for v2 codec Signed-off-by: iosmanthus --- .../org/tikv/common/apiversion/RequestKeyCodecTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java b/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java index 71b19e7fa68..871a20cdf20 100644 --- a/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java +++ b/src/test/java/org/tikv/common/apiversion/RequestKeyCodecTest.java @@ -164,8 +164,10 @@ void testV2Codec(RequestKeyV2Codec v2) { end = ByteString.EMPTY; range = v2.encodeRange(start, end); assertEquals(v2.encodeKey(start), range.first); - byte[] min = v2.encodeKey(ByteString.EMPTY).toByteArray(); - assertArrayEquals(new byte[] {min[0], (byte) (min[1] + 1)}, range.second.toByteArray()); + + byte[] max = v2.encodeKey(ByteString.EMPTY).toByteArray(); + max[max.length - 1] += 1; + assertArrayEquals(max, range.second.toByteArray()); region = Region.newBuilder()