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