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 2022/08/24 15:38:36 UTC

[brooklyn-server] branch master updated: better logging and fix for cache not being set for some reason

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


The following commit(s) were added to refs/heads/master by this push:
     new aa58872d4c better logging and fix for cache not being set for some reason
aa58872d4c is described below

commit aa58872d4c79e2c3bc46c91d4fa0db00c247a388
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Wed Aug 24 16:37:01 2022 +0100

    better logging and fix for cache not being set for some reason
    
    not sure why the cache would ever be null here, but it was in one lookup;
    possibly if the registered type is persisted
---
 .../effector/AddSensorInitializerAbstractProto.java | 21 ++++++++++++++++-----
 .../brooklyn/core/sensor/ssh/SshCommandSensor.java  |  3 +++
 .../brooklyn/core/typereg/BasicRegisteredType.java  |  1 +
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/AddSensorInitializerAbstractProto.java b/core/src/main/java/org/apache/brooklyn/core/effector/AddSensorInitializerAbstractProto.java
index e4c2362a10..902a582e22 100644
--- a/core/src/main/java/org/apache/brooklyn/core/effector/AddSensorInitializerAbstractProto.java
+++ b/core/src/main/java/org/apache/brooklyn/core/effector/AddSensorInitializerAbstractProto.java
@@ -31,9 +31,12 @@ import org.apache.brooklyn.core.typereg.RegisteredTypes;
 import org.apache.brooklyn.util.core.ClassLoaderUtils;
 import org.apache.brooklyn.util.core.flags.BrooklynTypeNameResolution;
 import org.apache.brooklyn.util.core.flags.BrooklynTypeNameResolution.BrooklynTypeNameResolver;
+import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.javalang.Boxing;
 import org.apache.brooklyn.util.time.Duration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Entity initializer which adds a sensor to an entity.
@@ -42,14 +45,22 @@ import org.apache.brooklyn.util.time.Duration;
 @Beta
 public interface AddSensorInitializerAbstractProto<T> extends 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", "java.lang.String");
+    ConfigKey<String> SENSOR_NAME = ConfigKeys.newStringConfigKey("name", "The name of the sensor to create");
+    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);
+    ConfigKey<String> SENSOR_TYPE = ConfigKeys.newStringConfigKey("targetType", "Target type for the value; default String", "java.lang.String");
+
+    Logger LOG = LoggerFactory.getLogger(AddSensorInitializerAbstractProto.class);
 
     @SuppressWarnings("unchecked")
     @Beta
     public static <T> TypeToken<T> getType(Entity entity, String className, String name) {
-        return (TypeToken<T>)(TypeToken) new BrooklynTypeNameResolver("sensor "+name+" on "+entity,
-                RegisteredTypes.getClassLoadingContext(entity), true, true).getTypeToken(className);
+        try {
+            return (TypeToken<T>) (TypeToken) new BrooklynTypeNameResolver("sensor " + name + " on " + entity,
+                    RegisteredTypes.getClassLoadingContext(entity), true, true).getTypeToken(className);
+        } catch (Exception e) {
+            Exceptions.propagateIfFatal(e);
+            LOG.debug("Unable to resolve type "+className+" for sensor "+name+" on "+entity+" (rethrowing)");
+            throw Exceptions.propagateAnnotated("Unable to resolve type "+className+" for sensor "+name+" "+e, e);
+        }
     }
 }
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java b/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java
index 551a14927a..9331c5cbdd 100644
--- a/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java
@@ -249,6 +249,9 @@ public final class SshCommandSensor<T> extends AbstractAddTriggerableSensor<T> {
                 }
             }
 
+            if (result1.isAbsent() && Strings.isNonBlank(input)) {
+                LOG.warn("Unable to convert to "+typeToken+": "+Maybe.Absent.getException(result1)+"\n"+input);
+            }
             return result1.get();
         }
     }
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicRegisteredType.java b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicRegisteredType.java
index 8bb0908148..17752549fb 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicRegisteredType.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicRegisteredType.java
@@ -145,6 +145,7 @@ public class BasicRegisteredType implements RegisteredType {
     
     @Beta  // TODO depending how useful this is, it might be better to replace by a static WeakHashMap in RegisteredTypes
     public ConfigBag getCache() {
+        if (cache==null) cache = new ConfigBag();
         return cache;
     }