Author: alexparvulescu Date: Mon May 11 14:19:09 2015 New Revision: 1678758
URL: http://svn.apache.org/r1678758 Log: OAK-2861 TARMK Cold Standby better binary decoding Modified: jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/codec/ReplyDecoder.java Modified: jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/codec/ReplyDecoder.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/codec/ReplyDecoder.java?rev=1678758&r1=1678757&r2=1678758&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/codec/ReplyDecoder.java (original) +++ jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/codec/ReplyDecoder.java Mon May 11 14:19:09 2015 @@ -113,8 +113,18 @@ public class ReplyDecoder extends Replay long msb = in.readLong(); long lsb = in.readLong(); long hash = in.readLong(); - byte[] segment = new byte[len - 25]; - in.readBytes(segment); + + // #readBytes throws a 'REPLAY' exception if there are not enough bytes + // available for reading + ByteBuf data = in.readBytes(len - 25); + byte[] segment; + if (data.hasArray()) { + segment = data.array(); + } else { + segment = new byte[len - 25]; + in.readBytes(segment); + } + Hasher hasher = Hashing.murmur3_32().newHasher(); long check = hasher.putBytes(segment).hash().padToLong(); if (hash == check) { @@ -135,8 +145,17 @@ public class ReplyDecoder extends Replay String id = new String(bid, Charset.forName("UTF-8")); long hash = in.readLong(); - byte[] blob = new byte[length]; - in.readBytes(blob); + // #readBytes throws a 'REPLAY' exception if there are not enough bytes + // available for reading + ByteBuf data = in.readBytes(length); + byte[] blob; + if (data.hasArray()) { + blob = data.array(); + } else { + blob = new byte[length]; + data.readBytes(blob); + } + Hasher hasher = Hashing.murmur3_32().newHasher(); long check = hasher.putBytes(blob).hash().padToLong(); if (hash == check) {
