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/10/15 00:07:19 UTC

svn commit: r825307 - in /sling/trunk/installer/osgi/installer/src: main/java/org/apache/sling/osgi/installer/impl/ main/java/org/apache/sling/osgi/installer/impl/tasks/ test/java/org/apache/sling/osgi/installer/impl/

Author: bdelacretaz
Date: Wed Oct 14 22:07:19 2009
New Revision: 825307

URL: http://svn.apache.org/viewvc?rev=825307&view=rev
Log:
SLING-1106 - prepare for storing versions of installed bundles

Added:
    sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/PersistentBundleInfo.java
      - copied, changed from r824648, sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/BundleDigestsStorage.java
    sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/PersistentBundleInfoTest.java
      - copied, changed from r824648, sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/BundleDigestsStorageTest.java
Removed:
    sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/BundleDigestsStorage.java
    sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/BundleDigestsStorageTest.java
Modified:
    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/tasks/BundleStartTask.java

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=825307&r1=825306&r2=825307&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 Oct 14 22:07:19 2009
@@ -43,7 +43,7 @@
     private final ServiceTracker logServiceTracker;
     private final OsgiInstallerThread installerThread;
     private long [] counters = new long[COUNTERS_SIZE];
-    private BundleDigestsStorage bundleDigestsStorage;  
+    private PersistentBundleInfo bundleDigestsStorage;  
     
     public OsgiInstallerImpl(final BundleContext bc,
                               final PackageAdmin pa,
@@ -52,7 +52,7 @@
         this.bundleContext = bc;
         this.packageAdmin = pa;
         this.logServiceTracker = logServiceTracker;
-        bundleDigestsStorage = new BundleDigestsStorage(this, bc.getDataFile("bundle-digests.properties"));
+        bundleDigestsStorage = new PersistentBundleInfo(this, bc.getDataFile("bundle-digests.properties"));
         
         installerThread = new OsgiInstallerThread(this);
         installerThread.setDaemon(true);
@@ -180,6 +180,6 @@
     }
 
     public void saveBundleDigest(Bundle b, String digest) throws IOException {
-        bundleDigestsStorage.putDigest(b.getSymbolicName(), digest);
+        bundleDigestsStorage.putInfo(b.getSymbolicName(), digest, "");
     }
  }
\ No newline at end of file

Copied: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/PersistentBundleInfo.java (from r824648, sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/BundleDigestsStorage.java)
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/PersistentBundleInfo.java?p2=sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/PersistentBundleInfo.java&p1=sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/BundleDigestsStorage.java&r1=824648&r2=825307&rev=825307&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/BundleDigestsStorage.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/PersistentBundleInfo.java Wed Oct 14 22:07:19 2009
@@ -31,18 +31,19 @@
 
 import org.osgi.service.log.LogService;
 
-/** Store bundle digests in a file, to avoid re-installing
- *  snapshots needlessly when restarting.
+/** Store the digests and version numbers of installed bundles
+ *  in a file, to keep track of what we installed.
  */
