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/10/02 18:00:03 UTC
svn commit: r1528529 - 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: Wed Oct 2 16:00:03 2013
New Revision: 1528529
URL: http://svn.apache.org/r1528529
Log:
OAK-1031: SegmentMK: Fewer segment lookups
Return MapEntry instead of RecordId from MapRecord.getEntry(String) so that we can keep the correct Segment reference along with the return value
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapBranch.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapLeaf.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapRecord.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Template.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/MapBranch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapBranch.java?rev=1528529&r1=1528528&r2=1528529&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapBranch.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapBranch.java Wed Oct 2 16:00:03 2013
@@ -64,7 +64,7 @@ class MapBranch extends MapRecord {
}
@Override
- RecordId getEntry(String key) {
+ MapEntry getEntry(String key) {
checkNotNull(key);
int mask = BUCKETS_PER_LEVEL - 1;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapLeaf.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapLeaf.java?rev=1528529&r1=1528528&r2=1528529&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapLeaf.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapLeaf.java Wed Oct 2 16:00:03 2013
@@ -36,7 +36,7 @@ class MapLeaf extends MapRecord {
}
@Override
- RecordId getEntry(String key) {
+ MapEntry getEntry(String key) {
if (size == 0) {
return null;
}
@@ -44,16 +44,18 @@ class MapLeaf extends MapRecord {
Segment segment = getSegment();
int hash = checkNotNull(key).hashCode();
- for (int i = 0; i < size; i++) {
- int d = Integer.compare(segment.readInt(getOffset(4 + i * 4)), hash);
- if (d == 0) {
- RecordId id = segment.readRecordId(getOffset(4 + size * 4, i));
- d = segment.readString(id).compareTo(key);
- }
+ int d = -1;
+ for (int i = 0; i < size && d < 0; i++) {
+ d = Integer.compare(segment.readInt(getOffset(4 + i * 4)), hash);
if (d == 0) {
- return segment.readRecordId(getOffset(4 + size * 4, size + i));
- } else if (d > 0) {
- return null;
+ RecordId keyId = segment.readRecordId(
+ getOffset(4 + size * 4, i));
+ d = segment.readString(keyId).compareTo(key);
+ if (d == 0) {
+ RecordId valueId = segment.readRecordId(
+ getOffset(4 + size * 4, size + i));
+ return new MapEntry(segment, key, keyId, valueId);
+ }
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapRecord.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapRecord.java?rev=1528529&r1=1528528&r2=1528529&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapRecord.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapRecord.java Wed Oct 2 16:00:03 2013
@@ -78,7 +78,7 @@ abstract class MapRecord extends Record
return size;
}
- abstract RecordId getEntry(String key);
+ abstract MapEntry getEntry(String key);
abstract Iterable<String> getKeys();
@@ -103,14 +103,13 @@ abstract class MapRecord extends Record
Set<String> keys = newHashSet();
for (MapEntry entry : getEntries()) {
String name = entry.getName();
- RecordId thisId = entry.getValue();
- RecordId thatId = that.getEntry(name);
- if (thatId == null) {
- if (!diff.entryAdded(name, thisId)) {
+ MapEntry thatEntry = that.getEntry(name);
+ if (thatEntry == null) {
+ if (!diff.entryAdded(name, entry.getValue())) {
return false;
}
- } else if (!thisId.equals(thatId)) {
- if (!diff.entryChanged(name, thatId, thisId)) {
+ } else if (!entry.getValue().equals(thatEntry.getValue())) {
+ if (!diff.entryChanged(name, thatEntry.getValue(), entry.getValue())) {
return false;
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java?rev=1528529&r1=1528528&r2=1528529&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java Wed Oct 2 16:00:03 2013
@@ -222,9 +222,9 @@ public class SegmentNodeState extends Re
if (childName == Template.ZERO_CHILD_NODES) {
return MISSING_NODE;
} else if (childName == Template.MANY_CHILD_NODES) {
- RecordId childNodeId = getChildNodeMap().getEntry(name);
- if (childNodeId != null) {
- return new SegmentNodeState(getSegment(), childNodeId);
+ MapEntry child = getChildNodeMap().getEntry(name);
+ if (child != null) {
+ return child.getNodeState();
} else {
return MISSING_NODE;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Template.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Template.java?rev=1528529&r1=1528528&r2=1528529&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Template.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Template.java Wed Oct 2 16:00:03 2013
@@ -188,9 +188,9 @@ public class Template {
return MISSING_NODE;
} else if (childName == MANY_CHILD_NODES) {
MapRecord map = getChildNodeMap(segment, recordId);
- RecordId childNodeId = map.getEntry(name);
- if (childNodeId != null) {
- return new SegmentNodeState(segment, childNodeId);
+ MapEntry child = map.getEntry(name);
+ if (child != null) {
+ return child.getNodeState();
} else {
return MISSING_NODE;
}
@@ -253,13 +253,10 @@ public class Template {
// TODO: can this be optimized?
for (MapEntry entry : thisMap.getEntries()) {
String name = entry.getName();
- RecordId thisChild = entry.getValue();
- RecordId thatChild = thatMap.getEntry(name);
- if (thatChild == null) {
+ MapEntry thatEntry = thatMap.getEntry(name);
+ if (thatEntry == null) {
return false;
- } else if (!thisChild.equals(thatChild)
- && !new SegmentNodeState(thisSegment, thisChild).equals(
- new SegmentNodeState(thatSegment, thatChild))) {
+ } else if (!entry.getNodeState().equals(thatEntry.getNodeState())) {
return false;
}
}
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=1528529&r1=1528528&r2=1528529&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 Wed Oct 2 16:00:03 2013
@@ -190,7 +190,7 @@ public class RecordTest {
assertFalse(iterator.hasNext());
assertEquals(1, one.size());
- assertEquals(blockId, one.getEntry("one"));
+ assertEquals(blockId, one.getEntry("one").getValue());
assertNull(one.getEntry("two"));
iterator = one.getEntries().iterator();
assertTrue(iterator.hasNext());
@@ -198,8 +198,8 @@ public class RecordTest {
assertFalse(iterator.hasNext());
assertEquals(2, two.size());
- assertEquals(blockId, two.getEntry("one"));
- assertEquals(blockId, two.getEntry("two"));
+ assertEquals(blockId, two.getEntry("one").getValue());
+ assertEquals(blockId, two.getEntry("two").getValue());
assertNull(two.getEntry("three"));
iterator = two.getEntries().iterator();
assertTrue(iterator.hasNext());
@@ -213,7 +213,7 @@ public class RecordTest {
for (int i = 0; i < 1000; i++) {
assertTrue(iterator.hasNext());
assertEquals(blockId, iterator.next().getValue());
- assertEquals(blockId, many.getEntry("key" + i));
+ assertEquals(blockId, many.getEntry("key" + i).getValue());
}
assertFalse(iterator.hasNext());
assertNull(many.getEntry("foo"));
@@ -227,7 +227,7 @@ public class RecordTest {
for (int i = 1; i <= 1000; i++) {
assertTrue(iterator.hasNext());
assertEquals(blockId, iterator.next().getValue());
- assertEquals(blockId, modified.getEntry("key" + i));
+ assertEquals(blockId, modified.getEntry("key" + i).getValue());
}
assertFalse(iterator.hasNext());
assertNull(many.getEntry("foo"));