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 mr...@apache.org on 2015/06/17 12:26:06 UTC

svn commit: r1685989 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java

Author: mreutegg
Date: Wed Jun 17 10:26:06 2015
New Revision: 1685989

URL: http://svn.apache.org/r1685989
Log:
OAK-2829: Comparing node states for external changes is too slow

Addressed TODO in JournalEntry

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java?rev=1685989&r1=1685988&r2=1685989&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java Wed Jun 17 10:26:06 2015
@@ -26,6 +26,7 @@ import java.util.Set;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
+import com.google.common.collect.AbstractIterator;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
@@ -310,20 +311,36 @@ public final class JournalEntry extends
      */
     @Nonnull
     Iterable<JournalEntry> getBranchCommits() {
-        List<JournalEntry> commits = Lists.newArrayList();
+        final List<String> ids = Lists.newArrayList();
         String bc = (String) get(BRANCH_COMMITS);
         if (bc != null) {
             for (String id : bc.split(",")) {
-                JournalEntry d = store.find(JOURNAL, id);
-                if (d == null) {
-                    throw new IllegalStateException(
-                            "Missing external change for branch revision: " + id);
-                }
-                //TODO: could this also be a problem with very large number of branches ???
-                commits.add(d);
+                ids.add(id);
             }
         }
-        return commits;
+        return new Iterable<JournalEntry>() {
+            @Override
+            public Iterator<JournalEntry> iterator() {
+                return new AbstractIterator<JournalEntry>() {
+
+                    private final Iterator<String> it = ids.iterator();
+
+                    @Override
+                    protected JournalEntry computeNext() {
+                        if (!it.hasNext()) {
+                            return endOfData();
+                        }
+                        String id = it.next();
+                        JournalEntry d = store.find(JOURNAL, id);
+                        if (d == null) {
+                            throw new IllegalStateException(
+                                    "Missing external change for branch revision: " + id);
+                        }
+                        return d;
+                    }
+                };
+            }
+        };
     }
 
     //-----------------------------< internal >---------------------------------
@@ -380,9 +397,9 @@ public final class JournalEntry extends
         private final TreeNode parent;
 
         TreeNode(TreeNode parent, String name) {
-            if (name.contains("/")) {
-                throw new IllegalArgumentException("name must not contain /: " + name);
-            }
+            checkArgument(!name.contains("/"),
+                    "name must not contain '/': {}", name);
+
             this.parent = parent;
             if (parent == null) {
                 this.path = "/";