Author: alexparvulescu Date: Wed Jul 2 13:46:14 2014 New Revision: 1607366
URL: http://svn.apache.org/r1607366 Log: OAK-1915 TarMK failover 2.0 - clarified the max message length a segment message might have, fixed size issue introduced by adding a checksum verification Modified: jackrabbit/oak/trunk/oak-tarmk-failover/src/main/java/org/apache/jackrabbit/oak/plugins/segment/failover/codec/SegmentDecoder.java jackrabbit/oak/trunk/oak-tarmk-failover/src/main/java/org/apache/jackrabbit/oak/plugins/segment/failover/codec/SegmentEncoder.java Modified: jackrabbit/oak/trunk/oak-tarmk-failover/src/main/java/org/apache/jackrabbit/oak/plugins/segment/failover/codec/SegmentDecoder.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-tarmk-failover/src/main/java/org/apache/jackrabbit/oak/plugins/segment/failover/codec/SegmentDecoder.java?rev=1607366&r1=1607365&r2=1607366&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-tarmk-failover/src/main/java/org/apache/jackrabbit/oak/plugins/segment/failover/codec/SegmentDecoder.java (original) +++ jackrabbit/oak/trunk/oak-tarmk-failover/src/main/java/org/apache/jackrabbit/oak/plugins/segment/failover/codec/SegmentDecoder.java Wed Jul 2 13:46:14 2014 @@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugins.segment.failover.codec; +import static org.apache.jackrabbit.oak.plugins.segment.failover.codec.SegmentEncoder.EXTRA_HEADERS_LEN; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.LengthFieldBasedFrameDecoder; @@ -40,10 +41,16 @@ public class SegmentDecoder extends Leng private static final Logger log = LoggerFactory .getLogger(SegmentDecoder.class); + /** + * the maximum possible size a header message might have + */ + private static final int MAX_LENGHT = Segment.MAX_SEGMENT_SIZE + + EXTRA_HEADERS_LEN; + private final SegmentStore store; public SegmentDecoder(SegmentStore store) { - super(Segment.MAX_SEGMENT_SIZE + 21, 0, 4, 0, 0); + super(MAX_LENGHT, 0, 4, 0, 0); this.store = store; } Modified: jackrabbit/oak/trunk/oak-tarmk-failover/src/main/java/org/apache/jackrabbit/oak/plugins/segment/failover/codec/SegmentEncoder.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-tarmk-failover/src/main/java/org/apache/jackrabbit/oak/plugins/segment/failover/codec/SegmentEncoder.java?rev=1607366&r1=1607365&r2=1607366&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-tarmk-failover/src/main/java/org/apache/jackrabbit/oak/plugins/segment/failover/codec/SegmentEncoder.java (original) +++ jackrabbit/oak/trunk/oak-tarmk-failover/src/main/java/org/apache/jackrabbit/oak/plugins/segment/failover/codec/SegmentEncoder.java Wed Jul 2 13:46:14 2014 @@ -33,6 +33,24 @@ import com.google.common.hash.Hashing; public class SegmentEncoder extends MessageToByteEncoder<Segment> { + /** + * A segment message is composed of: + * + * <pre> + * - (4 bytes) the message length + * - (1 byte ) a message type (not currently used) + * - (8 bytes) segment id most significant bits + * - (8 bytes) segment id least significant bits + * - (8 bytes) checksum hash + * </pre> + */ + static int EXTRA_HEADERS_LEN = 29; + + /** + * the header size not including the length + */ + private int EXTRA_HEADERS_WO_SIZE = EXTRA_HEADERS_LEN - 4; + @Override protected void encode(ChannelHandlerContext ctx, Segment s, ByteBuf out) throws Exception { @@ -44,7 +62,7 @@ public class SegmentEncoder extends Mess Hasher hasher = Hashing.murmur3_32().newHasher(); long hash = hasher.putBytes(segment).hash().padToLong(); - int len = segment.length + 25; + int len = segment.length + EXTRA_HEADERS_WO_SIZE; out.writeInt(len); out.writeByte(Messages.HEADER_SEGMENT); out.writeLong(id.getMostSignificantBits());
