You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2014/11/14 00:12:49 UTC

[3/8] incubator-brooklyn git commit: Fix yaml use of SshCommandSensor

Fix yaml use of SshCommandSensor

- Was causing failure of VanillaBashNetcatYamlTest
- SshCommandSensor constructor expects ConfigBag, rather than Map.
- Change BrooklynYamlTypeInstantiator.newInstance to look for a
  <init>(ConfigBag) constructor as well.
- Fix `Class AddSensor.getType("String")` so it tries prepending
  "java.lang." as well
- set poll period to 100ms in yaml (instead of default 5 minutes)


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

Branch: refs/heads/master
Commit: d21654cc88300fe62d8d39ed274a69cfb0e10f86
Parents: eb57557
Author: Aled Sage <al...@gmail.com>
Authored: Thu Nov 13 12:26:37 2014 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Nov 13 23:10:03 2014 +0000

----------------------------------------------------------------------
 .../java/brooklyn/entity/effector/AddSensor.java  | 18 +++++++++++++-----
 .../creation/BrooklynYamlTypeInstantiator.java    |  7 +++++++
 .../camp/brooklyn/VanillaBashNetcatYamlTest.java  |  4 ++--
 .../resources/vanilla-bash-netcat-w-client.yaml   |  2 ++
 4 files changed, 24 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d21654cc/core/src/main/java/brooklyn/entity/effector/AddSensor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/effector/AddSensor.java b/core/src/main/java/brooklyn/entity/effector/AddSensor.java
index 49c191e..9e80b45 100644
--- a/core/src/main/java/brooklyn/entity/effector/AddSensor.java
+++ b/core/src/main/java/brooklyn/entity/effector/AddSensor.java
@@ -47,7 +47,7 @@ public class AddSensor<T> implements EntityInitializer {
 
     public static final ConfigKey<String> SENSOR_NAME = ConfigKeys.newStringConfigKey("name", "The name of the sensor to create");
     public static final ConfigKey<Duration> SENSOR_PERIOD = ConfigKeys.newConfigKey(Duration.class, "period", "Period, including units e.g. 1m or 5s or 200ms; default 5 minutes", Duration.FIVE_MINUTES);
-    public static final ConfigKey<String> SENSOR_TYPE = ConfigKeys.newStringConfigKey("targetType", "Target type for the value; default String", "String");
+    public static final ConfigKey<String> SENSOR_TYPE = ConfigKeys.newStringConfigKey("targetType", "Target type for the value; default String", "java.lang.String");
 
     protected final String name;
     protected final Duration period;
@@ -76,14 +76,22 @@ public class AddSensor<T> implements EntityInitializer {
         return Sensors.newSensor(clazz, name);
     }
 
+    @SuppressWarnings("unchecked")
     protected Class<T> getType(String className) {
-        Class<T> clazz = null;
         try {
-            clazz = (Class<T>) Class.forName(className);
+            return (Class<T>) Class.forName(className);
         } catch (ClassNotFoundException e) {
-            throw new IllegalArgumentException("Invalid target type for sensor "+name+": " + className);
+            if (!className.contains(".")) {
+                // could be assuming "java.lang" package; try again with that
+                try {
+                    return (Class<T>) Class.forName("java.lang."+className);
+                } catch (ClassNotFoundException e2) {
+                    throw new IllegalArgumentException("Invalid target type for sensor "+name+": " + className+" (also tried java.lang."+className+")");
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid target type for sensor "+name+": " + className);
+            }
         }
-        return clazz;
     }
 
     protected String getFullClassName(String className) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d21654cc/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynYamlTypeInstantiator.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynYamlTypeInstantiator.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynYamlTypeInstantiator.java
index 6046491..2cde40e 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynYamlTypeInstantiator.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynYamlTypeInstantiator.java
@@ -131,11 +131,18 @@ public abstract class BrooklynYamlTypeInstantiator {
             Optional<? extends T> result = Reflections.invokeConstructorWithArgs(type, cfg);
             if (result.isPresent()) 
                 return result.get();
+            
+            ConfigBag cfgBag = ConfigBag.newInstance(cfg);
+            result = Reflections.invokeConstructorWithArgs(type, cfgBag);
+            if (result.isPresent()) 
+                return result.get();
+            
             if (cfg.isEmpty()) {
                 result = Reflections.invokeConstructorWithArgs(type);
                 if (result.isPresent()) 
                     return result.get();
             }
+            
             throw new IllegalStateException("No known mechanism for constructing type "+type+" in "+factory.contextForLogging);
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d21654cc/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java
index 336b5fc..dd1b647 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java
@@ -82,7 +82,7 @@ public class VanillaBashNetcatYamlTest extends AbstractYamlTest {
         // and check we get the right result 
         EntityTestUtils.assertAttributeEventually(netcat, SENSOR_OUTPUT_ALL, StringPredicates.containsLiteral("hi netcat"));
         log.info("invoked ping from "+pinger+" to "+netcat+", 'all' sensor shows:\n"+
-            netcat.getAttribute(SENSOR_OUTPUT_ALL));
+                netcat.getAttribute(SENSOR_OUTPUT_ALL));
 
         // netcat should now fail and restart
         EntityTestUtils.assertAttributeEventually(netcat, Attributes.SERVICE_STATE_ACTUAL, Predicates.not(Predicates.equalTo(Lifecycle.RUNNING)));
@@ -96,7 +96,7 @@ public class VanillaBashNetcatYamlTest extends AbstractYamlTest {
         // checking right result
         EntityTestUtils.assertAttributeEventually(netcat, SENSOR_OUTPUT_ALL, StringPredicates.containsLiteral("yo yo yo"));
         log.info("invoked ping again from "+pinger+" to "+netcat+", 'all' sensor shows:\n"+
-            netcat.getAttribute(SENSOR_OUTPUT_ALL));
+                netcat.getAttribute(SENSOR_OUTPUT_ALL));
         
         // and it's propagated to the app
         EntityTestUtils.assertAttributeEventually(app, Sensors.newStringSensor("output.last"), StringPredicates.containsLiteral("yo yo yo"));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d21654cc/usage/camp/src/test/resources/vanilla-bash-netcat-w-client.yaml
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/resources/vanilla-bash-netcat-w-client.yaml b/usage/camp/src/test/resources/vanilla-bash-netcat-w-client.yaml
index 174a38c..9c12eee 100644
--- a/usage/camp/src/test/resources/vanilla-bash-netcat-w-client.yaml
+++ b/usage/camp/src/test/resources/vanilla-bash-netcat-w-client.yaml
@@ -51,11 +51,13 @@ services:
     brooklyn.config:
       name: output.last
       command: tail -1 server-input
+      period: 100ms
       
   - type: brooklyn.entity.software.ssh.SshCommandSensor
     brooklyn.config:
       name: output.all
       command: cat server-input
+      period: 100ms
 
 # a client to hit netcat
 - type: brooklyn.entity.basic.VanillaSoftwareProcess