You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2009/08/20 18:47:14 UTC

svn commit: r806248 - in /sling/trunk/installer/osgi: installer/src/main/java/org/apache/sling/osgi/installer/ installer/src/main/java/org/apache/sling/osgi/installer/impl/ installer/src/test/java/org/apache/sling/osgi/installer/impl/ it/src/test/java/...

Author: bdelacretaz
Date: Thu Aug 20 16:47:14 2009
New Revision: 806248

URL: http://svn.apache.org/viewvc?rev=806248&view=rev
Log:
SLING-1078 - purge uninstallable resources and groups

Modified:
    sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstaller.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/OsgiInstallerThread.java
    sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java
    sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleInstallUpgradeDowngradeTest.java
    sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleStatePreservedTest.java
    sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java

Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstaller.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstaller.java?rev=806248&r1=806247&r2=806248&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstaller.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstaller.java Thu Aug 20 16:47:14 2009
@@ -64,6 +64,13 @@
     /** Counter index: number of installer cycles */
     int INSTALLER_CYCLES_COUNTER = 1;
     
+    /** Counter index: number of currently registered resources */
+    int REGISTERED_RESOURCES_COUNTER = 2;
+    
+    /** Counter index: number of currently registered resource groups 
+     *  of resources having the same OSGi entity ID */
+    int REGISTERED_GROUPS_COUNTER = 3;
+    
 	/** Size of the counters array */
-	int COUNTERS_SIZE = 2;
+	int COUNTERS_SIZE = 4;
 }
\ No newline at end of file

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=806248&r1=806247&r2=806248&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 Thu Aug 20 16:47:14 2009
@@ -31,6 +31,7 @@
 	ConfigurationAdmin getConfigurationAdmin();
 	LogService getLogService();
 	void incrementCounter(int index);
+    void setCounter(int index, long value);
 	
 	/** Schedule a task for execution in the current OsgiController cycle */
 	void addTaskToCurrentCycle(OsgiInstallerTask t);

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=806248&r1=806247&r2=806248&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 Thu Aug 20 16:47:14 2009
@@ -49,12 +49,7 @@
         this.packageAdmin = pa;
         this.logServiceTracker = logServiceTracker;
         
-        installerThread = new OsgiInstallerThread(this) {
-            @Override
-            protected void cycleDone() {
-                incrementCounter(INSTALLER_CYCLES_COUNTER);
-            }
-        };
+        installerThread = new OsgiInstallerThread(this);
         installerThread.setDaemon(true);
         installerThread.start();
     }
@@ -132,4 +127,8 @@
 	public void incrementCounter(int index) {
 	    counters[index]++;
 	}
+
+    public void setCounter(int index, long value) {
+        counters[index] = value;
+    }
 }
\ No newline at end of file

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=806248&r1=806247&r2=806248&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 Thu Aug 20 16:47:14 2009
@@ -25,7 +25,6 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
@@ -210,6 +209,9 @@
         // TODO do nothing for a group that's "stable" - i.e. one where no tasks were
         // created in the last cycle??
         for(SortedSet<RegisteredResource> group : registeredResources.values()) {
+            if(group.isEmpty()) {
+                continue;
+            }
             if(group.first().getResourceType().equals(RegisteredResource.ResourceType.BUNDLE)) {
                 bundleTaskCreator.createTasks(ctx, group, tasks);
             } else {
@@ -231,12 +233,46 @@
         }
     }
     
-    protected void cycleDone() {
+    private void cycleDone() {
+        // Cleanup resources that are not marked installable,
+        // they have been processed by now
+        int resourceCount = 0;
+        final List<RegisteredResource> toDelete = new ArrayList<RegisteredResource>();
+        final List<String> groupKeysToRemove = new ArrayList<String>();
+        for(SortedSet<RegisteredResource> group : registeredResources.values()) {
+            toDelete.clear();
+            String key = null;
+            for(RegisteredResource r : group) {
+                key = r.getEntityId();
+                resourceCount++;
+                if(!r.isInstallable()) {
+                    toDelete.add(r);
+                }
+            }
+            for(RegisteredResource r : toDelete) {
+                group.remove(r);
+                if(ctx.getLogService() != null) {
+                    ctx.getLogService().log(LogService.LOG_DEBUG,
+                            "Resource deleted, not installable and has been processed: " + r);
+                }
+            }
+            if(group.isEmpty() && key != null) {
+                groupKeysToRemove.add(key);
+            }
+        }
+        
+        for(String key : groupKeysToRemove) {
+            registeredResources.remove(key);
+        }
+        
+        ctx.setCounter(OsgiInstaller.REGISTERED_RESOURCES_COUNTER, resourceCount);
+        ctx.setCounter(OsgiInstaller.REGISTERED_GROUPS_COUNTER, registeredResources.size());
+        ctx.incrementCounter(OsgiInstaller.INSTALLER_CYCLES_COUNTER);
     }
     
     private void debug(String str) {
         if(ctx.getLogService() != null) {
             ctx.getLogService().log(LogService.LOG_DEBUG, str);
-        }
+       }
     }
 }
