brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From henev...@apache.org
Subject [4/7] incubator-brooklyn git commit: actually force catalog load by default, and report errors better
Date Thu, 07 May 2015 10:57:19 GMT
actually force catalog load by default, and report errors better

and remove two incompatible items from the catalog, with comments in them - FollowTheSunPolicy
and LoadBalancingPolicy


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/65d7ee3c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/65d7ee3c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/65d7ee3c

Branch: refs/heads/master
Commit: 65d7ee3c15afda7c5ed4507889fb632f1e2d5c8f
Parents: e629602
Author: Alex Heneveld <alex.heneveld@cloudsoftcorp.com>
Authored: Mon Apr 27 12:53:09 2015 +0100
Committer: Alex Heneveld <alex.heneveld@cloudsoftcorp.com>
Committed: Mon Apr 27 14:29:55 2015 +0100

----------------------------------------------------------------------
 .../policy/followthesun/FollowTheSunPolicy.java |  8 +++--
 .../loadbalancing/LoadBalancingPolicy.java      | 16 ++++++---
 usage/cli/src/main/java/brooklyn/cli/Main.java  | 34 +++++++++++++++++++-
 3 files changed, 49 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/65d7ee3c/policy/src/main/java/brooklyn/policy/followthesun/FollowTheSunPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/followthesun/FollowTheSunPolicy.java b/policy/src/main/java/brooklyn/policy/followthesun/FollowTheSunPolicy.java
index 87881bf..f77eb40 100644
--- a/policy/src/main/java/brooklyn/policy/followthesun/FollowTheSunPolicy.java
+++ b/policy/src/main/java/brooklyn/policy/followthesun/FollowTheSunPolicy.java
@@ -33,7 +33,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import brooklyn.catalog.Catalog;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.Attributes;
 import brooklyn.entity.basic.EntityLocal;
@@ -53,8 +52,11 @@ import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 
-@Catalog(name="Follow the Sun", description="Policy for moving \"work\" around to follow
the demand; "
-        + "the work can be any \"Movable\" entity")
+    // removed from catalog because it cannot currently be configured via catalog mechanisms
- 
+    // PolicySpec.create fails due to no no-arg constructor
+    // TODO make model and parameters things which can be initialized from config then reinstate
in catalog
+//@Catalog(name="Follow the Sun", description="Policy for moving \"work\" around to follow
the demand; "
+//        + "the work can be any \"Movable\" entity")
 public class FollowTheSunPolicy extends AbstractPolicy {
 
     private static final Logger LOG = LoggerFactory.getLogger(FollowTheSunPolicy.class);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/65d7ee3c/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java b/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
index 0e36928..8a68461 100644
--- a/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
+++ b/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
@@ -32,7 +32,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.EntityInternal;
@@ -67,10 +66,13 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder;
  * of container resource in the pool respectively. These events may be consumed by a separate
policy that is capable
  * of resizing the container pool.
  */
-@Catalog(name="Load Balancer", description="Policy that is attached to a pool of \"containers\",
each of which "
-        + "can host one or more migratable \"items\". The policy monitors the workrates of
the items and effects "
-        + "migrations in an attempt to ensure that the containers are all sufficiently utilized
without any of "
-        + "them being overloaded.")
+    // removed from catalog because it cannot currently be configured via catalog mechanisms
+    // PolicySpec.create fails due to no no-arg constructor
+    // TODO make metric and model things which can be initialized from config then reinstate
in catalog
+//@Catalog(name="Load Balancer", description="Policy that is attached to a pool of \"containers\",
each of which "
+//        + "can host one or more migratable \"items\". The policy monitors the workrates
of the items and effects "
+//        + "migrations in an attempt to ensure that the containers are all sufficiently
utilized without any of "
+//        + "them being overloaded.")
 public class LoadBalancingPolicy<NodeType extends Entity, ItemType extends Movable>
extends AbstractPolicy {
     
     private static final Logger LOG = LoggerFactory.getLogger(LoadBalancingPolicy.class);
@@ -120,6 +122,10 @@ public class LoadBalancingPolicy<NodeType extends Entity, ItemType
extends Movab
         }
     };
 
