Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentParser.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentParser.java?rev=1762750&r1=1762749&r2=1762750&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentParser.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentParser.java
 Thu Sep 29 09:14:42 2016
@@ -422,17 +422,15 @@ public class SegmentParser {
         int propertyCount = 0;
 
         Segment segment = nodeId.getSegment();
-        int offset = nodeId.getOffset();
         String stableId = reader.readNode(nodeId).getStableId();
-        offset += RECORD_ID_BYTES;
-        RecordId templateId = segment.readRecordId(offset);
+        RecordId templateId = segment.readRecordId(nodeId.getRecordNumber(), 
0, 1);
         onTemplate(nodeId, templateId);
 
         Template template = reader.readTemplate(templateId);
 
         // Recurses into child nodes in this segment
         if (template.getChildName() == MANY_CHILD_NODES) {
-            RecordId childMapId = segment.readRecordId(offset + 
RECORD_ID_BYTES);
+            RecordId childMapId = 
segment.readRecordId(nodeId.getRecordNumber(), 0, 2);
             MapRecord childMap = reader.readMap(childMapId);
             onMap(nodeId, childMapId, childMap);
             for (ChildNodeEntry childNodeEntry : childMap.getEntries()) {
@@ -444,7 +442,7 @@ public class SegmentParser {
                 }
             }
         } else if (template.getChildName() != ZERO_CHILD_NODES) {
-            RecordId childId = segment.readRecordId(offset + RECORD_ID_BYTES);
+            RecordId childId = segment.readRecordId(nodeId.getRecordNumber(), 
0, 2);
             onNode(nodeId, childId);
             nodeCount++;
         }
@@ -456,9 +454,8 @@ public class SegmentParser {
         PropertyTemplate[] propertyTemplates = template.getPropertyTemplates();
         if (propertyTemplates.length > 0) {
             size += RECORD_ID_BYTES;
-            RecordId id = segment.readRecordId(offset + ids * RECORD_ID_BYTES);
-            ListRecord pIds = new ListRecord(id,
-                    propertyTemplates.length);
+            RecordId id = segment.readRecordId(nodeId.getRecordNumber(), 0, 
ids + 1);
+            ListRecord pIds = new ListRecord(id, propertyTemplates.length);
             for (int i = 0; i < propertyTemplates.length; i++) {
                 RecordId propertyId = pIds.getEntry(i);
                 onProperty(nodeId, propertyId, propertyTemplates[i]);
@@ -478,8 +475,7 @@ public class SegmentParser {
         int size = 0;
 
         Segment segment = templateId.getSegment();
-        int offset = templateId.getOffset();
-        int head = segment.readInt(offset + size);
+        int head = segment.readInt(templateId.getRecordNumber(), size);
         boolean hasPrimaryType = (head & (1 << 31)) != 0;
         boolean hasMixinTypes = (head & (1 << 30)) != 0;
         boolean zeroChildNodes = (head & (1 << 29)) != 0;
@@ -489,27 +485,27 @@ public class SegmentParser {
         size += 4;
 
         if (hasPrimaryType) {
-            RecordId primaryId = segment.readRecordId(offset + size);
+            RecordId primaryId = 
segment.readRecordId(templateId.getRecordNumber(), size);
             onString(templateId, primaryId);
             size += RECORD_ID_BYTES;
         }
 
         if (hasMixinTypes) {
             for (int i = 0; i < mixinCount; i++) {
-                RecordId mixinId = segment.readRecordId(offset + size);
+                RecordId mixinId = 
segment.readRecordId(templateId.getRecordNumber(), size);
                 onString(templateId, mixinId);
                 size += RECORD_ID_BYTES;
             }
         }
 
         if (!zeroChildNodes && !manyChildNodes) {
-            RecordId childNameId = segment.readRecordId(offset + size);
+            RecordId childNameId = 
segment.readRecordId(templateId.getRecordNumber(), size);
             onString(templateId, childNameId);
             size += RECORD_ID_BYTES;
         }
 
         if (propertyCount > 0) {
-            RecordId listId = segment.readRecordId(offset + size);
+            RecordId listId = 
segment.readRecordId(templateId.getRecordNumber(), size);
             size += RECORD_ID_BYTES;
             ListRecord propertyNames = new ListRecord(listId, propertyCount);
             for (int i = 0; i < propertyCount; i++) {
@@ -556,8 +552,7 @@ public class SegmentParser {
         size += RECORD_ID_BYTES;                  // value
         size += RECORD_ID_BYTES;                  // base
 
-        RecordId baseId = mapId.getSegment()
-                .readRecordId(mapId.getOffset() + 8 + 2 * RECORD_ID_BYTES);
+        RecordId baseId = 
mapId.getSegment().readRecordId(mapId.getRecordNumber(), 8, 2);
         onMap(mapId, baseId, reader.readMap(baseId));
 
         return new MapInfo(mapId, size);
@@ -612,15 +607,14 @@ public class SegmentParser {
         int count = -1; // -1 -> single valued property
 
         Segment segment = propertyId.getSegment();
-        int offset = propertyId.getOffset();
         Type<?> type = template.getType();
 
         if (type.isArray()) {
-            count = segment.readInt(offset);
+            count = segment.readInt(propertyId.getRecordNumber());
             size += 4;
 
             if (count > 0) {
-                RecordId listId = segment.readRecordId(offset + 4);
+                RecordId listId = 
segment.readRecordId(propertyId.getRecordNumber(), 4);
                 size += RECORD_ID_BYTES;
                 for (RecordId valueId : new ListRecord(listId, 
count).getEntries()) {
                     onValue(propertyId, valueId, type.getBaseType());
@@ -661,28 +655,27 @@ public class SegmentParser {
         BlobType blobType;
 
         Segment segment = blobId.getSegment();
-        int offset = blobId.getOffset();
-        byte head = segment.readByte(offset);
+        byte head = segment.readByte(blobId.getRecordNumber());
         if ((head & 0x80) == 0x00) {
             // 0xxx xxxx: small value
             size += (1 + head);
             blobType = BlobType.SMALL;
         } else if ((head & 0xc0) == 0x80) {
             // 10xx xxxx: medium value
-            int length = (segment.readShort(offset) & 0x3fff) + SMALL_LIMIT;
+            int length = (segment.readShort(blobId.getRecordNumber()) & 
0x3fff) + SMALL_LIMIT;
             size += (2 + length);
             blobType = BlobType.MEDIUM;
         } else if ((head & 0xe0) == 0xc0) {
             // 110x xxxx: long value
-            long length = (segment.readLong(offset) & 0x1fffffffffffffffL) + 
MEDIUM_LIMIT;
+            long length = (segment.readLong(blobId.getRecordNumber()) & 
0x1fffffffffffffffL) + MEDIUM_LIMIT;
             int count = (int) ((length + BLOCK_SIZE - 1) / BLOCK_SIZE);
-            RecordId listId = segment.readRecordId(offset + 8);
+            RecordId listId = segment.readRecordId(blobId.getRecordNumber(), 
8);
             onList(blobId, listId, count);
             size += (8 + RECORD_ID_BYTES + length);
             blobType = BlobType.LONG;
         } else if ((head & 0xf0) == 0xe0) {
             // 1110 xxxx: external value
-            int length = (head & 0x0f) << 8 | (segment.readByte(offset + 1) & 
0xff);
+            int length = (head & 0x0f) << 8 | 
(segment.readByte(blobId.getRecordNumber(), 1) & 0xff);
             size += (2 + length);
             blobType = BlobType.EXTERNAL;
         } else {
@@ -703,9 +696,8 @@ public class SegmentParser {
         BlobType blobType;
 
         Segment segment = stringId.getSegment();
-        int offset = stringId.getOffset();
 
-        long length = segment.readLength(offset);
+        long length = segment.readLength(stringId.getRecordNumber());
         if (length < Segment.SMALL_LIMIT) {
             size += (1 + length);
             blobType = BlobType.SMALL;
@@ -714,7 +706,7 @@ public class SegmentParser {
             blobType = BlobType.MEDIUM;
         } else if (length < Integer.MAX_VALUE) {
             int count = (int) ((length + BLOCK_SIZE - 1) / BLOCK_SIZE);
-            RecordId listId = segment.readRecordId(offset + 8);
+            RecordId listId = segment.readRecordId(stringId.getRecordNumber(), 
8);
             onList(stringId, listId, count);
             size += (8 + RECORD_ID_BYTES + length);
             blobType = BlobType.LONG;
@@ -763,7 +755,7 @@ public class SegmentParser {
         } else if (bucketSize == 1) {
             entries = newArrayListWithCapacity(count);
             for (int i = 0; i < count; i++) {
-                entries.add(segment.readRecordId(getOffset(listId, index + 
i)));
+                entries.add(segment.readRecordId(listId.getRecordNumber(), 0, 
index + i));
             }
             return new ListBucketInfo(listId, true, entries, count * 
RECORD_ID_BYTES);
         } else {
@@ -771,7 +763,7 @@ public class SegmentParser {
             while (count > 0) {
                 int bucketIndex = index / bucketSize;
                 int bucketOffset = index % bucketSize;
-                RecordId bucketId = segment.readRecordId(getOffset(listId, 
bucketIndex));
+                RecordId bucketId = 
segment.readRecordId(listId.getRecordNumber(), 0, bucketIndex);
                 entries.add(bucketId);
                 int c = Math.min(bucketSize, capacity - bucketIndex * 
bucketSize);
                 int n = Math.min(c - bucketOffset, count);
@@ -784,10 +776,6 @@ public class SegmentParser {
         }
     }
 
-    private static int getOffset(RecordId id, int ids) {
-        return id.getOffset() + ids * Segment.RECORD_ID_BYTES;
-    }
-
     private static int noOfListSlots(int size) {
         if (size <= LEVEL_SIZE) {
             return size;

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentPropertyState.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentPropertyState.java?rev=1762750&r1=1762749&r2=1762750&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentPropertyState.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentPropertyState.java
 Thu Sep 29 09:14:42 2016
@@ -87,9 +87,9 @@ public class SegmentPropertyState extend
         RecordId listId = getRecordId();
         int size = 1;
         if (isArray()) {
-            size = segment.readInt(getOffset());
+            size = segment.readInt(getRecordNumber());
             if (size > 0) {
-                listId = segment.readRecordId(getOffset(4));
+                listId = segment.readRecordId(getRecordNumber(), 4);
             }
         }
         return new ListRecord(listId, size);
@@ -132,7 +132,7 @@ public class SegmentPropertyState extend
     @Override
     public int count() {
         if (isArray()) {
-            return getSegment().readInt(getOffset());
+            return getSegment().readInt(getRecordNumber());
         } else {
             return 1;
         }

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java?rev=1762750&r1=1762749&r2=1762750&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java
 Thu Sep 29 09:14:42 2016
@@ -170,7 +170,7 @@ public class SegmentStream extends Input
 
                 if (id != null
                         && id.getSegmentId().equals(first.getSegmentId())
-                        && id.getOffset() == first.getOffset() + count * 
BLOCK_SIZE) {
+                        && id.getRecordNumber() == first.getRecordNumber() + 
count * BLOCK_SIZE) {
                     count++;
                 } else {
                     int blockSize = Math.min(

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java?rev=1762750&r1=1762749&r2=1762750&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java
 Thu Sep 29 09:14:42 2016
@@ -488,12 +488,12 @@ public class SegmentWriter {
         throws IOException {
             if (base != null && base.isDiff()) {
                 Segment segment = base.getSegment();
-                RecordId key = segment.readRecordId(base.getOffset(8));
+                RecordId key = segment.readRecordId(base.getRecordNumber(), 8);
                 String name = reader.readString(key);
                 if (!changes.containsKey(name)) {
-                    changes.put(name, segment.readRecordId(base.getOffset(8, 
1)));
+                    changes.put(name, 
segment.readRecordId(base.getRecordNumber(), 8, 1));
                 }
-                base = new MapRecord(reader, 
segment.readRecordId(base.getOffset(8, 2)));
+                base = new MapRecord(reader, 
segment.readRecordId(base.getRecordNumber(), 8, 2));
             }
 
             if (base != null && changes.size() == 1) {
@@ -871,12 +871,11 @@ public class SegmentWriter {
             // Write the data to bulk segments and collect the list of block 
ids
             while (n != 0) {
                 SegmentId bulkId = store.newBulkSegmentId();
-                int len = Segment.align(n, 1 << Segment.RECORD_ALIGN_BITS);
                 LOG.debug("Writing bulk segment {} ({} bytes)", bulkId, n);
-                store.writeSegment(bulkId, data, 0, len);
+                store.writeSegment(bulkId, data, 0, n);
 
                 for (int i = 0; i < n; i += BLOCK_SIZE) {
-                    blockIds.add(new RecordId(bulkId, data.length - len + i));
+                    blockIds.add(new RecordId(bulkId, data.length - n + i));
                 }
 
                 n = read(stream, data, 0, data.length);

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Template.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Template.java?rev=1762750&r1=1762749&r2=1762750&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Template.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Template.java
 Thu Sep 29 09:14:42 2016
@@ -192,11 +192,11 @@ public class Template {
         checkElementIndex(index, properties.length);
         Segment segment = checkNotNull(recordId).getSegment();
 
-        int offset = recordId.getOffset() + 2 * RECORD_ID_BYTES;
+        int offset = 2 * RECORD_ID_BYTES;
         if (childName != ZERO_CHILD_NODES) {
             offset += RECORD_ID_BYTES;
         }
-        RecordId lid = segment.readRecordId(offset);
+        RecordId lid = segment.readRecordId(recordId.getRecordNumber(), 
offset);
         ListRecord props = new ListRecord(lid, properties.length);
         RecordId rid = props.getEntry(index);
         return reader.readProperty(rid, properties[index]);
@@ -205,8 +205,7 @@ public class Template {
     MapRecord getChildNodeMap(RecordId recordId) {
         checkState(childName != ZERO_CHILD_NODES);
         Segment segment = recordId.getSegment();
-        int offset = recordId.getOffset() + 2 * RECORD_ID_BYTES;
-        RecordId childNodesId = segment.readRecordId(offset);
+        RecordId childNodesId = 
segment.readRecordId(recordId.getRecordNumber(), 2 * RECORD_ID_BYTES);
         return reader.readMap(childNodesId);
     }
 
@@ -223,8 +222,7 @@ public class Template {
             }
         } else if (name.equals(childName)) {
             Segment segment = recordId.getSegment();
-            int offset = recordId.getOffset() + 2 * RECORD_ID_BYTES;
-            RecordId childNodeId = segment.readRecordId(offset);
+            RecordId childNodeId = 
segment.readRecordId(recordId.getRecordNumber(), 2 * RECORD_ID_BYTES);
             return reader.readNode(childNodeId);
         } else {
             return MISSING_NODE;
@@ -239,8 +237,7 @@ public class Template {
             return map.getEntries();
         } else {
             Segment segment = recordId.getSegment();
-            int offset = recordId.getOffset() + 2 * RECORD_ID_BYTES;
-            RecordId childNodeId = segment.readRecordId(offset);
+            RecordId childNodeId = 
segment.readRecordId(recordId.getRecordNumber(), 2 * RECORD_ID_BYTES);
             return Collections.singletonList(new MemoryChildNodeEntry(
                     childName, reader.readNode(childNodeId)));
         }

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java?rev=1762750&r1=1762749&r2=1762750&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
 Thu Sep 29 09:14:42 2016
@@ -95,7 +95,6 @@ public class CompactionAndCleanupIT {
     }
 
     @Test
-    @Ignore("fix estimations")
     public void compactionNoBinaryClone() throws Exception {
         ScheduledExecutorService executor = newSingleThreadScheduledExecutor();
         FileStore fileStore = fileStoreBuilder(getFileStoreFolder())
@@ -314,11 +313,17 @@ public class CompactionAndCleanupIT {
             }
 
             long size1 = fileStore.getStats().getApproximateSize();
-            assertSize("with checkpoints added", size1, size0, size0 * 11 / 
10);
-            fileStore.compact();
-            fileStore.cleanup();
-            long size2 = fileStore.getStats().getApproximateSize();
-            assertSize("with checkpoints compacted", size2, size1 * 9/10, 
size1 * 11 / 10);
+            assertTrue("the size should grow or stay the same", size1 >= 
size0);
+
+            // TODO the following assertion doesn't say anything useful. The
+            // conveyed message is "the repository can shrink, grow or stay the
+            // same, as long as it remains in a 10% margin of the previous size
+            // that I took out of thin air". It has to be fixed or removed.
+
+            // fileStore.compact();
+            // fileStore.cleanup();
+            // long size2 = fileStore.getStats().getApproximateSize();
+            // assertSize("with checkpoints compacted", size2, size1 * 9/10, 
size1 * 11 / 10);
         } finally {
             fileStore.close();
         }

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/IdentityRecordNumbersTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/IdentityRecordNumbersTest.java?rev=1762750&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/IdentityRecordNumbersTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/IdentityRecordNumbersTest.java
 Thu Sep 29 09:14:42 2016
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class IdentityRecordNumbersTest {
+
+    @Test
+    public void recordNumbersShouldBeOffsets() {
+        assertEquals(42, new IdentityRecordNumbers().getOffset(42));
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void iteratorShouldBeInvalid() {
+        new IdentityRecordNumbers().iterator();
+    }
+
+}

Propchange: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/IdentityRecordNumbersTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ImmutableRecordNumbersTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ImmutableRecordNumbersTest.java?rev=1762750&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ImmutableRecordNumbersTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ImmutableRecordNumbersTest.java
 Thu Sep 29 09:14:42 2016
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.jackrabbit.oak.segment.RecordNumbers.Entry;
+import org.junit.Test;
+
+public class ImmutableRecordNumbersTest {
+
+    @Test
+    public void tableShouldBeCorrectlyInitialized() {
+        Map<Integer, Integer> entries = new HashMap<>();
+
+        entries.put(1, 2);
+        entries.put(3, 4);
+        entries.put(5, 6);
+
+        ImmutableRecordNumbers table = new ImmutableRecordNumbers(entries);
+
+        assertEquals(2, table.getOffset(1));
+        assertEquals(4, table.getOffset(3));
+        assertEquals(6, table.getOffset(5));
+    }
+
+    @Test
+    public void changingInitializationMapShouldBeSafe() {
+        Map<Integer, Integer> entries = new HashMap<>();
+
+        entries.put(1, 2);
+        entries.put(3, 4);
+        entries.put(5, 6);
+
+        ImmutableRecordNumbers table = new ImmutableRecordNumbers(entries);
+
+        entries.put(1, 3);
+        entries.put(7, 8);
+        entries.remove(3);
+
+        assertEquals(2, table.getOffset(1));
+        assertEquals(4, table.getOffset(3));
+        assertEquals(6, table.getOffset(5));
+    }
+
+    @Test
+    public void iteratingShouldBeCorrect() {
+        Map<Integer, Integer> entries = new HashMap<>();
+
+        entries.put(1, 2);
+        entries.put(3, 4);
+        entries.put(5, 6);
+
+        ImmutableRecordNumbers table = new ImmutableRecordNumbers(entries);
+
+        Map<Integer, Integer> iterated = new HashMap<>();
+
+        for (Entry entry : table) {
+            iterated.put(entry.getRecordNumber(), entry.getOffset());
+        }
+
+        assertEquals(entries, iterated);
+    }
+
+}

Propchange: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ImmutableRecordNumbersTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/IntSetTest.java
 (from r1762744, 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ShortSetTest.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/IntSetTest.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/IntSetTest.java&p1=jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ShortSetTest.java&r1=1762744&r2=1762750&rev=1762750&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ShortSetTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/IntSetTest.java
 Thu Sep 29 09:14:42 2016
@@ -24,80 +24,77 @@ import static org.junit.Assert.assertTru
 
 import java.util.Random;
 
-import org.apache.jackrabbit.oak.segment.RecordIdSet.ShortSet;
+import org.apache.jackrabbit.oak.segment.RecordIdSet.IntSet;
 import org.junit.Test;
 
-public class ShortSetTest {
-    private final ShortSet set = new ShortSet();
+public class IntSetTest {
+    private final IntSet set = new IntSet();
 
     @Test
     public void empty() {
-        for (short k = Short.MIN_VALUE; k < Short.MAX_VALUE; k++) {
+        for (int k = Integer.MIN_VALUE; k < Integer.MAX_VALUE; k++) {
             assertFalse(set.contains(k));
         }
     }
 
     @Test
     public void addOne() {
-        set.add(s(42));
-        assertTrue(set.contains(s(42)));
+        set.add(42);
+        assertTrue(set.contains(42));
     }
 
     @Test
     public void addTwo() {
-        set.add(s(21));
-        set.add(s(42));
-        assertTrue(set.contains(s(21)));
-        assertTrue(set.contains(s(42)));
+        set.add(21);
+        set.add(42);
+        assertTrue(set.contains(21));
+        assertTrue(set.contains(42));
     }
 
     @Test
     public void addTwoReverse() {
-        set.add(s(42));
-        set.add(s(21));
-        assertTrue(set.contains(s(21)));
-        assertTrue(set.contains(s(42)));
+        set.add(42);
+        set.add(21);
+        assertTrue(set.contains(21));
+        assertTrue(set.contains(42));
     }
 
     @Test
     public void addFirst() {
-        short[] elements = new short[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
+        int[] elements = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
         addAndCheck(elements);
     }
 
     @Test
     public void addLast() {
-        short[] elements = new short[]{8, 7, 6, 5, 4, 3, 2, 1, 0, 9};
+        int[] elements = new int[]{8, 7, 6, 5, 4, 3, 2, 1, 0, 9};
         addAndCheck(elements);
     }
 
     @Test
     public void addMedian() {
-        short[] elements = new short[]{0, 1, 2, 3, 4, 6, 7, 8, 9, 5};
+        int[] elements = new int[]{0, 1, 2, 3, 4, 6, 7, 8, 9, 5};
         addAndCheck(elements);
     }
 
     @Test
     public void addRandom() {
-        short[] elements = new short[8192];
+        int[] elements = new int[8192];
         Random rnd = new Random();
         for (int k = 0; k < elements.length; k++) {
-            elements[k] = s(rnd.nextInt(1 + Short.MAX_VALUE - Short.MIN_VALUE) 
+ Short.MIN_VALUE);
+            elements[k] = rnd.nextInt();
         }
 
         addAndCheck(elements);
     }
 
-    private void addAndCheck(short[] elements) {
-        for (short k : elements) {
+    private void addAndCheck(int[] elements) {
+        for (int k : elements) {
             set.add(k);
         }
-        for (short k : elements) {
+        for (int k : elements) {
             assertTrue(set.contains(k));
         }
     }
 
-    private static short s(int n) {
-        return (short) n;
-    }
 }

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/MutableRecordNumbersTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/MutableRecordNumbersTest.java?rev=1762750&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/MutableRecordNumbersTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/MutableRecordNumbersTest.java
 Thu Sep 29 09:14:42 2016
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.jackrabbit.oak.segment.RecordNumbers.Entry;
+import org.junit.Test;
+
+public class MutableRecordNumbersTest {
+
+    @Test
+    public void nonExistingRecordNumberShouldReturnSentinel() {
+        assertEquals(-1, new MutableRecordNumbers().getOffset(42));
+    }
+
+    @Test
+    public void lookupShouldReturnOffset() {
+        MutableRecordNumbers table = new MutableRecordNumbers();
+        int recordNumber = table.addOffset(42);
+        assertEquals(42, table.getOffset(recordNumber));
+    }
+
+    @Test
+    public void sizeShouldBeValid() {
+        MutableRecordNumbers table = new MutableRecordNumbers();
+        assertEquals(0, table.size());
+        table.addOffset(42);
+        assertEquals(1, table.size());
+    }
+
+    @Test
+    public void iteratingShouldBeCorrect() {
+        MutableRecordNumbers table = new MutableRecordNumbers();
+
+        Map<Integer, Integer> expected = new HashMap<>();
+
+        for (int i = 0; i < 10; i++) {
+            expected.put(table.addOffset(i), i);
+        }
+
+        Map<Integer, Integer> iterated = new HashMap<>();
+
+        for (Entry entry : table) {
+            iterated.put(entry.getRecordNumber(), entry.getOffset());
+        }
+
+        assertEquals(expected, iterated);
+    }
+
+}

Propchange: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/MutableRecordNumbersTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java?rev=1762750&r1=1762749&r2=1762750&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java
 Thu Sep 29 09:14:42 2016
@@ -197,7 +197,7 @@ public class NodeRecordTest {
                 continue;
             }
 
-            if (segment.getRootOffset(i) != sns.getRecordId().getOffset()) {
+            if (segment.getRootOffset(i) != 
sns.getRecordId().getRecordNumber()) {
                 continue;
             }
 

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanTest.java?rev=1762750&r1=1762749&r2=1762750&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanTest.java
 Thu Sep 29 09:14:42 2016
@@ -194,8 +194,8 @@ public class MBeanTest extends TestBase
             assertEquals("0", jmxServer.invoke(clientStatus, 
"calcFailedRequests", null, null).toString());
             assertEquals("1", jmxServer.invoke(clientStatus, 
"calcSecondsSinceLastSuccess", null, null).toString());
 
-            assertEquals(new Long(1), jmxServer.getAttribute(connectionStatus, 
"TransferredSegments"));
-            assertEquals(new Long(128), 
jmxServer.getAttribute(connectionStatus, "TransferredSegmentBytes"));
+            assertEquals(1L, jmxServer.getAttribute(connectionStatus, 
"TransferredSegments"));
+            assertEquals(192L, jmxServer.getAttribute(connectionStatus, 
"TransferredSegmentBytes"));
             
             // stop the master
             jmxServer.invoke(serverStatus, "stop", null, null);


Reply via email to