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/04 02:27:40 UTC
svn commit: r1547668 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment:
Record.java SegmentBlob.java SegmentNodeState.java SegmentNodeStore.java
SegmentPropertyState.java Template.java
Author: jukka
Date: Wed Dec 4 01:27:40 2013
New Revision: 1547668
URL: http://svn.apache.org/r1547668
Log:
OAK-593: Segment-based MK
Generalize the fastEquals() method
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.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/SegmentNodeStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentPropertyState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Template.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java?rev=1547668&r1=1547667&r2=1547668&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java Wed Dec 4 01:27:40 2013
@@ -29,6 +29,18 @@ import javax.annotation.Nonnull;
*/
class Record {
+ static boolean fastEquals(Object a, Object b) {
+ return a instanceof Record && fastEquals((Record) a, b);
+ }
+
+ static boolean fastEquals(Record a, Object b) {
+ return b instanceof Record && fastEquals(a, (Record) b);
+ }
+
+ static boolean fastEquals(Record a, Record b) {
+ return equal(a.uuid, b.uuid) && a.offset == b.offset;
+ }
+
/**
* The segment that contains this record, or initially some other segment
* in the same store. The reference is lazily updated when the
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java?rev=1547668&r1=1547667&r2=1547668&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java Wed Dec 4 01:27:40 2013
@@ -46,14 +46,12 @@ class SegmentBlob extends Record impleme
@Override
public boolean equals(Object object) {
- if (object instanceof SegmentBlob) {
- SegmentBlob that = (SegmentBlob) object;
- if (getRecordId().equals(that.getRecordId())) {
- return true;
- }
+ if (object == this || fastEquals(this, object)) {
+ return true;
+ } else {
+ return object instanceof Blob
+ && AbstractBlob.equal(this, (Blob) object);
}
- return object instanceof Blob
- && AbstractBlob.equal(this, (Blob) object);
}
@Override
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=1547668&r1=1547667&r2=1547668&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 Dec 4 01:27:40 2013
@@ -270,17 +270,16 @@ public class SegmentNodeState extends Re
@Override
public boolean compareAgainstBaseState(NodeState base, NodeStateDiff diff) {
- if (base == this) {
+ if (this == base || fastEquals(this, base)) {
return true; // no changes
} else if (base == EMPTY_NODE || !base.exists()) { // special case
return getTemplate().compareAgainstEmptyState(
getSegment(), getRecordId(), diff);
} else if (base instanceof SegmentNodeState) {
SegmentNodeState that = (SegmentNodeState) base;
- return getRecordId().equals(that.getRecordId())
- || getTemplate().compareAgainstBaseState(
- getSegment(), getRecordId(), that.getTemplate(),
- that.getSegment(), that.getRecordId(), diff);
+ return getTemplate().compareAgainstBaseState(
+ getSegment(), getRecordId(), that.getTemplate(),
+ that.getSegment(), that.getRecordId(), diff);
} else {
// fallback
return AbstractNodeState.compareAgainstBaseState(this, base, diff);
@@ -289,24 +288,18 @@ public class SegmentNodeState extends Re
@Override
public boolean equals(Object object) {
- if (this == object) {
+ if (this == object || fastEquals(this, object)) {
return true;
} else if (object instanceof SegmentNodeState) {
SegmentNodeState that = (SegmentNodeState) object;
- if (getRecordId().equals(that.getRecordId())
- && getStore() == that.getStore()) {
- return true;
- } else {
- Template template = getTemplate();
- return template.equals(that.getTemplate())
- && template.compare(
- getSegment(), getRecordId(),
- that.getSegment(), that.getRecordId());
- }
- } else if (object instanceof NodeState){
- return AbstractNodeState.equals(this, (NodeState) object); // TODO
+ Template template = getTemplate();
+ return template.equals(that.getTemplate())
+ && template.compare(
+ getSegment(), getRecordId(),
+ that.getSegment(), that.getRecordId());
} else {
- return false;
+ return object instanceof NodeState
+ && AbstractNodeState.equals(this, (NodeState) object); // TODO
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java?rev=1547668&r1=1547667&r2=1547668&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java Wed Dec 4 01:27:40 2013
@@ -16,13 +16,13 @@
*/
package org.apache.jackrabbit.oak.plugins.segment;
-import static com.google.common.base.Objects.equal;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.lang.System.currentTimeMillis;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.NANOSECONDS;
import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.apache.jackrabbit.oak.plugins.segment.Record.fastEquals;
import java.io.Closeable;
import java.io.IOException;
@@ -355,16 +355,4 @@ public class SegmentNodeStore implements
}
- private static boolean fastEquals(Object a, Object b) {
- return a instanceof Record && fastEquals((Record) a, b);
- }
-
- private static boolean fastEquals(Record a, Object b) {
- return b instanceof Record && fastEquals(a, (Record) b);
- }
-
- private static boolean fastEquals(Record a, Record b) {
- return equal(a.getRecordId(), b.getRecordId());
- }
-
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentPropertyState.java?rev=1547668&r1=1547667&r2=1547668&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentPropertyState.java Wed Dec 4 01:27:40 2013
@@ -193,7 +193,7 @@ class SegmentPropertyState extends Recor
@Override
public boolean equals(Object object) {
// optimize for common cases
- if (this == object) {
+ if (this == object) { // don't use fastEquals here due to value sharing
return true;
} else if (object instanceof SegmentPropertyState) {
SegmentPropertyState that = (SegmentPropertyState) object;
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=1547668&r1=1547667&r2=1547668&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 Dec 4 01:27:40 2013
@@ -20,6 +20,7 @@ import static com.google.common.base.Pre
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.MISSING_NODE;
+import static org.apache.jackrabbit.oak.plugins.segment.Record.fastEquals;
import static org.apache.jackrabbit.oak.plugins.segment.Segment.RECORD_ID_BYTES;
import java.util.Arrays;
@@ -245,7 +246,7 @@ public class Template {
// TODO: Leverage the HAMT data structure for the comparison
MapRecord thisMap = getChildNodeMap(thisSegment, thisId);
MapRecord thatMap = getChildNodeMap(thatSegment, thatId);
- if (thisMap.getRecordId().equals(thatMap.getRecordId())) {
+ if (fastEquals(thisMap, thatMap)) {
return true; // shortcut
} else if (thisMap.size() != thatMap.size()) {
return false; // shortcut
@@ -474,18 +475,6 @@ public class Template {
}
- private boolean fastEquals(NodeState a, NodeState b) {
- if (a == b) {
- return true;
- } else if (a instanceof SegmentNodeState
- && b instanceof SegmentNodeState) {
- return ((SegmentNodeState) a).getRecordId().equals(
- ((SegmentNodeState) b).getRecordId());
- } else {
- return false;
- }
- }
-
private boolean compareProperties(
PropertyState before, PropertyState after, NodeStateDiff diff) {
if (before == null) {