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/15 10:44:03 UTC

svn commit: r1739256 - in /jackrabbit/oak/trunk/oak-upgrade/src: main/java/org/apache/jackrabbit/oak/upgrade/ main/java/org/apache/jackrabbit/oak/upgrade/cli/ main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/ test/java/org/apache/jackrabbit/oak/u...

Author: tomekr
Date: Fri Apr 15 08:44:03 2016
New Revision: 1739256

URL: http://svn.apache.org/viewvc?rev=1739256&view=rev
Log:
OAK-4175: Allow to skip the repository init in oak-upgrade

Modified:
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java
    jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositorySidegradeTest.java
    jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositoryUpgradeTest.java

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java?rev=1739256&r1=1739255&r2=1739256&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java Fri Apr 15 08:44:03 2016
@@ -83,6 +83,8 @@ public class RepositorySidegrade {
 
     private boolean skipLongNames = true;
 
+    private boolean skipInitialization = false;
+
     private List<CommitHook> customCommitHooks = null;
 
     VersionCopyConfiguration versionCopyConfiguration = new VersionCopyConfiguration();
@@ -195,6 +197,16 @@ public class RepositorySidegrade {
     }
 
     /**
+     * Skip the new repository initialization. Only copy content passed in the
+     * {@link #includePaths}.
+     *
+     * @param skipInitialization
+     */
+    public void setSkipInitialization(boolean skipInitialization) {
+        this.skipInitialization = skipInitialization;
+    }
+
+    /**
      * Same as {@link #copy(RepositoryInitializer)}, but with no custom initializer. 
      */
     public void copy() throws RepositoryException {
@@ -219,9 +231,13 @@ public class RepositorySidegrade {
         try {
             NodeBuilder targetRoot = target.getRoot().builder();
 
-            new InitialContent().initialize(targetRoot);
-            if (initializer != null) {
-                initializer.initialize(targetRoot);
+            if (skipInitialization) {
+                LOG.info("Skipping the repository initialization");
+            } else {
+                new InitialContent().initialize(targetRoot);
+                if (initializer != null) {
+                    initializer.initialize(targetRoot);
+                }
             }
 
             final NodeState reportingSourceRoot = ReportingNodeState.wrap(source.getRoot(), new LoggingReporter(LOG, "Copying", 10000, -1));

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java?rev=1739256&r1=1739255&r2=1739256&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java Fri Apr 15 08:44:03 2016
@@ -180,6 +180,8 @@ public class RepositoryUpgrade {
 
     private boolean skipLongNames = true;
 
+    private boolean skipInitialization = false;
+
     VersionCopyConfiguration versionCopyConfiguration = new VersionCopyConfiguration();
 
     /**
@@ -258,6 +260,14 @@ public class RepositoryUpgrade {
         this.skipLongNames = skipLongNames;
     }
 
+    public boolean isSkipInitialization() {
+        return skipInitialization;
+    }
+
+    public void setSkipInitialization(boolean skipInitialization) {
+        this.skipInitialization = skipInitialization;
+    }
+
     /**
      * Returns the list of custom CommitHooks to be applied before the final
      * type validation, reference and indexing hooks.
@@ -369,23 +379,27 @@ public class RepositoryUpgrade {
             SecurityProviderImpl security = new SecurityProviderImpl(
                     mapSecurityConfig(config.getSecurityConfig()));
 
-            // init target repository first
-            logger.info("Initializing initial repository content from {}", config.getHomeDir());
-            new InitialContent().initialize(targetBuilder);
-            if (initializer != null) {
-                initializer.initialize(targetBuilder);
-            }
-            logger.debug("InitialContent completed from {}", config.getHomeDir());
+            if (skipInitialization) {
+                logger.info("Skipping the repository initialization");
+            } else {
+                // init target repository first
+                logger.info("Initializing initial repository content from {}", config.getHomeDir());
+                new InitialContent().initialize(targetBuilder);
+                if (initializer != null) {
+                    initializer.initialize(targetBuilder);
+                }
+                logger.debug("InitialContent completed from {}", config.getHomeDir());
 
-            for (SecurityConfiguration sc : security.getConfigurations()) {
-                RepositoryInitializer ri = sc.getRepositoryInitializer();
-                ri.initialize(targetBuilder);
-                logger.debug("Repository initializer '" + ri.getClass().getName() + "' completed", config.getHomeDir());
-            }
-            for (SecurityConfiguration sc : security.getConfigurations()) {
-                WorkspaceInitializer wi = sc.getWorkspaceInitializer();
-                wi.initialize(targetBuilder, workspaceName);
-                logger.debug("Workspace initializer '" + wi.getClass().getName() + "' completed", config.getHomeDir());
+                for (SecurityConfiguration sc : security.getConfigurations()) {
+                    RepositoryInitializer ri = sc.getRepositoryInitializer();
+                    ri.initialize(targetBuilder);
+                    logger.debug("Repository initializer '" + ri.getClass().getName() + "' completed", config.getHomeDir());
+                }
+                for (SecurityConfiguration sc : security.getConfigurations()) {
+                    WorkspaceInitializer wi = sc.getWorkspaceInitializer();
+                    wi.initialize(targetBuilder, workspaceName);
+                    logger.debug("Workspace initializer '" + wi.getClass().getName() + "' completed", config.getHomeDir());
+                }
             }
 
             HashBiMap<String, String> uriToPrefix = HashBiMap.create();
@@ -393,32 +407,36 @@ public class RepositoryUpgrade {
             copyNamespaces(targetBuilder, uriToPrefix);
             logger.debug("Namespace registration completed.");
 
-            logger.info("Copying registered node types");
-            NodeTypeManager ntMgr = new ReadWriteNodeTypeManager() {
-                @Override
-                protected Tree getTypes() {
-                    return upgradeRoot.getTree(NODE_TYPES_PATH);
-                }
-
-                @Nonnull
-                @Override
-                protected Root getWriteRoot() {
-                    return upgradeRoot;
-                }
-            };
-            copyNodeTypes(ntMgr, new ValueFactoryImpl(upgradeRoot, NamePathMapper.DEFAULT));
-            logger.debug("Node type registration completed.");
-
-            // migrate privileges
-            logger.info("Copying registered privileges");
-            PrivilegeConfiguration privilegeConfiguration = security.getConfiguration(PrivilegeConfiguration.class);
-            copyCustomPrivileges(privilegeConfiguration.getPrivilegeManager(upgradeRoot, NamePathMapper.DEFAULT));
-            logger.debug("Privilege registration completed.");
-
-            // Triggers compilation of type information, which we need for
-            // the type predicates used by the bulk  copy operations below.
-            new TypeEditorProvider(false).getRootEditor(
-                    targetBuilder.getBaseState(), targetBuilder.getNodeState(), targetBuilder, null);
+            if (skipInitialization) {
+                logger.info("Skipping registering node types and privileges");
+            } else {
+                logger.info("Copying registered node types");
+                NodeTypeManager ntMgr = new ReadWriteNodeTypeManager() {
+                    @Override
+                    protected Tree getTypes() {
+                        return upgradeRoot.getTree(NODE_TYPES_PATH);
+                    }
+
+                    @Nonnull
+                    @Override
+                    protected Root getWriteRoot() {
+                        return upgradeRoot;
+                    }
+                };
+                copyNodeTypes(ntMgr, new ValueFactoryImpl(upgradeRoot, NamePathMapper.DEFAULT));
+                logger.debug("Node type registration completed.");
+
+                // migrate privileges
+                logger.info("Copying registered privileges");
+                PrivilegeConfiguration privilegeConfiguration = security.getConfiguration(PrivilegeConfiguration.class);
+                copyCustomPrivileges(privilegeConfiguration.getPrivilegeManager(upgradeRoot, NamePathMapper.DEFAULT));
+                logger.debug("Privilege registration completed.");
+
+                // Triggers compilation of type information, which we need for
+                // the type predicates used by the bulk  copy operations below.
+                new TypeEditorProvider(false).getRootEditor(
+                        targetBuilder.getBaseState(), targetBuilder.getNodeState(), targetBuilder, null);
+            }
 
             final NodeState reportingSourceRoot = ReportingNodeState.wrap(
                     JackrabbitNodeState.createRootNodeState(

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java?rev=1739256&r1=1739255&r2=1739256&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java Fri Apr 15 08:44:03 2016
@@ -93,6 +93,7 @@ public class MigrationFactory {
         upgrade.setSkipLongNames(stores.isSkipLongNames());
         upgrade.setSkipOnError(!options.isFailOnError());
         upgrade.setEarlyShutdown(options.isEarlyShutdown());
+        upgrade.setSkipInitialization(options.isSkipInitialization());
         ServiceLoader<CommitHook> loader = ServiceLoader.load(CommitHook.class);
         Iterator<CommitHook> iterator = loader.iterator();
         ImmutableList.Builder<CommitHook> builder = ImmutableList.<CommitHook> builder().addAll(iterator);
@@ -114,6 +115,7 @@ public class MigrationFactory {
             sidegrade.setMerges(options.getMergePaths());
         }
         sidegrade.setSkipLongNames(stores.isSkipLongNames());
+        sidegrade.setSkipInitialization(options.isSkipInitialization());
         return sidegrade;
     }
 

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java?rev=1739256&r1=1739255&r2=1739256&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java Fri Apr 15 08:44:03 2016
@@ -50,6 +50,8 @@ public class MigrationOptions {
 
     private final boolean earlyShutdown;
 
+    private final boolean skipInitialization;
+
     public MigrationOptions(MigrationCliArguments args) {
         this.copyBinariesByReference = !args.hasOption(OptionParserFactory.COPY_BINARIES);
         this.mmap = args.hasOption(OptionParserFactory.MMAP);
@@ -76,6 +78,7 @@ public class MigrationOptions {
         this.mergePaths = split(args.getOption(OptionParserFactory.MERGE_PATHS));
         this.failOnError = args.hasOption(OptionParserFactory.FAIL_ON_ERROR);
         this.earlyShutdown = args.hasOption(OptionParserFactory.EARLY_SHUTDOWN);
+        this.skipInitialization = args.hasOption(OptionParserFactory.SKIP_INIT);
         logOptions();
     }
 
@@ -119,6 +122,10 @@ public class MigrationOptions {
         return earlyShutdown;
     }
 
+    public boolean isSkipInitialization() {
+        return skipInitialization;
+    }
+
     private void logOptions() {
         if (copyBinariesByReference) {
             log.info("DataStore needs to be shared with new repository");
@@ -158,6 +165,10 @@ public class MigrationOptions {
             log.info("Source repository would be shutdown post copying of nodes");
         }
 
+        if (skipInitialization) {
+            log.info("The repository initialization will be skipped");
+        }
+
         log.info("Cache size: {} MB", cacheSizeInMB);
 
     }

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java?rev=1739256&r1=1739255&r2=1739256&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java Fri Apr 15 08:44:03 2016
@@ -68,6 +68,8 @@ public class OptionParserFactory {
 
     public static final String MERGE_PATHS = "merge-paths";
 
+    public static final String SKIP_INIT = "skip-init";
+
     public static OptionParser create() {
         OptionParser op = new OptionParser();
         addUsageOptions(op);
@@ -132,5 +134,6 @@ public class OptionParserFactory {
         op.accepts(EARLY_SHUTDOWN,
                 "Shutdown the source repository after nodes are copied and before the commit hooks are applied");
         op.accepts(CACHE_SIZE, "Cache size in MB").withRequiredArg().ofType(Integer.class).defaultsTo(256);
+        op.accepts(SKIP_INIT, "Skip the repository initialization; only copy data");
     }
 }

Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositorySidegradeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositorySidegradeTest.java?rev=1739256&r1=1739255&r2=1739256&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositorySidegradeTest.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositorySidegradeTest.java Fri Apr 15 08:44:03 2016
@@ -57,7 +57,7 @@ public class RepeatedRepositorySidegrade
             }
 
             final NodeStore target = getTargetNodeStore();
-            doUpgradeRepository(sourceDir, target);
+            doUpgradeRepository(sourceDir, target, false);
             fileStore.flush();
 
             fileStore = FileStore.builder(sourceDir).build();
@@ -73,7 +73,7 @@ public class RepeatedRepositorySidegrade
                 fileStore.close();
             }
 
-            doUpgradeRepository(sourceDir, target);
+            doUpgradeRepository(sourceDir, target, true);
             fileStore.flush();
 
             upgradeComplete = true;
@@ -81,11 +81,12 @@ public class RepeatedRepositorySidegrade
     }
 
     @Override
-    protected void doUpgradeRepository(File source, NodeStore target) throws RepositoryException, IOException {
+    protected void doUpgradeRepository(File source, NodeStore target, boolean skipInit) throws RepositoryException, IOException {
         FileStore fileStore = FileStore.builder(source).build();
         SegmentNodeStore segmentNodeStore = SegmentNodeStore.builder(fileStore).build();
         try {
             final RepositorySidegrade repositoryUpgrade = new RepositorySidegrade(segmentNodeStore, target);
+            repositoryUpgrade.setSkipInitialization(skipInit);
             repositoryUpgrade.copy(new RepositoryInitializer() {
                 @Override
                 public void initialize(@Nonnull NodeBuilder builder) {

Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositoryUpgradeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositoryUpgradeTest.java?rev=1739256&r1=1739255&r2=1739256&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositoryUpgradeTest.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositoryUpgradeTest.java Fri Apr 15 08:44:03 2016
@@ -97,7 +97,7 @@ public class RepeatedRepositoryUpgradeTe
             }
 
             final NodeStore target = getTargetNodeStore();
-            doUpgradeRepository(sourceDir, target);
+            doUpgradeRepository(sourceDir, target, false);
             fileStore.flush();
 
             // re-create source repo
@@ -111,19 +111,19 @@ public class RepeatedRepositoryUpgradeTe
                 source.shutdown();
             }
 
-            doUpgradeRepository(sourceDir, target);
+            doUpgradeRepository(sourceDir, target, true);
             fileStore.flush();
 
             upgradeComplete = true;
         }
     }
 
-    @Override
-    protected void doUpgradeRepository(File source, NodeStore target) throws RepositoryException, IOException {
+    protected void doUpgradeRepository(File source, NodeStore target, boolean skipInit) throws RepositoryException, IOException {
         final RepositoryConfig config = RepositoryConfig.create(source);
         final RepositoryContext context = RepositoryContext.create(config);
         try {
             final RepositoryUpgrade repositoryUpgrade = new RepositoryUpgrade(context, target);
+            repositoryUpgrade.setSkipInitialization(skipInit);
             repositoryUpgrade.copy(new RepositoryInitializer() {
                 @Override
                 public void initialize(@Nonnull NodeBuilder builder) {