You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by tm...@apache.org on 2017/03/02 10:39:52 UTC

svn commit: r1785100 - in /sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl: DistributionPackageUtils.java ResourceDistributionPackageCleanup.java

Author: tmaret
Date: Thu Mar  2 10:39:52 2017
New Revision: 1785100

URL: http://svn.apache.org/viewvc?rev=1785100&view=rev
Log:
SLING-6589 - DistributionPackageUtils#disposable should handle hanging packages

Modified:
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageCleanup.java

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java?rev=1785100&r1=1785099&r2=1785100&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java Thu Mar  2 10:39:52 2017
@@ -318,8 +318,16 @@ public class DistributionPackageUtils {
 
     public static boolean disposable(@Nonnull Resource resource) throws RepositoryException {
         Node parent = resource.adaptTo(Node.class);
-        Node refs = parent.getNode("refs");
-        return !refs.hasNodes() && refs.hasProperty("released");
+        if (parent.hasNode("refs")) {
+            Node refs = parent.getNode("refs");
+            return !refs.hasNodes() && refs.hasProperty("released");
+        } else {
+            // Packages without refs nodes are likely the result of the concurrency
+            // issue fixed in SLING-6503. Yet, we consider them non disposable.
+            log.warn("Package {} has no refs resource. Consider removing it explicitly.", resource.getPath());
+            return false;
+        }
+
     }
 
     public static void release(Resource resource, @Nonnull String[] holderNames) throws RepositoryException {

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageCleanup.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageCleanup.java?rev=1785100&r1=1785099&r2=1785100&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageCleanup.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageCleanup.java Thu Mar  2 10:39:52 2017
@@ -61,12 +61,16 @@ public class ResourceDistributionPackage
             for (Iterator<ResourceDistributionPackage> pkgs = packageBuilder.getPackages(serviceResolver) ; pkgs.hasNext() ; total++) {
                 ResourceDistributionPackage pkg = pkgs.next();
                 if (pkg.disposable()) {
-                    log.trace("Delete package {}", pkg.getId());
+                    log.debug("Delete package {}", pkg.getId());
                     deleted++;
                     pkg.delete(false);
+                } else {
+                    log.debug("package {} is not disposable", pkg.getId());
                 }
             }
-            serviceResolver.commit();
+            if (serviceResolver.hasChanges()) {
+                serviceResolver.commit();
+            }
             log.debug("Cleaned up {}/{} {} packages",
                     new Object[]{deleted, total, packageBuilder.getType()});
         } catch (LoginException e) {