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/08/27 15:09:22 UTC

svn commit: r1698144 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java

Author: mreutegg
Date: Thu Aug 27 13:09:22 2015
New Revision: 1698144

URL: http://svn.apache.org/r1698144
Log:
OAK-3306: Create a copy of MemoryDocumentStore

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

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java?rev=1698144&r1=1698143&r2=1698144&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java Thu Aug 27 13:09:22 2015
@@ -222,6 +222,32 @@ public class MemoryDocumentStore impleme
     }
 
     /**
+     * @return a copy of this document store.
+     */
+    @Nonnull
+    public MemoryDocumentStore copy() {
+        MemoryDocumentStore copy = new MemoryDocumentStore();
+        copyDocuments(Collection.NODES, copy);
+        copyDocuments(Collection.CLUSTER_NODES, copy);
+        copyDocuments(Collection.SETTINGS, copy);
+        copyDocuments(Collection.JOURNAL, copy);
+        return copy;
+    }
+
+    private <T extends Document> void copyDocuments(Collection<T> collection,
+                                                    MemoryDocumentStore target) {
+        ConcurrentSkipListMap<String, T> from = getMap(collection);
+        ConcurrentSkipListMap<String, T> to = target.getMap(collection);
+
+        for (Map.Entry<String, T> entry : from.entrySet()) {
+            T doc = collection.newDocument(target);
+            entry.getValue().deepCopy(doc);
+            doc.seal();
+            to.put(entry.getKey(), doc);
+        }
+    }
+
+    /**
      * Get the in-memory map for this collection.
      *
      * @param collection the collection