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 2014/11/13 23:23:39 UTC
[06/18] incubator-brooklyn git commit: Catalog versioning - Fail on
adding catalog item with same version.
Catalog versioning - Fail on adding catalog item with same version.
Allow for override if forceUpdate is set.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/8d3a8c91
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/8d3a8c91
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/8d3a8c91
Branch: refs/heads/master
Commit: 8d3a8c913e3aeb702609d778859bb509f4e809d7
Parents: 53809f3
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Wed Jul 23 23:44:03 2014 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Thu Nov 13 11:49:50 2014 +0200
----------------------------------------------------------------------
.../java/brooklyn/catalog/BrooklynCatalog.java | 13 ++++++++++++-
.../catalog/internal/BasicBrooklynCatalog.java | 18 +++++++++++++++++-
.../brooklyn/camp/brooklyn/AbstractYamlTest.java | 8 +++++++-
.../brooklyn/catalog/CatalogYamlEntityTest.java | 16 ++++++++++++++++
4 files changed, 52 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8d3a8c91/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java b/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java
index c5d0a63..5b0a5cc 100644
--- a/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java
+++ b/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java
@@ -78,12 +78,23 @@ public interface BrooklynCatalog {
/**
* Adds an item (represented in yaml) to the catalog.
- *
+ * Fails if the same version exists in catalog.
+ *
* @throws IllegalArgumentException if the yaml was invalid
*/
CatalogItem<?,?> addItem(String yaml);
/**
+ * Adds an item (represented in yaml) to the catalog.
+ *
+ * @param forceUpdate If true allows catalog update even when an
+ * item exists with the same symbolicName and version
+ *
+ * @throws IllegalArgumentException if the yaml was invalid
+ */
+ CatalogItem<?,?> addItem(String yaml, boolean forceUpdate);
+
+ /**
* adds an item to the 'manual' catalog;
* this does not update the classpath or have a record to the java Class
*
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8d3a8c91/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
index eb2e793..e560ae2 100644
--- a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
@@ -507,10 +507,17 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
@Override
public CatalogItem<?,?> addItem(String yaml) {
+ return addItem(yaml, false);
+ }
+
+ @Override
+ public CatalogItem<?,?> addItem(String yaml, boolean forceUpdate) {
log.debug("Adding manual catalog item to "+mgmt+": "+yaml);
checkNotNull(yaml, "yaml");
- if (manualAdditionsCatalog==null) loadManualAdditionsCatalog();
CatalogItemDtoAbstract<?,?> itemDto = getAbstractCatalogItem(yaml);
+ checkItemNotExists(itemDto, forceUpdate);
+
+ if (manualAdditionsCatalog==null) loadManualAdditionsCatalog();
manualAdditionsCatalog.addEntry(itemDto);
// Ensure the cache is populated and it is persisted by the management context
@@ -525,8 +532,16 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
return itemDto;
}
+ private void checkItemNotExists(CatalogItem<?,?> itemDto, boolean forceUpdate) {
+ if (!forceUpdate && getCatalogItemDo(itemDto.getId(), itemDto.getVersion()) != null) {
+ throw new IllegalStateException("Updating existing catalog entries is forbidden: " +
+ itemDto.getId() + ":" + itemDto.getVersion() + ". Use forceUpdate argument to override.");
+ }
+ }
+
@Override @Deprecated /** @deprecated see super */
public void addItem(CatalogItem<?,?> item) {
+ //assume forceUpdate for backwards compatibility
log.debug("Adding manual catalog item to "+mgmt+": "+item);
checkNotNull(item, "item");
CatalogUtils.installLibraries(mgmt, item.getLibraries());
@@ -536,6 +551,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
@Override @Deprecated /** @deprecated see super */
public CatalogItem<?,?> addItem(Class<?> type) {
+ //assume forceUpdate for backwards compatibility
log.debug("Adding manual catalog item to "+mgmt+": "+type);
checkNotNull(type, "type");
if (manualAdditionsCatalog==null) loadManualAdditionsCatalog();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8d3a8c91/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/AbstractYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/AbstractYamlTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/AbstractYamlTest.java
index e5c233a..fd856ca 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/AbstractYamlTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/AbstractYamlTest.java
@@ -50,6 +50,7 @@ public abstract class AbstractYamlTest {
private ManagementContext brooklynMgmt;
protected BrooklynCampPlatform platform;
protected BrooklynCampPlatformLauncherNoServer launcher;
+ private boolean forceUpdate;
public AbstractYamlTest() {
super();
@@ -59,6 +60,7 @@ public abstract class AbstractYamlTest {
@BeforeMethod(alwaysRun = true)
public void setUp() {
+ forceUpdate = false;
launcher = new BrooklynCampPlatformLauncherNoServer() {
@Override
protected LocalManagementContext newMgmtContext() {
@@ -135,7 +137,7 @@ public abstract class AbstractYamlTest {
}
protected void addCatalogItem(String catalogYaml) {
- mgmt().getCatalog().addItem(catalogYaml);
+ mgmt().getCatalog().addItem(catalogYaml, forceUpdate);
}
protected void deleteCatalogEntity(String catalogItem) {
@@ -153,4 +155,8 @@ public abstract class AbstractYamlTest {
protected String ver(String id) {
return id + CatalogUtils.VERSION_DELIMITER + TEST_VERSION;
}
+
+ public void forceCatalogUpdate() {
+ forceUpdate = true;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8d3a8c91/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
index dc51569..dce7a9b 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
@@ -307,6 +307,22 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
"not already registered by name:version, but URL is empty.");
}
}
+
+ @Test(expectedExceptions = IllegalStateException.class)
+ public void testUpdatingItemFails() {
+ String id = "my.catalog.app.id.duplicate";
+ addCatalogOSGiEntity(id);
+ addCatalogOSGiEntity(id);
+ }
+
+ @Test
+ public void testForcedUpdatingItem() {
+ String id = "my.catalog.app.id.duplicate";
+ addCatalogOSGiEntity(id);
+ forceCatalogUpdate();
+ addCatalogOSGiEntity(id);
+ deleteCatalogEntity(id);
+ }
@Test
public void testCreateSpecFromCatalogItem() {