Return-Path: Delivered-To: apmail-sling-commits-archive@www.apache.org Received: (qmail 23943 invoked from network); 9 Jul 2009 14:37:25 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 9 Jul 2009 14:37:25 -0000 Received: (qmail 18098 invoked by uid 500); 9 Jul 2009 14:37:35 -0000 Delivered-To: apmail-sling-commits-archive@sling.apache.org Received: (qmail 18045 invoked by uid 500); 9 Jul 2009 14:37:35 -0000 Mailing-List: contact commits-help@sling.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@sling.apache.org Delivered-To: mailing list commits@sling.apache.org Received: (qmail 18036 invoked by uid 99); 9 Jul 2009 14:37:35 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 09 Jul 2009 14:37:35 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 09 Jul 2009 14:37:32 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 63EA323888C5; Thu, 9 Jul 2009 14:37:11 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r792562 - in /sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl: OsgiControllerImpl.java tasks/SynchronousRefreshPackagesTask.java Date: Thu, 09 Jul 2009 14:37:11 -0000 To: commits@sling.apache.org From: bdelacretaz@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090709143711.63EA323888C5@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: bdelacretaz Date: Thu Jul 9 14:37:10 2009 New Revision: 792562 URL: http://svn.apache.org/viewvc?rev=792562&view=rev Log: SLING-1039 - OsgiControllerImpl created too many BundleStartTasks Modified: sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java Modified: sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java?rev=792562&r1=792561&r2=792562&view=diff ============================================================================== --- sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java (original) +++ sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java Thu Jul 9 14:37:10 2009 @@ -31,9 +31,7 @@ import org.apache.sling.osgi.installer.OsgiControllerServices; import org.apache.sling.osgi.installer.ResourceOverrideRules; import org.apache.sling.osgi.installer.impl.tasks.BundleInstallRemoveTask; -import org.apache.sling.osgi.installer.impl.tasks.BundleStartTask; import org.apache.sling.osgi.installer.impl.tasks.ConfigInstallRemoveTask; -import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; import org.osgi.service.cm.ConfigurationAdmin; @@ -152,20 +150,9 @@ } synchronized (tasks) { - // Add start bundle tasks for all active bundles - // so that they are restarted once we're done - for(Bundle b : bundleContext.getBundles()) { - if(b.getState() == Bundle.ACTIVE) { - final OsgiControllerTask t = new BundleStartTask(b.getBundleId()); - tasks.add(t); - if(getLogService() != null) { - getLogService().log(LogService.LOG_DEBUG, "Added " + t); - } - } - } - if(getLogService() != null) { - getLogService().log(LogService.LOG_INFO, "Executing " + tasks.size() + " queued tasks"); + getLogService().log(LogService.LOG_INFO, "Executing " + tasks.size() + + " queued tasks (more might be created during execution cycle)"); } final long start = System.currentTimeMillis(); Modified: sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java?rev=792562&r1=792561&r2=792562&view=diff ============================================================================== --- sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java (original) +++ sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java Thu Jul 9 14:37:10 2009 @@ -21,6 +21,7 @@ import org.apache.sling.osgi.installer.OsgiControllerServices; 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.FrameworkEvent; import org.osgi.framework.FrameworkListener; import org.osgi.service.log.LogService; @@ -67,6 +68,20 @@ final long timeout = System.currentTimeMillis() + MAX_REFRESH_PACKAGES_WAIT_SECONDS * 1000L; ocs = ctx.getOsgiControllerServices(); + // Refreshing packages might cause some bundles to be stopped, + // make sure all currently active ones are restarted after + // this task executes + for(Bundle b : ctx.getBundleContext().getBundles()) { + if(b.getState() == Bundle.ACTIVE) { + final OsgiControllerTask t = new BundleStartTask(b.getBundleId()); + ctx.addTaskToCurrentCycle(t); + if(ctx.getOsgiControllerServices().getLogService() != null) { + ctx.getOsgiControllerServices().getLogService().log(LogService.LOG_DEBUG, + "Added " + t + " to restart bundle if needed after refreshing packages"); + } + } + } + // It seems like (at least with Felix 1.0.4) we won't get a FrameworkEvent.PACKAGES_REFRESHED // if one happened very recently and there's nothing to refresh ctx.getPackageAdmin().refreshPackages(null);