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) {