Author: mreutegg
Date: Fri Mar 28 21:34:33 2014
New Revision: 1582889
URL: http://svn.apache.org/r1582889
Log:
OAK-1342: Cascading document history
- Optimize isConflicting()
- Split off revisions independent of existing previous ranges
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/UpdateUtils.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java?rev=1582889&r1=1582888&r2=1582889&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
Fri Mar 28 21:34:33 2014
@@ -800,7 +800,9 @@ public final class NodeDocument extends
@Nonnull Revision baseRevision,
@Nonnull RevisionContext context) {
// did existence of node change after baseRevision?
- Map<Revision, String> deleted = getDeleted();
+ // only check local deleted map, which contains the most
+ // recent values
+ Map<Revision, String> deleted = getLocalDeleted();
for (Map.Entry<Revision, String> entry : deleted.entrySet()) {
if (isRevisionNewer(context, entry.getKey(), baseRevision)) {
return true;
@@ -852,18 +854,13 @@ public final class NodeDocument extends
if (id == null) {
throw new IllegalStateException("document does not have an id: " +
this);
}
- // what's the most recent previous revision?
- Revision recentPrevious = null;
+ // collect ranges and create a histogram of the height
Map<Integer, List<Range>> prevHisto = Maps.newHashMap();
for (Map.Entry<Revision, Range> entry : previous.entrySet()) {
Revision rev = entry.getKey();
if (rev.getClusterId() != context.getClusterId()) {
continue;
}
- if (recentPrevious == null
- || isRevisionNewer(context, rev, recentPrevious)) {
- recentPrevious = rev;
- }
Range r = entry.getValue();
List<Range> list = prevHisto.get(r.getHeight());
if (list == null) {
@@ -889,11 +886,8 @@ public final class NodeDocument extends
if (rev.getClusterId() != context.getClusterId()) {
continue;
}
- if (recentPrevious == null
- || isRevisionNewer(context, rev, recentPrevious)) {
- if (isCommitted(rev)) {
- splitMap.put(rev, entry.getValue());
- }
+ if (isCommitted(rev)) {
+ splitMap.put(rev, entry.getValue());
}
}
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/UpdateUtils.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/UpdateUtils.java?rev=1582889&r1=1582888&r2=1582889&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/UpdateUtils.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/UpdateUtils.java
Fri Mar 28 21:34:33 2014
@@ -70,6 +70,9 @@ public class UpdateUtils {
m = new TreeMap<Revision, Object>(comparator);
doc.put(k.getName(), m);
}
+ if (k.getRevision() == null) {
+ throw new IllegalArgumentException("Cannot set map
entry " + k.getName() + " with null revision");
+ }
m.put(k.getRevision(), op.value);
break;
}