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());


Reply via email to