Fixed the bad CPB offset (due to a wrong LongArray deserialization)
authorEmmanuel Lécharny <elecharny@apache.org>
Mon, 14 Jul 2014 08:23:16 +0000 (08:23 +0000)
committerEmmanuel Lécharny <elecharny@apache.org>
Mon, 14 Jul 2014 08:23:16 +0000 (08:23 +0000)
mavibot/src/main/java/org/apache/directory/mavibot/btree/serializer/LongArraySerializer.java
mavibot/src/main/java/org/apache/directory/mavibot/btree/serializer/LongSerializer.java
mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerTest.java

index 4e32b36..0e696cf 100644 (file)
@@ -307,8 +307,8 @@ public class LongArraySerializer extends AbstractElementSerializer<long[]>
     @Override
     public long[] fromBytes( byte[] buffer, int pos ) throws IOException
     {
-        int newPos = pos;
-        int len = IntSerializer.deserialize( buffer, newPos );
+        int len = IntSerializer.deserialize( buffer, pos );
+        int newPos = pos + 4;
 
         switch ( len )
         {
index 1fedd7a..0eaac44 100644 (file)
@@ -118,13 +118,13 @@ public class LongSerializer extends AbstractElementSerializer<Long>
         }
 
         long result = ( ( long ) in[start] << 56 ) +
-            ( ( in[start + 1] & 0xFFL ) << 48 ) +
-            ( ( in[start + 2] & 0xFFL ) << 40 ) +
-            ( ( in[start + 3] & 0xFFL ) << 32 ) +
-            ( ( in[start + 4] & 0xFFL ) << 24 ) +
-            ( ( in[start + 5] & 0xFFL ) << 16 ) +
-            ( ( in[start + 6] & 0xFFL ) << 8 ) +
-            ( in[start + 7] & 0xFFL );
+            ( ( in[start + 1] & 0x00FFL ) << 48 ) +
+            ( ( in[start + 2] & 0x00FFL ) << 40 ) +
+            ( ( in[start + 3] & 0x00FFL ) << 32 ) +
+            ( ( in[start + 4] & 0x00FFL ) << 24 ) +
+            ( ( in[start + 5] & 0x00FFL ) << 16 ) +
+            ( ( in[start + 6] & 0x00FFL ) << 8 ) +
+            ( in[start + 7] & 0x00FFL );
 
         return result;
     }
index 784d241..091b1c2 100644 (file)
@@ -894,8 +894,8 @@ public class RecordManagerTest
         btree.insert( 2L, "V2" );
     }
     
+    
     @Test
-    @Ignore("Fails with bad offset error")
     public void testOffsetsInCopiedPageBTree() throws Exception
     {
         btree.insert( 1L, "V1" );
@@ -907,6 +907,7 @@ public class RecordManagerTest
         checkCpbOffsets();
     }
 
+    
     private void checkCpbOffsets() throws Exception
     {
         TupleCursor<RevisionName, long[]> cursor = recordManager.copiedPageBtree.browse();
@@ -915,6 +916,7 @@ public class RecordManagerTest
         {
             Tuple<RevisionName, long[]> t = cursor.next();
             long[] offsets = t.getValue();
+            
             for( long o : offsets )
             {
                 recordManager.checkOffset( o );