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() {