Author: cziegeler
Date: Wed Aug 11 13:41:34 2010
New Revision: 984405

URL: http://svn.apache.org/viewvc?rev=984405&view=rev
Log:
SLING-1560 : Do counter handling internally, tasks should not throw an exception

Modified:
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstallerStatistics.java
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java
    
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/BundleInstallTask.java
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigInstallTask.java
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigRemoveTask.java
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstallerStatistics.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstallerStatistics.java?rev=984405&r1=984404&r2=984405&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstallerStatistics.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstallerStatistics.java
 Wed Aug 11 13:41:34 2010
@@ -30,7 +30,7 @@ public interface OsgiInstallerStatistics
        long [] getCounters();
 
        /** Counter index: number of OSGi tasks executed */
-       int OSGI_TASKS_COUNTER = 0;
+       int OSGI_TASKS_COUNTER = 0;
 
     /** Counter index: number of installer cycles */
     int INSTALLER_CYCLES_COUNTER = 1;

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java?rev=984405&r1=984404&r2=984405&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java
 Wed Aug 11 13:41:34 2010
@@ -34,8 +34,6 @@ public interface OsgiInstallerContext {
      */
     BundleContext getBundleContext();
 
-    void incrementCounter(int index);
-    void setCounter(int index, long value);
     /**
      * Finds the bundle with given symbolic name in our BundleContext.
      */

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java?rev=984405&r1=984404&r2=984405&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java
 Wed Aug 11 13:41:34 2010
@@ -40,7 +40,6 @@ public class OsgiInstallerImpl implement
        /** The actual worker thread. */
     private final OsgiInstallerThread installerThread;
 
-    private long [] counters = new long[COUNTERS_SIZE];
     private PersistentBundleInfo bundleDigestsStorage;
 
     /**
@@ -110,13 +109,6 @@ public class OsgiInstallerImpl implement
        }
 
        /**
-        * @see 
org.apache.sling.osgi.installer.OsgiInstallerStatistics#getCounters()
-        */
-       public long [] getCounters() {
-               return counters;
-       }
-
-       /**
         * @see 
org.apache.sling.osgi.installer.OsgiInstaller#addResource(java.lang.String, 
org.apache.sling.osgi.installer.InstallableResource)
         */
        public void addResource(final String scheme, final InstallableResource 
r) {
@@ -138,17 +130,10 @@ public class OsgiInstallerImpl implement
        }
 
        /**
-        * @see 
org.apache.sling.osgi.installer.impl.OsgiInstallerContext#incrementCounter(int)
+        * @see 
org.apache.sling.osgi.installer.OsgiInstallerStatistics#getCounters()
         */
-       public void incrementCounter(int index) {
-           counters[index]++;
-       }
-
-    /**
-     * @see 
org.apache.sling.osgi.installer.impl.OsgiInstallerContext#setCounter(int, long)
-     */
-    public void setCounter(int index, long value) {
-        counters[index] = value;
+       public long[] getCounters() {
+        return this.installerThread.getCounters();
     }
 
     /**

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=984405&r1=984404&r2=984405&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
 Wed Aug 11 13:41:34 2010
@@ -22,7 +22,12 @@ package org.apache.sling.osgi.installer.
 /** Base class for tasks that can be executed by the {...@link 
OsgiInstallerImpl} */
 public abstract class OsgiInstallerTask implements 
Comparable<OsgiInstallerTask> {
 
-    public abstract void execute(OsgiInstallerContext ctx) throws Exception;
+    public enum Result {
+        SUCCESS,
+        NOTHING
+    };
+
+    public abstract Result execute(OsgiInstallerContext ctx);
 
        protected void logExecution() {
            Logger.logInfo("OsgiInstallerTask: executing  " + this);
@@ -41,11 +46,6 @@ public abstract class OsgiInstallerTask 
            return true;
        }
 
-       /** Can the task be retried after {...@link 
#execute(OsgiInstallerContext)} failed? */
-       public boolean canRetry(OsgiInstallerContext ctx) {
-               return true;
-       }
-
        @Override
        public final boolean equals(Object o) {
                if(o instanceof OsgiInstallerTask) {

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=984405&r1=984404&r2=984405&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
 Wed Aug 11 13:41:34 2010
@@ -46,7 +46,7 @@ import org.osgi.framework.BundleListener
  *  that are updated or removed during a cycle, and merged with
  *  the main list at the end of the cycle.
  */
-class OsgiInstallerThread extends Thread implements BundleListener {
+class OsgiInstallerThread extends Thread implements BundleListener, 
OsgiInstallerStatistics {
 
     private final OsgiInstallerContext ctx;
     private final List<RegisteredResource> newResources = new 
LinkedList<RegisteredResource>();
@@ -65,6 +65,8 @@ class OsgiInstallerThread extends Thread
     private final BundleTaskCreator bundleTaskCreator;
     private final ConfigTaskCreator configTaskCreator;
 
+    private long [] counters = new long[COUNTERS_SIZE];
+
     OsgiInstallerThread(final OsgiInstallerContext ctx) {
         this.configTaskCreator = new ConfigTaskCreator(ctx.getBundleContext());
         this.bundleTaskCreator = new BundleTaskCreator(ctx.getBundleContext());
@@ -85,6 +87,21 @@ class OsgiInstallerThread extends Thread
         }
     }
 
+    /**
+     * @see 
org.apache.sling.osgi.installer.OsgiInstallerStatistics#getCounters()
+     */
+    public long [] getCounters() {
+        return counters;
+    }
+
+    public void incrementCounter(int index) {
+        counters[index]++;
+    }
+
+    public void setCounter(int index, long value) {
+        counters[index] = value;
+    }
+
     @Override
     public void run() {
         ctx.getBundleContext().addBundleListener(this);
@@ -100,13 +117,15 @@ class OsgiInstallerThread extends Thread
                    cleanupInstallableResources();
                    Logger.logDebug("No tasks to process, going idle");
 
-                   
ctx.setCounter(OsgiInstallerStatistics.WORKER_THREAD_IS_IDLE_COUNTER, 1);
-                    
ctx.incrementCounter(OsgiInstallerStatistics.WORKER_THREAD_BECOMES_IDLE_COUNTER);
+                   
this.setCounter(OsgiInstallerStatistics.WORKER_THREAD_IS_IDLE_COUNTER, 1);
+                    
this.incrementCounter(OsgiInstallerStatistics.WORKER_THREAD_BECOMES_IDLE_COUNTER);
                    synchronized (newResources) {
-                        newResources.wait();
+                       try {
+                           newResources.wait();
+                       } catch (InterruptedException ignore) {}
                     }
                    Logger.logDebug("Notified of new resources, back to work");
-                    
ctx.setCounter(OsgiInstallerStatistics.WORKER_THREAD_IS_IDLE_COUNTER, 0);
+                    
this.setCounter(OsgiInstallerStatistics.WORKER_THREAD_IS_IDLE_COUNTER, 0);
                    continue;
                }
 
@@ -309,34 +328,24 @@ class OsgiInstallerThread extends Thread
         }
     }
 
-    private int executeTasks() throws Exception {
+    private int executeTasks() {
         int counter = 0;
         while(!tasks.isEmpty()) {
             OsgiInstallerTask t = null;
             synchronized (tasks) {
                 t = tasks.first();
+                tasks.remove(t);
             }
-            try {
-                t.execute(ctx);
-                removeTask(t);
-                counter++;
-            } catch(Exception e) {
-               if(!t.canRetry(ctx)) {
-                   Logger.logInfo("Task cannot be retried, removing from 
list:" + t);
-                    removeTask(t);
-               }
-               throw e;
+            final OsgiInstallerTask.Result result = t.execute(ctx);
+            switch (result) {
+                case SUCCESS: 
this.incrementCounter(OsgiInstallerStatistics.OSGI_TASKS_COUNTER);
+                              break;
             }
+            counter++;
         }
         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
@@ -367,9 +376,9 @@ class OsgiInstallerThread extends Thread
             registeredResources.remove(key);
         }
 
-        ctx.setCounter(OsgiInstallerStatistics.REGISTERED_RESOURCES_COUNTER, 
resourceCount);
-        ctx.setCounter(OsgiInstallerStatistics.REGISTERED_GROUPS_COUNTER, 
registeredResources.size());
-        ctx.incrementCounter(OsgiInstallerStatistics.INSTALLER_CYCLES_COUNTER);
+        this.setCounter(OsgiInstallerStatistics.REGISTERED_RESOURCES_COUNTER, 
resourceCount);
+        this.setCounter(OsgiInstallerStatistics.REGISTERED_GROUPS_COUNTER, 
registeredResources.size());
+        
this.incrementCounter(OsgiInstallerStatistics.INSTALLER_CYCLES_COUNTER);
 
         // List of resources might have changed
         persistentList.save();

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java?rev=984405&r1=984404&r2=984405&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java
 Wed Aug 11 13:41:34 2010
@@ -18,7 +18,6 @@
  */
 package org.apache.sling.osgi.installer.impl.tasks;
 
-import org.apache.sling.osgi.installer.OsgiInstallerStatistics;
 import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
 import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
 import org.apache.sling.osgi.installer.impl.RegisteredResource;
@@ -43,13 +42,22 @@ public class BundleInstallTask extends O
        return getClass().getSimpleName() + ": " + resource;
     }
 
-    public void execute(OsgiInstallerContext ctx) throws Exception {
-        final Bundle b = 
ctx.getBundleContext().installBundle(resource.getURL(), 
resource.getInputStream());
-        final Version newVersion = new 
Version((String)resource.getAttributes().get(Constants.BUNDLE_VERSION));
-        ctx.saveInstalledBundleInfo(b, resource.getDigest(), 
newVersion.toString());
-        logExecution();
-        ctx.addTaskToCurrentCycle(new BundleStartTask(b.getBundleId()));
-        ctx.incrementCounter(OsgiInstallerStatistics.OSGI_TASKS_COUNTER);
+    /**
+     * @see 
org.apache.sling.osgi.installer.impl.OsgiInstallerTask#execute(org.apache.sling.osgi.installer.impl.OsgiInstallerContext)
+     */
+    public Result execute(OsgiInstallerContext ctx) {
+        try {
+            final Bundle b = 
ctx.getBundleContext().installBundle(resource.getURL(), 
resource.getInputStream());
+            final Version newVersion = new 
Version((String)resource.getAttributes().get(Constants.BUNDLE_VERSION));
+            ctx.saveInstalledBundleInfo(b, resource.getDigest(), 
newVersion.toString());
+            logExecution();
+            ctx.addTaskToCurrentCycle(new BundleStartTask(b.getBundleId()));
+            return Result.SUCCESS;
+        } catch (Exception ex) {
+            // if something goes wrong we simply try it again
+            ctx.addTaskToCurrentCycle(this);
+            return Result.NOTHING;
+        }
     }
 
     @Override

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java?rev=984405&r1=984404&r2=984405&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java
 Wed Aug 11 13:41:34 2010
@@ -18,11 +18,11 @@
  */
 package org.apache.sling.osgi.installer.impl.tasks;
 
-import org.apache.sling.osgi.installer.OsgiInstallerStatistics;
 import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
 import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
 import org.apache.sling.osgi.installer.impl.RegisteredResource;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
 import org.osgi.util.tracker.ServiceTracker;
 
@@ -50,7 +50,7 @@ public class BundleRemoveTask extends Os
     }
 
     @Override
-    public void execute(OsgiInstallerContext ctx) throws Exception {
+    public Result execute(OsgiInstallerContext ctx) {
         logExecution();
         final String symbolicName = 
(String)resource.getAttributes().get(Constants.BUNDLE_SYMBOLICNAME);
         final Bundle b = ctx.getMatchingBundle(symbolicName);
@@ -58,12 +58,17 @@ public class BundleRemoveTask extends Os
             throw new IllegalStateException("Bundle to remove (" + 
symbolicName + ") not found");
         }
         final int state = b.getState();
-        if(state == Bundle.ACTIVE || state == Bundle.STARTING) {
-               b.stop();
+        try {
+            if (state == Bundle.ACTIVE || state == Bundle.STARTING) {
+               b.stop();
+            }
+            b.uninstall();
+        } catch (BundleException be) {
+            ctx.addTaskToNextCycle(this);
+            return Result.NOTHING;
         }
-        b.uninstall();
         ctx.addTaskToCurrentCycle(new 
SynchronousRefreshPackagesTask(this.packageAdminTracker));
-        ctx.incrementCounter(OsgiInstallerStatistics.OSGI_TASKS_COUNTER);
+        return Result.SUCCESS;
     }
 
     @Override

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java?rev=984405&r1=984404&r2=984405&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
 Wed Aug 11 13:41:34 2010
@@ -20,7 +20,6 @@ package org.apache.sling.osgi.installer.
 
 import java.text.DecimalFormat;
 
-import org.apache.sling.osgi.installer.OsgiInstallerStatistics;
 import org.apache.sling.osgi.installer.impl.Activator;
 import org.apache.sling.osgi.installer.impl.Logger;
 import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
@@ -57,18 +56,18 @@ public class BundleStartTask extends Osg
                return getClass().getSimpleName() + ": bundle " + bundleId;
        }
 
-       public void execute(OsgiInstallerContext ctx) throws Exception {
+       public Result execute(OsgiInstallerContext ctx) {
                final Bundle b = ctx.getBundleContext().getBundle(bundleId);
                boolean needToRetry = false;
 
         if(bundleId == 0) {
             Logger.logDebug("Bundle 0 is the framework bundle, ignoring 
request to start it");
-            return;
+            return Result.NOTHING;
         }
 
                if(b == null) {
                    Logger.logInfo("Cannot start bundle, id not found:" + 
bundleId);
-                       return;
+                       return Result.NOTHING;
                }
 
                try {
@@ -103,7 +102,7 @@ public class BundleStartTask extends Osg
                }
                }
                retryCount++;
-               
ctx.incrementCounter(OsgiInstallerStatistics.OSGI_TASKS_COUNTER);
+        return Result.SUCCESS;
        }
 
        /** Do not execute this task if waiting for events */

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=984405&r1=984404&r2=984405&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
 Wed Aug 11 13:41:34 2010
@@ -20,7 +20,6 @@ package org.apache.sling.osgi.installer.
 
 import java.io.InputStream;
 
-import org.apache.sling.osgi.installer.OsgiInstallerStatistics;
 import org.apache.sling.osgi.installer.impl.Logger;
 import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
 import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
@@ -59,7 +58,7 @@ public class BundleUpdateTask extends Os
     }
 
     @Override
-    public void execute(OsgiInstallerContext ctx) throws Exception {
+    public Result execute(OsgiInstallerContext ctx) {
         final String symbolicName = 
(String)resource.getAttributes().get(Constants.BUNDLE_SYMBOLICNAME);
         final Bundle b = ctx.getMatchingBundle(symbolicName);
         if(b == null) {
@@ -73,44 +72,48 @@ public class BundleUpdateTask extends Os
        snapshot = ctx.isSnapshot(newVersion);
        if(currentVersion.equals(newVersion) && !snapshot) {
            Logger.logDebug("Same version is already installed, and not a 
snapshot, ignoring update:" + resource);
-               return;
+               return Result.NOTHING;
        }
 
-        // If snapshot and ready to update, cancel if digest didn't change - 
as the list
-        // of RegisteredResources is not saved, this might not have been 
detected earlier,
-        // if the snapshot was installed and the installer was later restarted
-        if(snapshot) {
-            final String oldDigest = ctx.getInstalledBundleDigest(b);
-            if(resource.getDigest().equals(oldDigest)) {
-                Logger.logDebug("Snapshot digest did not change, ignoring 
update:" + resource);
-                return;
+       try {
+            // If snapshot and ready to update, cancel if digest didn't change 
- as the list
+            // of RegisteredResources is not saved, this might not have been 
detected earlier,
+            // if the snapshot was installed and the installer was later 
restarted
+            if(snapshot) {
+                final String oldDigest = ctx.getInstalledBundleDigest(b);
+                if(resource.getDigest().equals(oldDigest)) {
+                    Logger.logDebug("Snapshot digest did not change, ignoring 
update:" + resource);
+                    return Result.NOTHING;
+                }
             }
-        }
 
-        logExecution();
-        if(b.getState() == Bundle.ACTIVE) {
-            // bundle was active before the update - restart it once updated, 
but
-            // in sequence, not right now
-            ctx.addTaskToCurrentCycle(new BundleStartTask(b.getBundleId()));
-        }
-        b.stop();
-        final InputStream is = resource.getInputStream();
-        if(is == null) {
-               canRetry = false;
-            throw new IllegalStateException(
-                    "RegisteredResource provides null InputStream, cannot 
update bundle: "
-                    + resource);
-        }
-        b.update(is);
-        ctx.saveInstalledBundleInfo(b, resource.getDigest(), 
newVersion.toString());
+            logExecution();
+            if(b.getState() == Bundle.ACTIVE) {
+                // bundle was active before the update - restart it once 
updated, but
+                // in sequence, not right now
+                ctx.addTaskToCurrentCycle(new 
BundleStartTask(b.getBundleId()));
+            }
+            b.stop();
+            final InputStream is = resource.getInputStream();
+            if(is == null) {
+               canRetry = false;
+                throw new IllegalStateException(
+                        "RegisteredResource provides null InputStream, cannot 
update bundle: "
+                        + resource);
+            }
+            b.update(is);
+            ctx.saveInstalledBundleInfo(b, resource.getDigest(), 
newVersion.toString());
+       } catch (Exception e) {
+            if ( canRetry ) {
+                ctx.addTaskToCurrentCycle(this);
+                return Result.NOTHING;
+            }
+            Logger.logWarn("Removing failing tasks - unable to retry: " + 
this, e);
+            return Result.NOTHING;
+       }
         ctx.addTaskToCurrentCycle(new 
SynchronousRefreshPackagesTask(this.packageAdminTracker));
         Logger.logDebug("Bundle updated: " + b.getBundleId() + "/" + 
b.getSymbolicName());
-        ctx.incrementCounter(OsgiInstallerStatistics.OSGI_TASKS_COUNTER);
-    }
-
-    @Override
-    public boolean canRetry(OsgiInstallerContext ctx) {
-       return canRetry;
+        return Result.SUCCESS;
     }
 
     @Override

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigInstallTask.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigInstallTask.java?rev=984405&r1=984404&r2=984405&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigInstallTask.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigInstallTask.java
 Wed Aug 11 13:41:34 2010
@@ -59,13 +59,13 @@ public class ConfigInstallTask extends A
 
     @SuppressWarnings("unchecked")
        @Override
-    public void execute(OsgiInstallerContext ctx) throws Exception {
+    public Result execute(OsgiInstallerContext ctx) {
 
         final ConfigurationAdmin ca = this.getConfigurationAdmin();
         if(ca == null) {
             ctx.addTaskToNextCycle(this);
             Logger.logDebug("ConfigurationAdmin not available, task will be 
retried later: " + this);
-            return;
+            return Result.NOTHING;
         }
 
         // Convert data to a configuration Dictionary
@@ -86,29 +86,35 @@ public class ConfigInstallTask extends A
         // Get or create configuration, but do not
         // update if the new one has the same values.
         boolean created = false;
-        Configuration config = getConfiguration(ca, pid, false, ctx);
-        if(config == null) {
-            created = true;
-            config = getConfiguration(ca, pid, true, ctx);
-        } else {
-                       if(isSameData(config.getProperties(), 
resource.getDictionary())) {
-                           Logger.logDebug("Configuration " + config.getPid()
-                               + " already installed with same data, update 
request ignored: "
-                               + resource);
-                               config = null;
-                       }
-        }
+        try {
+            Configuration config = getConfiguration(ca, pid, false, ctx);
+            if(config == null) {
+                created = true;
+                config = getConfiguration(ca, pid, true, ctx);
+            } else {
+                       if(isSameData(config.getProperties(), 
resource.getDictionary())) {
+                           Logger.logDebug("Configuration " + config.getPid()
+                               + " already installed with same data, update 
request ignored: "
+                               + resource);
+                               config = null;
+                       }
+            }
 
-        if(config != null) {
-            logExecution();
-            if (config.getBundleLocation() != null) {
-                config.setBundleLocation(null);
+            if(config != null) {
+                logExecution();
+                if (config.getBundleLocation() != null) {
+                    config.setBundleLocation(null);
+                }
+                config.update(dict);
+                Logger.logInfo("Configuration " + config.getPid()
+                            + " " + (created ? "created" : "updated")
+                            + " from " + resource);
+                return Result.SUCCESS;
             }
-            config.update(dict);
-            Logger.logInfo("Configuration " + config.getPid()
-                        + " " + (created ? "created" : "updated")
-                        + " from " + resource);
+        } catch (Exception e) {
+            ctx.addTaskToNextCycle(this);
         }
+        return Result.NOTHING;
     }
 
     /** True if a and b represent the same config data, ignoring 
"non-configuration" keys in the dictionaries */

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigRemoveTask.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigRemoveTask.java?rev=984405&r1=984404&r2=984405&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigRemoveTask.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigRemoveTask.java
 Wed Aug 11 13:41:34 2010
@@ -43,22 +43,28 @@ public class ConfigRemoveTask extends Ab
         return CONFIG_REMOVE_ORDER + pid.getCompositePid();
     }
 
-    public void execute(OsgiInstallerContext ctx) throws Exception {
+    public Result execute(OsgiInstallerContext ctx) {
 
         final ConfigurationAdmin ca = this.getConfigurationAdmin();
         if(ca == null) {
             ctx.addTaskToNextCycle(this);
             Logger.logDebug("ConfigurationAdmin not available, task will be 
retried later: " + this);
-            return;
+            return Result.NOTHING;
         }
 
         logExecution();
-        final Configuration cfg = getConfiguration(ca, pid, false, ctx);
-        if(cfg == null) {
-            Logger.logDebug("Cannot delete config , pid=" + pid + " not found, 
ignored (" + resource + ")");
-        } else {
-            Logger.logInfo("Deleting config " + pid + " (" + resource + ")");
-            cfg.delete();
+        try {
+            final Configuration cfg = getConfiguration(ca, pid, false, ctx);
+            if(cfg == null) {
+                Logger.logDebug("Cannot delete config , pid=" + pid + " not 
found, ignored (" + resource + ")");
+            } else {
+                Logger.logInfo("Deleting config " + pid + " (" + resource + 
")");
+                cfg.delete();
+                return Result.SUCCESS;
+            }
+        } catch (Exception e) {
+            ctx.addTaskToNextCycle(this);
         }
+        return Result.NOTHING;
     }
 }
\ No newline at end of file

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java?rev=984405&r1=984404&r2=984405&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java
 Wed Aug 11 13:41:34 2010
@@ -75,7 +75,7 @@ public class SynchronousRefreshPackagesT
     /**
      * @see 
org.apache.sling.osgi.installer.impl.OsgiInstallerTask#execute(org.apache.sling.osgi.installer.impl.OsgiInstallerContext)
      */
-    public void execute(OsgiInstallerContext ctx) throws Exception {
+    public Result execute(OsgiInstallerContext ctx) {
         logExecution();
         final int targetEventCount = packageRefreshEventsCount + 1;
         final long start = System.currentTimeMillis();
@@ -119,5 +119,6 @@ public class SynchronousRefreshPackagesT
         } finally {
                ctx.getBundleContext().removeFrameworkListener(this);
         }
+        return Result.SUCCESS;
        }
 }


Reply via email to