-class BundleDigestsStorage {
+class PersistentBundleInfo {
     private Properties digests = new Properties();
     private final File dataFile;
     private final OsgiInstallerContext ctx;
+    private static final String VERSION_PREFIX = "V:";
     
     /** Load the list from supplied file, which is also
      *  used by purgeAndSave to save our data
      */
-    BundleDigestsStorage(OsgiInstallerContext ctx, File dataFile) throws IOException {
+    PersistentBundleInfo(OsgiInstallerContext ctx, File dataFile) throws IOException {
         this.ctx = ctx;
         this.dataFile = dataFile;
         InputStream is = null;
@@ -64,14 +65,15 @@
         }
     }
     
-    /** Remove digests which do not belong to installed bundles,
+    /** Remove data which do not belongs to installed bundles,
      *  and save our data
      */
     void purgeAndSave(TreeSet<String> installedBundlesSymbolicNames) throws IOException {
         final List<String> toRemove = new ArrayList<String>();
         for(Object o : digests.keySet()) {
             final String key = (String)o;
-            if(!installedBundlesSymbolicNames.contains(key)) {
+            if(!installedBundlesSymbolicNames.contains(key) 
+                    && !installedBundlesSymbolicNames.contains(key.substring(VERSION_PREFIX.length()))) {
                 toRemove.add(key);
             }
         }
@@ -96,12 +98,18 @@
     }
     
     /** Store a bundle digest - not persisted until purgeAndSave is called */
-    void putDigest(String bundleSymbolicName, String digest) {
+    void putInfo(String bundleSymbolicName, String digest, String installedVersion) {
         digests.setProperty(bundleSymbolicName, digest);
+        digests.setProperty(VERSION_PREFIX + bundleSymbolicName, installedVersion);
     }
     
     /** Retrieve digest, null if not found */
     String getDigest(String bundleSymbolicName) {
         return digests.getProperty(bundleSymbolicName);
     }
+    
+    /** Retrieve installed version, null if not found */
+    String getInstalledVersion(String bundleSymbolicName) {
+        return digests.getProperty(VERSION_PREFIX + bundleSymbolicName);
+    }
 }
\ No newline at end of file

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=825307&r1=825306&r2=825307&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 Oct 14 22:07:19 2009
@@ -60,6 +60,13 @@
 		final LogService log = ctx.getLogService();
 		boolean needToRetry = false;
 		
+        if(bundleId == 0) {
+            if(log != null) {
+                log.log(LogService.LOG_DEBUG, "Bundle 0 is the framework bundle, ignoring request to start it");
+            }
+            return;
+        }
+        
 		if(b == null) {
 			if(log != null) {
 				log.log(LogService.LOG_INFO, "Cannot start bundle, id not found:" + bundleId);

Copied: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/PersistentBundleInfoTest.java (from r824648, sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/BundleDigestsStorageTest.java)
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/PersistentBundleInfoTest.java?p2=sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/PersistentBundleInfoTest.java&p1=sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/BundleDigestsStorageTest.java&r1=824648&r2=825307&rev=825307&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/BundleDigestsStorageTest.java (original)
+++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/PersistentBundleInfoTest.java Wed Oct 14 22:07:19 2009
@@ -20,6 +20,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertNotNull;
 
 import java.io.File;
 import java.io.IOException;
@@ -28,59 +29,83 @@
 import org.junit.Before;
 import org.junit.Test;
 
-public class BundleDigestsStorageTest {
-    private BundleDigestsStorage storage;
+public class PersistentBundleInfoTest {
+    private PersistentBundleInfo storage;
     private File testFile;
     private TreeSet<String> installedBundles;
+    private static final String NO_VERSION = "";
     
     @Before
     public void setUp() throws Exception {
         testFile = File.createTempFile(getClass().getSimpleName(), "properties");
         testFile.deleteOnExit();
-        storage = new BundleDigestsStorage(new MockOsgiInstallerContext(), testFile);
+        storage = new PersistentBundleInfo(new MockOsgiInstallerContext(), testFile);
         installedBundles = new TreeSet<String>();
     }
     
     @Test
     public void testCloseAndReopen() throws IOException {
-        storage.putDigest("foo", "bar");
+        storage.putInfo("foo", "bar", NO_VERSION);
         assertEquals("Before save, expecting bar digest", "bar", storage.getDigest("foo"));
         installedBundles.add("foo");
         storage.purgeAndSave(installedBundles);
         assertEquals("After save, expecting bar digest", "bar", storage.getDigest("foo"));
-        storage.putDigest("foo", "wii");
+        storage.putInfo("foo", "wii", NO_VERSION);
         assertEquals("After change, expecting wii digest", "wii", storage.getDigest("foo"));
         storage = null;
-        final BundleDigestsStorage copy = new BundleDigestsStorage(new MockOsgiInstallerContext(), testFile);
+        final PersistentBundleInfo copy = new PersistentBundleInfo(new MockOsgiInstallerContext(), testFile);
         assertEquals("In copy saved before change, expecting bar digest", "bar", copy.getDigest("foo"));
     }
     
     @Test
     public void testPurge() throws IOException {
         for(int i=0; i < 50; i++) {
-            storage.putDigest("foo" + i, "bar" + i);
+            storage.putInfo("foo" + i, "bar" + i, "1." + i);
             if(i % 2 == 0) {
                 installedBundles.add("foo" + i);
             }
         }
         for(int i=0; i < 50; i++) {
-            assertEquals("Before save, expecting digest to match at step " + i, "bar" + i, storage.getDigest("foo" + i));
+            assertEquals("Before save, expecting digest to match at step " + i, "bar" + i, 
+                    storage.getDigest("foo" + i));
+            assertEquals("Before save, expecting version to match at step " + i, "1." + i, 
+                    storage.getInstalledVersion("foo" + i));
         }
         storage.purgeAndSave(installedBundles);
         for(int i=0; i < 50; i++) {
             if(i % 2 != 0) {
-                assertNull("After purge, expecting null digest at step " + i, storage.getDigest("foo" + i));
+                assertNull("After purge, expecting null digest at step " + i, 
+                        storage.getDigest("foo" + i));
+                assertNull("After purge, expecting null version at step " + i, 
+                        storage.getInstalledVersion("foo" + i));
             } else {
-                assertEquals("After purge, expecting digest to match at step " + i, "bar" + i, storage.getDigest("foo" + i));
+                assertNotNull("After purge, expecting non-null digest at step " + i, 
+                        storage.getDigest("foo" + i));
+                assertEquals("After purge, expecting digest to match at step " + i, "bar" + i, 
+                        storage.getDigest("foo" + i));
+                assertNotNull("After purge, expecting non-null version at step " + i, 
+                        storage.getInstalledVersion("foo" + i));
+                assertEquals("After purge, expecting version to match at step " + i, "1." + i, 
+                        storage.getInstalledVersion("foo" + i));
             }
         }
         storage = null;
-        final BundleDigestsStorage copy = new BundleDigestsStorage(new MockOsgiInstallerContext(), testFile);
+        final PersistentBundleInfo copy = new PersistentBundleInfo(new MockOsgiInstallerContext(), testFile);
         for(int i=0; i < 50; i++) {
             if(i % 2 != 0) {
-                assertNull("In copy, expecting null digest at step " + i, copy.getDigest("foo" + i));
+                assertNull("In copy, expecting null digest at step " + i, 
+                        copy.getDigest("foo" + i));
+                assertNull("In copy, expecting null version at step " + i, 
+                        copy.getInstalledVersion("foo" + i));
             } else {
-                assertEquals("In copy, expecting digest to match at step " + i, "bar" + i, copy.getDigest("foo" + i));
+                assertNotNull("In copy, expecting non-null digest at step " + i, 
+                        copy.getDigest("foo" + i));
+                assertEquals("In copy, expecting digest to match at step " + i, "bar" + i, 
+                        copy.getDigest("foo" + i));
+                assertNotNull("In copy, expecting non-null version at step " + i, 
+                        copy.getInstalledVersion("foo" + i));
+                assertEquals("In copy, expecting version to match at step " + i, "1." + i, 
+                        copy.getInstalledVersion("foo" + i));
             }
         }
     }