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 fr...@apache.org on 2016/06/30 14:06:31 UTC
svn commit: r1750801 - in /jackrabbit/oak/trunk/oak-segment-tar/src:
main/java/org/apache/jackrabbit/oak/segment/
test/java/org/apache/jackrabbit/oak/segment/
test/java/org/apache/jackrabbit/oak/segment/file/
Author: frm
Date: Thu Jun 30 14:06:31 2016
New Revision: 1750801
URL: http://svn.apache.org/viewvc?rev=1750801&view=rev
Log:
OAK-4525 - Ensure that unreferenced node records are root records in a segment
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordWriters.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentSizeTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/NodeRecordTest.java
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordWriters.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordWriters.java?rev=1750801&r1=1750800&r2=1750801&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordWriters.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordWriters.java Thu Jun 30 14:06:31 2016
@@ -496,12 +496,17 @@ final class RecordWriters {
@Override
protected RecordId writeRecordContent(RecordId id, SegmentBufferWriter writer) {
+
+ // Write the stable record ID. This is only a marker and is not a
+ // reference to another record. Because of this, those record IDs
+ // should not be marked as references.
+
if (stableId == null) {
// Write this node's record id to indicate that the stable id is not
// explicitly stored.
- writer.writeRecordId(id);
+ writer.writeRecordId(id, false);
} else {
- writer.writeRecordId(stableId);
+ writer.writeRecordId(stableId, false);
}
for (RecordId recordId : ids) {
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java?rev=1750801&r1=1750800&r2=1750801&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java Thu Jun 30 14:06:31 2016
@@ -216,8 +216,24 @@ public class SegmentBufferWriter impleme
* @param recordId the record id
*/
public void writeRecordId(RecordId recordId) {
+ writeRecordId(recordId, true);
+ }
+
+ /**
+ * Write a record ID. Optionally, mark this record ID as being a reference.
+ * If a record ID is marked as a reference, the referenced record can't be a
+ * root record in this segment.
+ *
+ * @param recordId the record ID.
+ * @param reference {@code true} if this record ID is a reference, {@code
+ * false} otherwise.
+ */
+ public void writeRecordId(RecordId recordId, boolean reference) {
checkNotNull(recordId);
- roots.remove(recordId);
+
+ if (reference) {
+ roots.remove(recordId);
+ }
int offset = recordId.getOffset();
checkState(0 <= offset && offset < MAX_SEGMENT_SIZE);
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentSizeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentSizeTest.java?rev=1750801&r1=1750800&r2=1750801&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentSizeTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentSizeTest.java Thu Jun 30 14:06:31 2016
@@ -151,7 +151,7 @@ public class SegmentSizeTest {
deny.setProperty("rep:principalName", "everyone");
deny.setProperty(PropertyStates.createProperty(
"rep:privileges", ImmutableList.of("jcr:read"), Type.NAMES));
- expectSize(224, builder);
+ expectSize(240, builder);
expectAmortizedSize(40, builder);
NodeBuilder allow = builder.child("allow");
@@ -168,7 +168,7 @@ public class SegmentSizeTest {
deny0.setProperty("rep:glob", "*/activities/*");
builder.setProperty(PropertyStates.createProperty(
"rep:privileges", ImmutableList.of("jcr:read"), Type.NAMES));
- expectSize(464, builder);
+ expectSize(480, builder);
expectAmortizedSize(136, builder);
NodeBuilder allow0 = builder.child("allow0");
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/NodeRecordTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/NodeRecordTest.java?rev=1750801&r1=1750800&r2=1750801&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/NodeRecordTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/NodeRecordTest.java Thu Jun 30 14:06:31 2016
@@ -23,7 +23,8 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.segment.RecordType;
import org.apache.jackrabbit.oak.segment.Segment;
import org.apache.jackrabbit.oak.segment.SegmentNodeState;
-import org.junit.Ignore;
+import org.apache.jackrabbit.oak.segment.SegmentWriter;
+import org.apache.jackrabbit.oak.segment.SegmentWriterBuilder;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -38,10 +39,12 @@ public class NodeRecordTest {
}
@Test
- @Ignore("OAK-4525")
- public void newNodeRecordShouldBeRoot() throws Exception {
+ public void unreferencedNodeRecordShouldBeRoot() throws Exception {
try (FileStore store = newFileStore()) {
- assertTrue(isRootRecord(store.getWriter().writeNode(EmptyNodeState.EMPTY_NODE)));
+ SegmentWriter writer = SegmentWriterBuilder.segmentWriterBuilder("test").build(store);
+ SegmentNodeState state = writer.writeNode(EmptyNodeState.EMPTY_NODE);
+ writer.flush();
+ assertTrue(isRootRecord(state));
}
}