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 to...@apache.org on 2016/04/25 11:37:23 UTC

svn commit: r1740787 - in /jackrabbit/oak/trunk/oak-upgrade: ./ src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/ src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/ src/main/resources/ src/test/java/org/apache/jackrabbit/oak/upgrade/cl...

Author: tomekr
Date: Mon Apr 25 09:37:23 2016
New Revision: 1740787

URL: http://svn.apache.org/viewvc?rev=1740787&view=rev
Log:
OAK-4260 Implement migration from segment to segment-next

Added:
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentNextFactory.java
    jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentNextTest.java
    jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNextNodeStoreContainer.java
      - copied, changed from r1740766, jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java
Modified:
    jackrabbit/oak/trunk/oak-upgrade/pom.xml
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArguments.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreType.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/resources/upgrade_usage.txt
    jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java

Modified: jackrabbit/oak/trunk/oak-upgrade/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/pom.xml?rev=1740787&r1=1740786&r2=1740787&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-upgrade/pom.xml Mon Apr 25 09:37:23 2016
@@ -90,6 +90,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.jackrabbit</groupId>
+      <artifactId>oak-segment-next</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jackrabbit</groupId>
       <artifactId>jackrabbit-core</artifactId>
       <version>${jackrabbit.version}</version>
     </dependency>

