Author: bdelacretaz Date: Tue Feb 16 12:43:26 2010 New Revision: 910503 URL: http://svn.apache.org/viewvc?rev=910503&view=rev Log: SLING-1381 - BundleUpdateTask should stop retrying if RegisteredResource provides no InputStream
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.java sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java?rev=910503&r1=910502&r2=910503&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java (original) +++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java Tue Feb 16 12:43:26 2010 @@ -42,6 +42,11 @@ public boolean isExecutable(OsgiInstallerContext ctx) throws Exception { return true; } + + /** Can the task be retried after {...@link execute} failed? */ + public boolean canRetry(OsgiInstallerContext ctx) { + return true; + } @Override public final boolean equals(Object o) { Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.java?rev=910503&r1=910502&r2=910503&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.java (original) +++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.java Tue Feb 16 12:43:26 2010 @@ -352,15 +352,30 @@ synchronized (tasks) { t = tasks.first(); } - t.execute(ctx); - counter++; - synchronized (tasks) { - tasks.remove(t); + try { + t.execute(ctx); + removeTask(t); + counter++; + } catch(Exception e) { + if(!t.canRetry(ctx)) { + if(ctx.getLogService() != null) { + ctx.getLogService().log(LogService.LOG_INFO, + "Task cannot be retried, removing from list:" + t); + } + removeTask(t); + } + throw e; } } return counter; } + private void removeTask(OsgiInstallerTask t) { + synchronized (tasks) { + tasks.remove(t); + } + } + private void cleanupInstallableResources() throws IOException { // Cleanup resources that are not marked installable, // they have been processed by now Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java?rev=910503&r1=910502&r2=910503&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java (original) +++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java Tue Feb 16 12:43:26 2010 @@ -36,6 +36,7 @@ public class BundleUpdateTask extends OsgiInstallerTask { private final RegisteredResource resource; + private boolean canRetry = true; public BundleUpdateTask(RegisteredResource r) { this.resource = r; @@ -96,6 +97,7 @@ b.stop(); final InputStream is = resource.getInputStream(ctx.getBundleContext()); if(is == null) { + canRetry = false; throw new IllegalStateException( "RegisteredResource provides null InputStream, cannot update bundle: " + resource); @@ -108,6 +110,11 @@ } ctx.incrementCounter(OsgiInstaller.OSGI_TASKS_COUNTER); } + + @Override + public boolean canRetry(OsgiInstallerContext ctx) { + return canRetry; + } @Override public String getSortKey() {