You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2021/05/26 22:52:29 UTC
[brooklyn-server] 04/06: restore bundle metadata on rollback
This is an automated email from the ASF dual-hosted git repository.
heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit a6d210f8c2f38ebed6e59c51ccf8fd46b127e629
Author: Alex Heneveld <al...@cloudsoftcorp.com>
AuthorDate: Wed May 26 23:45:15 2021 +0100
restore bundle metadata on rollback
---
.../org/apache/brooklyn/camp/brooklyn/RebindOsgiTest.java | 2 +-
.../core/mgmt/ha/BrooklynBomOsgiArchiveInstaller.java | 13 +++++++++----
.../java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java | 12 ++++++++----
3 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/RebindOsgiTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/RebindOsgiTest.java
index 20cb545..2766942 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/RebindOsgiTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/RebindOsgiTest.java
@@ -513,7 +513,7 @@ public class RebindOsgiTest extends AbstractYamlRebindTest {
Asserts.expectedFailureContains(e, "DeliberatelyMissing", appSymbolicName);
}
Map<String, ManagedBundle> newBundles = origManagementContext.getOsgiManager().get().getManagedBundles();
- Assert.assertEquals(newBundles, oldBundles, "Bundles: "+newBundles);
+ Assert.assertEquals(newBundles, oldBundles, "Bundles: "+newBundles+" != "+oldBundles);
rebind();
newBundles = origManagementContext.getOsgiManager().get().getManagedBundles();
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/BrooklynBomOsgiArchiveInstaller.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/BrooklynBomOsgiArchiveInstaller.java
index 3f66043..4dd0fd3 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/BrooklynBomOsgiArchiveInstaller.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/BrooklynBomOsgiArchiveInstaller.java
@@ -69,6 +69,7 @@ import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.text.BrooklynVersionSyntax;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.text.VersionComparator;
+import org.apache.commons.lang3.tuple.Pair;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
@@ -643,10 +644,12 @@ public class BrooklynBomOsgiArchiveInstaller {
}
osgiManager.checkCorrectlyInstalled(result.getMetadata(), result.bundle);
- final File oldZipFile;
+ final File oldZipFile;
+ final ManagedBundle oldManagedBundle;
if (!updating) {
oldZipFile = null;
+ oldManagedBundle = null;
osgiManager.managedBundlesRecord.addManagedBundle(result, zipFile);
result.code = OsgiBundleInstallationResult.ResultCode.INSTALLED_NEW_BUNDLE;
result.message = "Installed Brooklyn catalog bundle "+result.getMetadata().getVersionedName()+" with ID "+result.getMetadata().getId()+" ["+result.bundle.getBundleId()+"]";
@@ -655,7 +658,9 @@ public class BrooklynBomOsgiArchiveInstaller {
mgmt().getRebindManager().getChangeListener().onManaged(result.getMetadata());
}
} else {
- oldZipFile = osgiManager.managedBundlesRecord.updateManagedBundleFileAndMetadata(result, zipFile);
+ Pair<File, ManagedBundle> olds = osgiManager.managedBundlesRecord.updateManagedBundleFileAndMetadata(result, zipFile);
+ oldZipFile = olds.getLeft();
+ oldManagedBundle = olds.getRight();
result.code = OsgiBundleInstallationResult.ResultCode.UPDATED_EXISTING_BUNDLE;
result.message = "Updated Brooklyn catalog bundle "+result.getMetadata().getVersionedName()+" as existing ID "+result.getMetadata().getId()+" ["+result.bundle.getBundleId()+"]";
@@ -686,9 +691,9 @@ public class BrooklynBomOsgiArchiveInstaller {
if (oldZipFile==null) {
throw new IllegalStateException("Did not have old ZIP file to install");
}
- log.debug("Rolling back bundle "+result.getVersionedName()+" to state from "+oldZipFile);
+ log.debug("Rolling back bundle "+result.getVersionedName()+" to state "+oldManagedBundle+" from "+oldZipFile);
try {
- File zipFileNow = osgiManager.managedBundlesRecord.rollbackManagedBundleFile(result, oldZipFile);
+ File zipFileNow = osgiManager.managedBundlesRecord.rollbackManagedBundleFileAndMetadata(result, oldZipFile, oldManagedBundle);
result.bundle.update(new FileInputStream(Preconditions.checkNotNull(zipFileNow, "Couldn't find contents of old version of bundle")));
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
index 44065ab..a909635 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
@@ -66,6 +66,7 @@ import org.apache.brooklyn.util.repeat.Repeater;
import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Duration;
+import org.apache.commons.lang3.tuple.Pair;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
@@ -173,7 +174,7 @@ public class OsgiManager {
}
/** Updates the bundle file associated with the given record, creating and returning a backup if there was already such a file */
- synchronized File updateManagedBundleFileAndMetadata(OsgiBundleInstallationResult result, File fNew) {
+ synchronized Pair<File,ManagedBundle> updateManagedBundleFileAndMetadata(OsgiBundleInstallationResult result, File fNew) {
File fCached = fileFor(result.getMetadata());
File fBak = new File(fCached.getAbsolutePath()+".bak");
if (fBak.equals(fNew)) {
@@ -192,13 +193,13 @@ public class OsgiManager {
throw Exceptions.propagate(e);
}
- managedBundlesByUid.put(result.getMetadata().getId(), result.getMetadata());
+ ManagedBundle mbBak = managedBundlesByUid.put(result.getMetadata().getId(), result.getMetadata());
- return fBak;
+ return Pair.of(fBak, mbBak);
}
/** Rolls back the officially installed file to a given backup copy of a bundle file, returning the new name of the file */
- synchronized File rollbackManagedBundleFile(OsgiBundleInstallationResult result, File fBak) {
+ synchronized File rollbackManagedBundleFileAndMetadata(OsgiBundleInstallationResult result, File fBak, ManagedBundle mbBak) {
log.debug("Rolling back to back Brooklyn local copy of bundle file "+fBak);
if (!fBak.exists()) {
throw new IllegalStateException("Cannot rollback to "+fBak+" as file does not exist");
@@ -210,6 +211,9 @@ public class OsgiManager {
log.warn("No pre-existing bundle file "+fCached+" when rolling back; ignoring");
}
fBak.renameTo(fCached);
+
+ managedBundlesByUid.put(result.getMetadata().getId(), mbBak);
+
return fCached;
}
}