Added: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentNextFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentNextFactory.java?rev=1740787&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentNextFactory.java (added)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentNextFactory.java Mon Apr 25 09:37:23 2016
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.upgrade.cli.node;
+
+import com.google.common.io.Closer;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.spi.blob.BlobStore;
+import org.apache.jackrabbit.oak.spi.state.NodeStore;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+
+public class SegmentNextFactory implements NodeStoreFactory {
+
+    private final File dir;
+
+    private final boolean mmap;
+
+    public SegmentNextFactory(String directory, boolean mmap) {
+        this.dir = new File(directory);
+        this.mmap = mmap;
+        if (!dir.isDirectory()) {
+            throw new IllegalArgumentException("Not a directory: " + dir.getPath());
+        }
+    }
+
+    @Override
+    public NodeStore create(BlobStore blobStore, Closer closer) throws IOException {
+        FileStore.Builder builder = FileStore.builder(new File(dir, "segmentstore"));
+        if (blobStore != null) {
+            builder.withBlobStore(blobStore);
+        }
+        builder.withMaxFileSize(256).withMemoryMapping(mmap);
+        FileStore fs = builder.build();
+        closer.register(asCloseable(fs));
+        return SegmentNodeStore.builder(fs).build();
+    }
+
+    public File getRepositoryDir() {
+        return dir;
+    }
+
+    private static Closeable asCloseable(final FileStore fs) {
+        return new Closeable() {
+            @Override
+            public void close() throws IOException {
+                fs.close();
+            }
+        };
+    }
+
+    @Override
+    public String toString() {
+        return String.format("SegmentNextNodeStore[%s]", dir);
+    }
+}

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArguments.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArguments.java?rev=1740787&r1=1740786&r2=1740787&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArguments.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArguments.java Mon Apr 25 09:37:23 2016
@@ -53,6 +53,8 @@ public class StoreArguments {
 
     private static final String REPOSITORY_XML = "repository.xml";
 
+    public static final String SEGMENT_OLD_PREFIX = "segment-old:";
+
     private static final Logger log = LoggerFactory.getLogger(StoreArguments.class);
 
     private final MigrationCliArguments parser;

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreType.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreType.java?rev=1740787&r1=1740786&r2=1740787&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreType.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreType.java Mon Apr 25 09:37:23 2016
@@ -16,13 +16,16 @@
  */
 package org.apache.jackrabbit.oak.upgrade.cli.parser;
 
+import static org.apache.commons.lang.StringUtils.removeStart;
 import static org.apache.jackrabbit.oak.upgrade.cli.node.Jackrabbit2Factory.isJcr2Repository;
 import static org.apache.jackrabbit.oak.upgrade.cli.node.Jackrabbit2Factory.isRepositoryXml;
+import static org.apache.jackrabbit.oak.upgrade.cli.parser.StoreArguments.SEGMENT_OLD_PREFIX;
 
 import org.apache.jackrabbit.oak.upgrade.cli.node.Jackrabbit2Factory;
 import org.apache.jackrabbit.oak.upgrade.cli.node.JdbcFactory;
 import org.apache.jackrabbit.oak.upgrade.cli.node.MongoFactory;
 import org.apache.jackrabbit.oak.upgrade.cli.node.SegmentFactory;
+import org.apache.jackrabbit.oak.upgrade.cli.node.SegmentNextFactory;
 import org.apache.jackrabbit.oak.upgrade.cli.node.StoreFactory;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.StoreArguments.MigrationDirection;
 
@@ -94,12 +97,24 @@ enum StoreType {
     SEGMENT {
         @Override
         public boolean matches(String argument) {
+            return argument.startsWith(SEGMENT_OLD_PREFIX);
+        }
+
+        @Override
+        public StoreFactory createFactory(String[] paths, MigrationDirection direction, MigrationCliArguments arguments) {
+            String path = removeStart(paths[0], SEGMENT_OLD_PREFIX);
+            return new StoreFactory(new SegmentFactory(path, arguments.getOptions().isMmap()));
+        }
+    },
+    SEGMENT_NEXT {
+        @Override
+        public boolean matches(String argument) {
             return true;
         }
 
         @Override
         public StoreFactory createFactory(String[] paths, MigrationDirection direction, MigrationCliArguments arguments) {
-            return new StoreFactory(new SegmentFactory(paths[0], arguments.getOptions().isMmap()));
+            return new StoreFactory(new SegmentNextFactory(paths[0], arguments.getOptions().isMmap()));
         }
     };
 

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/resources/upgrade_usage.txt
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/resources/upgrade_usage.txt?rev=1740787&r1=1740786&r2=1740787&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/resources/upgrade_usage.txt (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/resources/upgrade_usage.txt Mon Apr 25 09:37:23 2016
@@ -34,7 +34,8 @@ in-place. Old files will be moved to the
 
 An descriptor of the Oak node store. Possible options:
 
-  * path to the segment store
+  * path to the segment-next store
+  * segment-old:/path/to/classic/segment
   * jdbc:... (requires passing username and password as separate parameters)
   * mongodb://host:port/database
 

Added: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentNextTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentNextTest.java?rev=1740787&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentNextTest.java (added)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentNextTest.java Mon Apr 25 09:37:23 2016
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.upgrade.cli;
+
+import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer;
+import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNextNodeStoreContainer;
+import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer;
+
+public class SegmentToSegmentNextTest extends AbstractOak2OakTest {
+
+    private final NodeStoreContainer source;
+
+    private final NodeStoreContainer destination;
+
+    public SegmentToSegmentNextTest() {
+        source = new SegmentNodeStoreContainer();
+        destination = new SegmentNextNodeStoreContainer();
+    }
+
+    @Override
+    protected NodeStoreContainer getSourceContainer() {
+        return source;
+    }
+
+    @Override
+    protected NodeStoreContainer getDestinationContainer() {
+        return destination;
+    }
+
+    @Override
+    protected String[] getArgs() {
+        return new String[] { source.getDescription(), destination.getDescription() };
+    }
+}

Copied: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNextNodeStoreContainer.java (from r1740766, jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNextNodeStoreContainer.java?p2=jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNextNodeStoreContainer.java&p1=jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java&r1=1740766&r2=1740787&rev=1740787&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNextNodeStoreContainer.java Mon Apr 25 09:37:23 2016
@@ -16,17 +16,16 @@
  */
 package org.apache.jackrabbit.oak.upgrade.cli.container;
 
-import java.io.File;
-import java.io.IOException;
-
+import com.google.common.io.Files;
 import org.apache.commons.io.FileUtils;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
-import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 
-import com.google.common.io.Files;
+import java.io.File;
+import java.io.IOException;
 
-public class SegmentNodeStoreContainer implements NodeStoreContainer {
+public class SegmentNextNodeStoreContainer implements NodeStoreContainer {
 
     private final File directory;
 
@@ -34,16 +33,16 @@ public class SegmentNodeStoreContainer i
 
     private FileStore fs;
 
-    public SegmentNodeStoreContainer() {
+    public SegmentNextNodeStoreContainer() {
         this(Files.createTempDir());
     }
 
-    public SegmentNodeStoreContainer(File directory) {
+    public SegmentNextNodeStoreContainer(File directory) {
         this.blob = null;
         this.directory = directory;
     }
 
-    public SegmentNodeStoreContainer(BlobStoreContainer blob) {
+    public SegmentNextNodeStoreContainer(BlobStoreContainer blob) {
         this.blob = blob;
         this.directory = Files.createTempDir();
     }

Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java?rev=1740787&r1=1740786&r2=1740787&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java Mon Apr 25 09:37:23 2016
@@ -26,6 +26,8 @@ import org.apache.jackrabbit.oak.spi.sta
 
 import com.google.common.io.Files;
 
+import static org.apache.jackrabbit.oak.upgrade.cli.parser.StoreArguments.SEGMENT_OLD_PREFIX;
+
 public class SegmentNodeStoreContainer implements NodeStoreContainer {
 
     private final File directory;
@@ -73,7 +75,7 @@ public class SegmentNodeStoreContainer i
 
     @Override
     public String getDescription() {
-        return directory.getPath();
+        return SEGMENT_OLD_PREFIX + directory.getPath();
     }
 
 }