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/26 15:04:25 UTC
svn commit: r807989 - in /sling/trunk/installer:
jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/
jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/
osgi/installer/src/main/java/org/apache/sling/osgi/installer/ osgi/in...
Author: bdelacretaz
Date: Wed Aug 26 13:04:25 2009
New Revision: 807989
URL: http://svn.apache.org/viewvc?rev=807989&view=rev
Log:
SLING-1078 - use empty InstallableResource for resource removal (as data is not available anymore ;-)
Modified:
sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/WatchedFolder.java
sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/MockOsgiInstaller.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/InstallableResource.java
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/OsgiInstallerImpl.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.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/ConfigInstallTest.java
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ConfigPrioritiesTest.java
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java
Modified: sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/WatchedFolder.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/WatchedFolder.java?rev=807989&r1=807988&r2=807989&view=diff
==============================================================================
--- sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/WatchedFolder.java (original)
+++ sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/WatchedFolder.java Wed Aug 26 13:04:25 2009
@@ -18,7 +18,6 @@
*/
package org.apache.sling.jcr.jcrinstall.impl;
-import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -153,9 +152,8 @@
// Resources left in the digests map have been deleted since last scan,
// need to be removed from OsgiInstaller
- final ByteArrayInputStream emptyStream = new ByteArrayInputStream("".getBytes());
for(Map.Entry<String, String> e : digests.entrySet()) {
- InstallableResource r = new InstallableResource(e.getKey(), emptyStream, e.getValue());
+ InstallableResource r = new InstallableResource(e.getKey());
result.toRemove.add(r);
}
Modified: sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/MockOsgiInstaller.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/MockOsgiInstaller.java?rev=807989&r1=807988&r2=807989&view=diff
==============================================================================
--- sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/MockOsgiInstaller.java (original)
+++ sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/MockOsgiInstaller.java Wed Aug 26 13:04:25 2009
@@ -68,6 +68,9 @@
}
public void removeResource(InstallableResource d) throws IOException {
+ if(!d.isEmpty()) {
+ throw new IllegalArgumentException("InstallableResource must be empty for removeResource call");
+ }
urls.remove(d.getUrl());
recordCall("remove", d);
}
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/InstallableResource.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/InstallableResource.java?rev=807989&r1=807988&r2=807989&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/InstallableResource.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/InstallableResource.java Wed Aug 26 13:04:25 2009
@@ -38,6 +38,7 @@
private final InputStream inputStream;
private final Dictionary<String, Object> dictionary;
private int priority;
+ private final boolean empty;
public static final String DIGEST_TYPE = "MD5";
/** Default resource priority */
@@ -51,6 +52,7 @@
this.dictionary = null;
this.digest = null;
this.priority = DEFAULT_PRIORITY;
+ this.empty = true;
}
/** Create a data object that wraps an InputStream
@@ -69,6 +71,7 @@
this.dictionary = null;
this.digest = digest;
this.priority = DEFAULT_PRIORITY;
+ this.empty = false;
}
/** Create a data object that wraps a Dictionary. Digest will be computed
@@ -91,6 +94,7 @@
throw new IllegalStateException("Unexpected Exception while computing digest", e);
}
this.priority = DEFAULT_PRIORITY;
+ this.empty = false;
}
@Override
@@ -166,4 +170,8 @@
d.update(bos.toByteArray());
return digestToString(d);
}
+
+ public boolean isEmpty() {
+ return empty;
+ }
}
\ No newline at end of file
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=807989&r1=807988&r2=807989&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 Wed Aug 26 13:04:25 2009
@@ -50,10 +50,11 @@
/** Inform the installer that a resource is available for installation.
* also called if the resource has been modified since it was registered.
*/
- void addResource(InstallableResource d) throws IOException;
+ void addResource(InstallableResource r) throws IOException;
- /** Inform the installer that a resource is no longer available */
- void removeResource(InstallableResource d) throws IOException;
+ /** Inform the installer that a resource is no longer available
+ * @param r an empty InstallableResource, isEmpty() must return true */
+ void removeResource(InstallableResource r) throws IOException;
/** Return counters used for statistics, console display, testing, etc. */
long [] getCounters();
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=807989&r1=807988&r2=807989&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 26 13:04:25 2009
@@ -110,10 +110,8 @@
}
public void removeResource(InstallableResource r) throws IOException {
- final RegisteredResource rr = new RegisteredResourceImpl(bundleContext, r);
- rr.setInstallable(false);
synchronized (installerThread) {
- installerThread.addNewResource(rr);
+ installerThread.removeResource(r);
}
}
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=807989&r1=807988&r2=807989&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 26 13:04:25 2009
@@ -54,7 +54,8 @@
private final SortedSet<OsgiInstallerTask> tasks = new TreeSet<OsgiInstallerTask>();
private final SortedSet<OsgiInstallerTask> tasksForNextCycle = new TreeSet<OsgiInstallerTask>();
private final List<SortedSet<RegisteredResource>> newResourcesSets = new ArrayList<SortedSet<RegisteredResource>>();
- private final Set<String> newResourcesSchemes = new HashSet<String>();
+ private final Set<String> newResourcesSchemes = new HashSet<String>();
+ private final Set<String> urlsToRemove = new HashSet<String>();
private boolean active = true;
/** Group our RegisteredResource by OSGi entity */
@@ -137,6 +138,21 @@
}
}
+ /** Register a resource for removal, or ignore if we don't have that URL */
+ void removeResource(InstallableResource r) {
+ if(!r.isEmpty()) {
+ throw new IllegalArgumentException("removeResource() got non-empty InstallableResource: " + r);
+ }
+
+ // Will mark all resources which have r's URL as uninstallable
+ debug("Adding URL " + r.getUrl() + " to urlsToRemove");
+ urlsToRemove.add(r.getUrl());
+
+ synchronized (newResources) {
+ newResources.notify();
+ }
+ }
+
/** Register a single new resource, will be processed on the next cycle */
void addNewResource(RegisteredResource r) {
synchronized (newResources) {
@@ -217,6 +233,19 @@
t.add(r);
}
newResources.clear();
+
+ // Mark resources for removal according to urlsToRemove
+ if(!urlsToRemove.isEmpty()) {
+ for(SortedSet<RegisteredResource> group : registeredResources.values()) {
+ for(RegisteredResource r : group) {
+ if(urlsToRemove.contains(r.getUrl())) {
+ debug("Marking " + r + " uninistallable, URL is included in urlsToRemove");
+ r.setInstallable(false);
+ }
+ }
+ }
+ }
+ urlsToRemove.clear();
}
}
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=807989&r1=807988&r2=807989&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 Wed Aug 26 13:04:25 2009
@@ -100,17 +100,17 @@
// Uninstall
{
resetCounters();
- installer.removeResource(getInstallableResource(
+ installer.removeResource(getNonInstallableResource(
getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.0.jar")));
waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
resetCounters();
- installer.removeResource(getInstallableResource(
+ installer.removeResource(getNonInstallableResource(
getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.1.jar")));
waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
resetCounters();
- installer.removeResource(getInstallableResource(
+ installer.removeResource(getNonInstallableResource(
getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.2.jar")));
waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
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=807989&r1=807988&r2=807989&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 Wed Aug 26 13:04:25 2009
@@ -81,15 +81,15 @@
assertCounter(OsgiInstaller.REGISTERED_GROUPS_COUNTER, 3);
resetCounters();
- installer.removeResource(getInstallableResource(getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.0.jar")));
+ installer.removeResource(getNonInstallableResource(getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.0.jar")));
waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
resetCounters();
- installer.removeResource(getInstallableResource(getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.1.jar")));
+ installer.removeResource(getNonInstallableResource(getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.1.jar")));
waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
resetCounters();
- installer.removeResource(getInstallableResource(getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.2.jar")));
+ installer.removeResource(getNonInstallableResource(getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.2.jar")));
waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
assertNull("testbundle must be gone at end of test", findBundle("osgi-installer-testbundle"));
Modified: sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ConfigInstallTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ConfigInstallTest.java?rev=807989&r1=807988&r2=807989&view=diff
==============================================================================
--- sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ConfigInstallTest.java (original)
+++ sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ConfigInstallTest.java Wed Aug 26 13:04:25 2009
@@ -74,7 +74,7 @@
assertEquals("Config value must match", "bar", value);
resetCounters();
- installer.removeResource(r);
+ installer.removeResource(new InstallableResource(r.getUrl()));
waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
waitForConfiguration("After removing", cfgPid, TIMEOUT, false);
@@ -116,7 +116,7 @@
configAdmin.stop();
waitForConfigAdmin(false);
resetCounters();
- installer.removeResource(r);
+ installer.removeResource(new InstallableResource(r.getUrl()));
waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
sleep(1000L);
resetCounters();
Modified: sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ConfigPrioritiesTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ConfigPrioritiesTest.java?rev=807989&r1=807988&r2=807989&view=diff
==============================================================================
--- sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ConfigPrioritiesTest.java (original)
+++ sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ConfigPrioritiesTest.java Wed Aug 26 13:04:25 2009
@@ -81,11 +81,11 @@
installer.addResource(c);
assertConfigValue(pid, "foo", "c", TIMEOUT);
installer.addResource(a);
- installer.removeResource(c);
+ installer.removeResource(new InstallableResource(c.getUrl()));
assertConfigValue(pid, "foo", "b", TIMEOUT);
- installer.removeResource(b);
+ installer.removeResource(new InstallableResource(b.getUrl()));
assertConfigValue(pid, "foo", "a", TIMEOUT);
- installer.removeResource(a);
+ installer.removeResource(new InstallableResource(a.getUrl()));
waitForConfiguration("After removing all resources", pid, TIMEOUT, false);
}
}
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=807989&r1=807988&r2=807989&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 Wed Aug 26 13:04:25 2009
@@ -217,6 +217,10 @@
return getInstallableResource(testBundle, null);
}
+ protected InstallableResource getNonInstallableResource(File testBundle) throws IOException {
+ return new InstallableResource(URL_SCHEME + ":" + testBundle.getAbsolutePath());
+ }
+
protected InstallableResource getInstallableResource(File testBundle, String digest) throws IOException {
return getInstallableResource(testBundle, digest, InstallableResource.DEFAULT_PRIORITY);
}