.../src/main/patches/HBASE-17239.patch | 44 ++++++++++++++++++++++ .../org/apache/hadoop/hbase/ipc/RpcServer.java | 7 ++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/hbase-protocol-shaded/src/main/patches/HBASE-17239.patch b/hbase-protocol-shaded/src/main/patches/HBASE-17239.patch new file mode 100644 index 0000000..0d422cd --- /dev/null +++ b/hbase-protocol-shaded/src/main/patches/HBASE-17239.patch @@ -0,0 +1,44 @@ + .../hbase/shaded/com/google/protobuf/CodedInputStream.java | 4 ++-- + .../shaded/com/google/protobuf/UnsafeByteOperations.java | 11 +++++++++++ + 2 files changed, 13 insertions(+), 2 deletions(-) + +diff --git a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/CodedInputStream.java b/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/CodedInputStream.java +index 0ad20e5..e854265 100644 +--- a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/CodedInputStream.java ++++ b/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/CodedInputStream.java +@@ -150,11 +150,11 @@ public abstract class CodedInputStream { + } + + /** Create a new CodedInputStream wrapping the given {@link ByteInput}. */ +- public static CodedInputStream newInstance(ByteInput buf, boolean bufferIsImmutable) { ++ static CodedInputStream newInstance(ByteInput buf, boolean bufferIsImmutable) { + return new ByteInputDecoder(buf, bufferIsImmutable); + } + +- public static CodedInputStream newInstance(ByteInput buf, int off, int len, boolean bufferIsImmutable) { ++ static CodedInputStream newInstance(ByteInput buf, int off, int len, boolean bufferIsImmutable) { + return new ByteInputDecoder(buf, off, len, bufferIsImmutable); + } + +diff --git a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/UnsafeByteOperations.java b/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/UnsafeByteOperations.java +index 3d53f2e..ad99372 100644 +--- a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/UnsafeByteOperations.java ++++ b/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/UnsafeByteOperations.java +@@ -98,6 +98,17 @@ public final class UnsafeByteOperations { + } + + /** ++ * An unsafe operation that returns a {@link ByteString} that is backed by the provided buffer. ++ * @param buffer the ByteInput buffer to be wrapped ++ * @param offset the offset of the wrapped byteinput ++ * @param length the number of bytes of the byteinput ++ * @return a {@link ByteString} backed by the provided buffer ++ */ ++ public static ByteString unsafeWrap(ByteInput buffer, int offset, int len) { ++ return ByteString.wrap(buffer, offset, len); ++ } ++ ++ /** + * Writes the given {@link ByteString} to the provided {@link ByteOutput}. Calling this method may + * result in multiple operations on the target {@link ByteOutput} + * (i.e. for roped {@link ByteString}s). diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java index 0c8f34f..ee44c68 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java @@ -1908,8 +1908,8 @@ public class RpcServer implements RpcServerInterface, ConfigurationObserver { if (buf.hasArray()) { this.connectionHeader = ConnectionHeader.parseFrom(buf.array()); } else { - CodedInputStream cis = CodedInputStream - .newInstance(new ByteBuffByteInput(buf, 0, buf.limit()), true); + CodedInputStream cis = UnsafeByteOperations + .unsafeWrap(new ByteBuffByteInput(buf, 0, buf.limit()), 0, buf.limit()).newCodedInput(); cis.enableAliasing(true); this.connectionHeader = ConnectionHeader.parseFrom(cis); } @@ -2151,7 +2151,8 @@ public class RpcServer implements RpcServerInterface, ConfigurationObserver { if (buf.hasArray()) { cis = UnsafeByteOperations.unsafeWrap(buf.array(), 0, buf.limit()).newCodedInput(); } else { - cis = CodedInputStream.newInstance(new ByteBuffByteInput(buf, 0, buf.limit()), true); + cis = UnsafeByteOperations + .unsafeWrap(new ByteBuffByteInput(buf, 0, buf.limit()), 0, buf.limit()).newCodedInput(); } cis.enableAliasing(true); int headerSize = cis.readRawVarint32();