\ No newline at end of file

Modified: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java?rev=806248&r1=806247&r2=806248&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java (original)
+++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java Thu Aug 20 16:47:14 2009
@@ -53,4 +53,7 @@
 
     public void incrementCounter(int index) {
     }
+    
+    public void setCounter(int index, long value) {
+    }
 }

Modified: sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleInstallUpgradeDowngradeTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleInstallUpgradeDowngradeTest.java?rev=806248&r1=806247&r2=806248&view=diff
==============================================================================
--- sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleInstallUpgradeDowngradeTest.java (original)
+++ sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleInstallUpgradeDowngradeTest.java Thu Aug 20 16:47:14 2009
@@ -95,6 +95,10 @@
     	
     	assertNoOsgiTasks("After test " + testIndex++);
     	
+    	// Verify number of registered resources and groups
+        assertCounter(OsgiInstaller.REGISTERED_RESOURCES_COUNTER, 3);
+        assertCounter(OsgiInstaller.REGISTERED_GROUPS_COUNTER, 1);
+        
     	// Uninstall
     	{
             resetCounters();
@@ -114,6 +118,10 @@
             waitForInstallerAction(OsgiInstaller.INSTALLER_CYCLES_COUNTER, 2);
     	}
     	
+    	// No resources must be registered anymore
+        assertCounter(OsgiInstaller.REGISTERED_RESOURCES_COUNTER, 0);
+    	assertCounter(OsgiInstaller.REGISTERED_GROUPS_COUNTER, 0);
+    	
     	assertNoOsgiTasks("After test " + testIndex++);
     	
     	// Reinstall lower version, must work

Modified: sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleStatePreservedTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleStatePreservedTest.java?rev=806248&r1=806247&r2=806248&view=diff
==============================================================================
--- sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleStatePreservedTest.java (original)
+++ sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleStatePreservedTest.java Thu Aug 20 16:47:14 2009
@@ -16,7 +16,6 @@
  */
 package org.apache.sling.osgi.installer.it;
 
-import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
@@ -28,7 +27,6 @@
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.JUnit4TestRunner;
 import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
 
 @RunWith(JUnit4TestRunner.class)
 public class BundleStatePreservedTest extends OsgiInstallerTestBase {
@@ -78,17 +76,18 @@
         installer.addResource(getInstallableResource(getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.1.jar")));
         waitForInstallerAction(OsgiInstaller.INSTALLER_CYCLES_COUNTER, 1);
         
-        final String symbolicName = "osgi-installer-testbundle";
-    	final Bundle b = findBundle(symbolicName);
-    	assertNotNull("Installed bundle must be found", b);
-    	assertEquals("Installed bundle must be started", Bundle.ACTIVE, b.getState());
-    	assertEquals("Version must be 1.2", "1.2", b.getHeaders().get(Constants.BUNDLE_VERSION));
+        assertBundle("After installing testbundle", "osgi-installer-testbundle", "1.2", Bundle.ACTIVE);
+    	
+        // Verify number of registered resources and groups
+        waitForInstallerAction(OsgiInstaller.INSTALLER_CYCLES_COUNTER, 1);
+        assertCounter(OsgiInstaller.REGISTERED_RESOURCES_COUNTER, 5);
+        assertCounter(OsgiInstaller.REGISTERED_GROUPS_COUNTER, 3);
     	
         installer.removeResource(getInstallableResource(getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.0.jar")));
         installer.removeResource(getInstallableResource(getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.1.jar")));
         installer.removeResource(getInstallableResource(getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.2.jar")));
         waitForInstallerAction(OsgiInstaller.INSTALLER_CYCLES_COUNTER, 2);
-        assertNull("testbundle must be gone at end of test", findBundle(symbolicName));
+        assertNull("testbundle must be gone at end of test", findBundle("osgi-installer-testbundle"));
         
     	// Now check that bundles A and B have kept their states
         assertBundle("Bundle A must still be started", "osgi-installer-testA", null, Bundle.ACTIVE);

Modified: sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java?rev=806248&r1=806247&r2=806248&view=diff
==============================================================================
--- sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java (original)
+++ sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java Thu Aug 20 16:47:14 2009
@@ -268,6 +268,10 @@
     			actionsCounter, installer.getCounters()[OsgiInstaller.OSGI_TASKS_COUNTER]);
     }
     
+    public void assertCounter(int index, long value) {
+        assertEquals("Expected value matches for counter " + index, value, installer.getCounters()[index]);
+    }
+    
     public static Option[] defaultConfiguration() {
     	String vmOpt = "-Dosgi.installer.testing";