You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ju...@apache.org on 2013/12/17 01:47:20 UTC
svn commit: r1551426 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/segment/
test/java/org/apache/jackrabbit/oak/plugins/segment/
Author: jukka
Date: Tue Dec 17 00:47:19 2013
New Revision: 1551426
URL: http://svn.apache.org/r1551426
Log:
OAK-1287: java.lang.IllegalArgumentException when running FlatTreeWithAceForSamePrincipalTest
Fix handling of long lists of values
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/ListRecord.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/RecordTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/ListRecord.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/ListRecord.java?rev=1551426&r1=1551425&r2=1551426&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/ListRecord.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/ListRecord.java Tue Dec 17 00:47:19 2013
@@ -57,8 +57,10 @@ class ListRecord extends Record {
int bucketIndex = index / bucketSize;
int bucketOffset = index % bucketSize;
Segment segment = getSegment();
- RecordId bucketId = segment.readRecordId(getOffset(0, bucketIndex));
- ListRecord bucket = new ListRecord(segment, bucketId, bucketSize);
+ RecordId id = segment.readRecordId(getOffset(0, bucketIndex));
+ ListRecord bucket = new ListRecord(
+ segment, id,
+ Math.min(bucketSize, size - bucketIndex * bucketSize));
return bucket.getEntry(bucketOffset);
}
}
@@ -78,7 +80,7 @@ class ListRecord extends Record {
list.add(id);
} else {
ListRecord bucket = new ListRecord(
- segment, id, Math.min(bucketSize, size - offset));
+ segment, id, Math.min(bucketSize, size - i));
list.addAll(bucket.getEntries());
}
offset += Segment.RECORD_ID_BYTES;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java?rev=1551426&r1=1551425&r2=1551426&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java Tue Dec 17 00:47:19 2013
@@ -340,6 +340,7 @@ public class SegmentWriter {
private synchronized RecordId writeListBucket(List<RecordId> bucket) {
+ checkArgument(bucket.size() > 1);
RecordId bucketId = prepare(RecordType.BUCKET, 0, bucket);
for (RecordId id : bucket) {
writeRecordId(id);
@@ -516,7 +517,11 @@ public class SegmentWriter {
List<RecordId> nextLevel = Lists.newArrayList();
for (List<RecordId> bucket :
Lists.partition(thisLevel, ListRecord.LEVEL_SIZE)) {
- nextLevel.add(writeListBucket(bucket));
+ if (bucket.size() > 1) {
+ nextLevel.add(writeListBucket(bucket));
+ } else {
+ nextLevel.add(bucket.get(0));
+ }
}
thisLevel = nextLevel;
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/RecordTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/RecordTest.java?rev=1551426&r1=1551425&r2=1551426&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/RecordTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/RecordTest.java Tue Dec 17 00:47:19 2013
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.oak.plugins.segment;
import static com.google.common.collect.Lists.newArrayList;
+import static junit.framework.Assert.fail;
import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
import static org.apache.jackrabbit.oak.plugins.segment.ListRecord.LEVEL_SIZE;
import static org.apache.jackrabbit.oak.plugins.segment.SegmentIdFactory.newBulkSegmentId;
@@ -102,6 +103,18 @@ public class RecordTest {
assertEquals(LEVEL_SIZE * LEVEL_SIZE + 1, level2p.size());
assertEquals(blockId, level2p.getEntry(0));
assertEquals(blockId, level2p.getEntry(LEVEL_SIZE * LEVEL_SIZE));
+
+ try {
+ int count = 0;
+ for (RecordId entry : level2p.getEntries()) {
+ assertEquals(blockId, entry);
+ assertEquals(blockId, level2p.getEntry(count));
+ count++;
+ }
+ assertEquals(LEVEL_SIZE * LEVEL_SIZE + 1, count);
+ } catch (IllegalArgumentException e) {
+ fail("OAK-1287");
+ }
}
private ListRecord writeList(int size, RecordId id) {