You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2018/06/21 00:50:49 UTC

svn commit: r1833967 - in /jackrabbit/commons/filevault/trunk/vault-core/src: main/java/org/apache/jackrabbit/vault/packaging/ main/java/org/apache/jackrabbit/vault/packaging/impl/ test/java/org/apache/jackrabbit/vault/packaging/integration/ test/resou...

Author: tripod
Date: Thu Jun 21 00:50:49 2018
New Revision: 1833967

URL: http://svn.apache.org/viewvc?rev=1833967&view=rev
Log:
JCRVLT-289 InstallHooks: Propagate exceptions also for phase INSTALL (closes #26)

Added:
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHookFailingInPhaseInstalled.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/filter.xml
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/nodetypes.cnd
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/properties.xml
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/.content.xml
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/.content.xml
Modified:
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/InstallHook.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/ZipVaultPackage.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageInstall.java

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/InstallHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/InstallHook.java?rev=1833967&r1=1833966&r2=1833967&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/InstallHook.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/InstallHook.java Thu Jun 21 00:50:49 2018
@@ -31,9 +31,9 @@ import org.osgi.annotation.versioning.Co
  * and are executed in alphabetical sequence for each installation phase.
  * A hook can throw a {@link PackageException} to abort the current phase,
  * but this has currently only an effect in the
- * {@link InstallContext.Phase#PREPARE} phase. If a hook fails, the current
- * phase is aborted and all hooks (also the failing one) are called again with
- * the respective "fail" phase.
+ * {@link InstallContext.Phase#PREPARE} and {@link InstallContext.Phase#INSTALLED}
+ * phase. If a hook fails, the current phase is aborted and all hooks 
+ * (also the failing one) are called again with the respective "fail" phase.
  */
 @ConsumerType
 public interface InstallHook {

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java?rev=1833967&r1=1833966&r2=1833967&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java Thu Jun 21 00:50:49 2018
@@ -34,6 +34,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.fs.api.VaultInputSource;
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.packaging.InstallContext;
+import org.apache.jackrabbit.vault.packaging.InstallContext.Phase;
 import org.apache.jackrabbit.vault.packaging.InstallHook;
 import org.apache.jackrabbit.vault.packaging.InstallHookProcessor;
 import org.apache.jackrabbit.vault.packaging.PackageException;
@@ -147,9 +148,9 @@ public class InstallHookProcessorImpl im
             try {
                 hook.getHook().execute(context);
             } catch (PackageException e) {
-                // abort processing only for prepare phase
-                if (context.getPhase() == InstallContext.Phase.PREPARE) {
-                    log.warn("Hook " + hook.name +" threw package exception. Prepare aborted.", e);
+                // abort processing only for prepare and installed phase
+                if (context.getPhase() == InstallContext.Phase.PREPARE || context.getPhase() == InstallContext.Phase.INSTALLED) {
+                    log.warn("Hook " + hook.name +" threw package exception. {} aborted.", context.getPhase(), e);
                     return false;
                 }
                 log.warn("Hook " + hook.name +" threw package exception. Ignored", e);

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/ZipVaultPackage.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/ZipVaultPackage.java?rev=1833967&r1=1833966&r2=1833967&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/ZipVaultPackage.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/ZipVaultPackage.java Thu Jun 21 00:50:49 2018
@@ -227,7 +227,7 @@ public class ZipVaultPackage extends Pac
             if (!hooks.execute(ctx)) {
                 ctx.setPhase(InstallContext.Phase.PREPARE_FAILED);
                 hooks.execute(ctx);
-                throw new PackageException("Import aborted during prepare phase.");
+                throw new PackageException("Error while executing an install hook during prepare phase.");
             }
             try {
                 importer.run(archive, ctx.getSession(), ctx.getImportRootPath());
@@ -238,7 +238,11 @@ public class ZipVaultPackage extends Pac
                 throw new PackageException(e);
             }
             ctx.setPhase(InstallContext.Phase.INSTALLED);
-            hooks.execute(ctx);
+            if (!hooks.execute(ctx)) {
+                ctx.setPhase(InstallContext.Phase.INSTALL_FAILED);
+                hooks.execute(ctx);
+                throw new PackageException("Error while executing an install hook during installed phase.");
+            }
             if (importer.hasErrors() && ctx.getOptions().isStrict()) {
                 ctx.setPhase(InstallContext.Phase.INSTALL_FAILED);
                 hooks.execute(ctx);

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHookFailingInPhaseInstalled.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHookFailingInPhaseInstalled.java?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHookFailingInPhaseInstalled.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHookFailingInPhaseInstalled.java Thu Jun 21 00:50:49 2018
@@ -0,0 +1,35 @@
+/*
+ * 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.vault.packaging.integration;
+
+import org.apache.jackrabbit.vault.packaging.InstallContext;
+import org.apache.jackrabbit.vault.packaging.InstallContext.Phase;
+import org.apache.jackrabbit.vault.packaging.InstallHook;
+import org.apache.jackrabbit.vault.packaging.PackageException;
+
+/**
+ * Test hook which is used in an IT
+ */
+public class ExternalTestHookFailingInPhaseInstalled implements InstallHook {
+
+    public void execute(InstallContext context) throws PackageException {
+        if (context.getPhase() == Phase.INSTALLED) {
+            throw new PackageException("Some explicitly triggered exception!");
+        }
+    }
+}
\ No newline at end of file

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageInstall.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageInstall.java?rev=1833967&r1=1833966&r2=1833967&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageInstall.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageInstall.java Thu Jun 21 00:50:49 2018
@@ -276,6 +276,21 @@ public class TestPackageInstall extends
     }
 
     /**
+     * Installs a package with an external hook which throws an exception in the INSTALLED phase
+     */
+    @Test
+    public void testExternalHookFailsInInstalledPhase() throws RepositoryException, IOException, PackageException {
+        try {
+            extractVaultPackage("testpackages/external_hook_failing_in_installed_phase.zip");
+            fail("Package install should fail due to installhook exception.");
+        } catch (PackageException e) {
+            // ok
+        }
+        // although there was some exception, this has only been triggered after the package has been extracted!
+        assertNodeExists("/testroot");
+    }
+
+    /**
      * Installs a package with no properties
      */
     @Test

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/filter.xml
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/filter.xml?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/filter.xml (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/filter.xml Thu Jun 21 00:50:49 2018
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workspaceFilter version="1.0">
+    <filter root="/testroot" mode="merge"/>
+</workspaceFilter>

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/nodetypes.cnd
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/nodetypes.cnd?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/nodetypes.cnd (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/nodetypes.cnd Thu Jun 21 00:50:49 2018
@@ -0,0 +1,8 @@
+<'sling'='http://sling.apache.org/jcr/sling/1.0'>
+<'nt'='http://www.jcp.org/jcr/nt/1.0'>
+
+[sling:Folder] > nt:folder
+  - * (undefined)
+  - * (undefined) multiple
+  + * (nt:base) = sling:Folder version
+

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/properties.xml
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/properties.xml?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/properties.xml (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/properties.xml Thu Jun 21 00:50:49 2018
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+<comment>FileVault Package Properties</comment>
+<entry key="createdBy">admin</entry>
+<entry key="name">tmp</entry>
+<entry key="lastModified">2011-06-07T14:31:49.179-07:00</entry>
+<entry key="lastModifiedBy">admin</entry>
+<entry key="created">2011-06-07T14:31:49.418-07:00</entry>
+<entry key="buildCount">1</entry>
+<entry key="version"/>
+<entry key="dependencies"/>
+<entry key="packageFormatVersion">2</entry>
+<entry key="description"/>
+<entry key="group">my_packages</entry>
+<entry key="lastWrapped">2011-06-07T14:31:49.179-07:00</entry>
+<entry key="lastWrappedBy">admin</entry>
+<entry key="path">/etc/packages/my_packages/tmp</entry>
+<entry key="installhook.test1.class">org.apache.jackrabbit.vault.packaging.integration.ExternalTestHookFailingInPhaseInstalled</entry>
+</properties>

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/.content.xml
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/.content.xml?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/.content.xml (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/.content.xml Thu Jun 21 00:50:49 2018
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
+    jcr:mixinTypes="[rep:AccessControllable]"
+    jcr:primaryType="rep:root"
+    sling:resourceType="sling:redirect"
+    sling:target="/index.html">
+    <rep:policy/>
+    <jcr:system/>
+    <var/>
+    <libs/>
+    <etc/>
+    <apps/>
+    <content/>
+    <tmp/>
+    <home/>
+    <testroot/>
+</jcr:root>

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/.content.xml
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/.content.xml?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/.content.xml (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/.content.xml Thu Jun 21 00:50:49 2018
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0"
+    jcr:primaryType="nt:folder">
+</jcr:root>