+    public LoadBalancingPolicy() {
+        this(null, null);
+    }
+    
     public LoadBalancingPolicy(AttributeSensor<? extends Number> metric,
             BalanceablePoolModel<NodeType, ItemType> model) {
         this(MutableMap.of(), metric, model);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/65d7ee3c/usage/cli/src/main/java/brooklyn/cli/Main.java
----------------------------------------------------------------------
diff --git a/usage/cli/src/main/java/brooklyn/cli/Main.java b/usage/cli/src/main/java/brooklyn/cli/Main.java
index 45c6128..d89703e 100644
--- a/usage/cli/src/main/java/brooklyn/cli/Main.java
+++ b/usage/cli/src/main/java/brooklyn/cli/Main.java
@@ -38,7 +38,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import brooklyn.BrooklynVersion;
+import brooklyn.basic.BrooklynTypes;
 import brooklyn.catalog.BrooklynCatalog;
+import brooklyn.catalog.CatalogItem;
 import brooklyn.cli.CloudExplorer.BlobstoreGetBlobCommand;
 import brooklyn.cli.CloudExplorer.BlobstoreListContainerCommand;
 import brooklyn.cli.CloudExplorer.BlobstoreListContainersCommand;
@@ -72,6 +74,7 @@ import brooklyn.util.ResourceUtils;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.exceptions.FatalConfigurationRuntimeException;
 import brooklyn.util.exceptions.FatalRuntimeException;
+import brooklyn.util.exceptions.RuntimeInterruptedException;
 import brooklyn.util.exceptions.UserFacingException;
 import brooklyn.util.guava.Maybe;
 import brooklyn.util.javalang.Enums;
@@ -79,12 +82,15 @@ import brooklyn.util.net.Networking;
 import brooklyn.util.text.Identifiers;
 import brooklyn.util.text.StringEscapes.JavaStringEscapes;
 import brooklyn.util.text.Strings;
+import brooklyn.util.time.Duration;
 
 import com.google.common.annotations.Beta;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
 import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.base.Stopwatch;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
 
 /**
  * This class is the primary CLI for brooklyn.
@@ -573,11 +579,37 @@ public class Main extends AbstractMain {
         /** method intended for subclassing, to add items to the catalog */
         protected void populateCatalog(BrooklynCatalog catalog) {
             // Force load of catalog (so web console is up to date)
-            catalog.getCatalogItems();
+            confirmCatalog(catalog);
 
             // nothing else added here
         }
 
+        protected void confirmCatalog(BrooklynCatalog catalog) {
+            // Force load of catalog (so web console is up to date)
+            Stopwatch time = Stopwatch.createStarted();
+            Iterable<CatalogItem<Object, Object>> items = catalog.getCatalogItems();
+            for (CatalogItem<Object, Object> item: items) {
+                try {
+                    Object spec = catalog.createSpec(item);
+                    if (spec instanceof EntitySpec) {
+                        BrooklynTypes.getDefinedEntityType(((EntitySpec<?>)spec).getType());
+                    }
+                    log.debug("Catalog loaded spec "+spec+" for item "+item);           
          
+                } catch (Throwable throwable) {
+                    // swallow errors, apart from interrupted
+                    if (throwable instanceof InterruptedException)
+                        throw new RuntimeInterruptedException((InterruptedException) throwable);
+                    if (throwable instanceof RuntimeInterruptedException)
+                        throw (RuntimeInterruptedException) throwable;
+
+                    log.error("Error loading catalog item '"+item+"': "+throwable);
+                    log.debug("Trace for error loading catalog item '"+item+"': "+throwable,
throwable);
+                }
+            }
+            log.debug("Catalog (size "+Iterables.size(items)+") confirmed in "+Duration.of(time));
                     
+            // nothing else added here
+        }
+        
         /** convenience for subclasses to specify that an app should run,
          * throwing the right (caught) error if another app has already been specified */
         protected void setAppToLaunch(String className) {


Mime
View raw message