Author: bdelacretaz
Date: Wed Jul  8 13:36:43 2009
New Revision: 792134

URL: http://svn.apache.org/viewvc?rev=792134&view=rev
Log:
SLING-905 - cleaner retries for starting bundles

Modified:
    
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveTask.java
    
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java

Modified: 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveTask.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveTask.java?rev=792134&r1=792133&r2=792134&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveTask.java
 (original)
+++ 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveTask.java
 Wed Jul  8 13:36:43 2009
@@ -85,12 +85,6 @@
 
        @Override
        protected InstallResultCode doInstallOrUpdate(OsgiControllerTaskContext 
tctx, Map<String, Object> attributes) throws Exception {
-        int retryCount = 0;
-        if ( attributes.get("RETRY_COUNT") != null ) {
-            retryCount = (Integer)attributes.get("RETRY_COUNT");
-        }
-        retryCount++;
-        attributes.put("RETRY_COUNT", retryCount);
 
        // Check that we have bundle data and manifest
        InputStream is = data.adaptTo(InputStream.class);
@@ -125,7 +119,7 @@
                        // If the bundle (or one with the same symbolic name) is
                        // already installed, ignore the new one if it's a lower
                        // version
-                       if (b != null && retryCount == 1) {
+                       if (b != null) {
                                final Version installedVersion = new 
Version((String)(b.getHeaders().get(Constants.BUNDLE_VERSION)));
                                final Version newBundleVersion = new 
Version(m.getMainAttributes().getValue(Constants.BUNDLE_VERSION));
                                if(ignoreNewBundle(b.getSymbolicName(), uri, 
installedVersion, newBundleVersion)) {
@@ -135,21 +129,15 @@
 
                        if (b != null) {
                                // Existing bundle -> stop, update, restart
-                           if ( retryCount == 1 ) {
-                               if(ocs.getLogService() != null) {
-                                       
ocs.getLogService().log(LogService.LOG_DEBUG, "Calling Bundle.stop() and 
updating " + uri);
-                               }
-                               b.stop();
-                               b.update(is);
-                       b.start();
-                           } else {
-                               if(ocs.getLogService() != null) {
-                                       
ocs.getLogService().log(LogService.LOG_DEBUG, "Calling Bundle.start " + uri);
-                               }
-                       b.start();
-                           }
+                       if(ocs.getLogService() != null) {
+                               ocs.getLogService().log(LogService.LOG_INFO, 
+                                               "Bundle " + b.getBundleId() + " 
already present, calling Bundle.stop() and updating " + uri);
+                       }
+                       b.stop();
+                       b.update(is);
                            updated = true;
                            tctx.addTaskToCurrentCycle(new 
SynchronousRefreshPackagesTask());
+                           tctx.addTaskToCurrentCycle(new 
BundleStartTask(b.getBundleId()));
                        } else {
                                // New bundle -> install
                            final String fullUri = 
OsgiControllerImpl.getResourceLocation(uri);
@@ -159,8 +147,9 @@
                            }
                            b = bundleContext.installBundle(fullUri, is);
                        if(ocs.getLogService() != null) {
-                               ocs.getLogService().log(LogService.LOG_DEBUG, 
"No matching Bundle, installed " + fullUri);
+                               ocs.getLogService().log(LogService.LOG_INFO, 
"Bundle was not present, installed " + fullUri);
                        }
+                           tctx.addTaskToCurrentCycle(new 
BundleStartTask(b.getBundleId()));
                        }
                } finally {
                    // data is never null here
@@ -175,14 +164,6 @@
         // and updates where there are no attributes yet
         attributes.put(Storage.KEY_BUNDLE_ID, b.getBundleId());
 
-        // start bundle
-        tctx.addTaskToCurrentCycle(new BundleStartTask(b.getBundleId()));
-        
-        // TODO - remove retry
-        // Successful - reset retry count
-        retryCount = 0;
-        attributes.put("RETRY_COUNT", retryCount);
-
         return updated ? InstallResultCode.UPDATED : 
InstallResultCode.INSTALLED;
        }
 

Modified: 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java?rev=792134&r1=792133&r2=792134&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
 (original)
+++ 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
 Wed Jul  8 13:36:43 2009
@@ -23,6 +23,7 @@
 import org.apache.sling.osgi.installer.impl.OsgiControllerTask;
 import org.apache.sling.osgi.installer.impl.OsgiControllerTaskContext;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
 import org.osgi.service.log.LogService;
 
 /** Task that starts a bundle */
@@ -46,9 +47,9 @@
                return getClass().getSimpleName() + " (bundle " + bundleId + 
")";
        }
 
-       public void execute(OsgiControllerTaskContext ctx) throws Exception {
-               final Bundle b = ctx.getBundleContext().getBundle(bundleId);
-               final LogService log = 
ctx.getOsgiControllerServices().getLogService();
+       public void execute(OsgiControllerTaskContext tctx) throws Exception {
+               final Bundle b = tctx.getBundleContext().getBundle(bundleId);
+               final LogService log = 
tctx.getOsgiControllerServices().getLogService();
                
                if(b == null) {
                        if(log != null) {
@@ -62,10 +63,19 @@
                                log.log(LogService.LOG_DEBUG, "Bundle already 
started, no action taken:" + bundleId + "/" + b.getSymbolicName());
                        }
                } else {
-                       if(log != null) {
-                               log.log(LogService.LOG_INFO, "Starting bundle:" 
+ bundleId + "/" + b.getSymbolicName());
+                       try {
+                               b.start();
+                               if(log != null) {
+                                       log.log(LogService.LOG_INFO, "Bundle 
started:" + bundleId + "/" + b.getSymbolicName());
+                               }
+                       } catch(BundleException e) {
+                               if(log != null) {
+                                       log.log(LogService.LOG_INFO, 
+                                                       "Could not start bundle 
(" + e + "), will retry: " + bundleId + "/" + b.getSymbolicName());
+                               }
+                               tctx.addTaskToNextCycle(this);
                        }
-                       b.start();
+                       
                }
        }
 }


Reply via email to