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 2017/09/13 16:45:07 UTC
[3/5] brooklyn-server git commit: optimization: skip conversion to
then from TypeToken if we have a raw class as a type
optimization: skip conversion to then from TypeToken if we have a raw class as a type
this was a noticeable expense when doing profiling
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/98dfee22
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/98dfee22
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/98dfee22
Branch: refs/heads/master
Commit: 98dfee22abb9f00464db77f3e86f40d4e9b4d61d
Parents: 330f89e
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Sep 11 15:43:18 2017 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Sep 12 22:12:36 2017 +0100
----------------------------------------------------------------------
.../brooklyn/core/config/BasicConfigKey.java | 41 +++++++++++++-------
.../core/sensor/BasicAttributeSensor.java | 11 ++++--
.../brooklyn/core/sensor/BasicSensor.java | 19 ++++++---
.../apache/brooklyn/core/sensor/Sensors.java | 9 +++--
.../apache/brooklyn/util/guava/TypeTokens.java | 14 +++++++
5 files changed, 66 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/98dfee22/core/src/main/java/org/apache/brooklyn/core/config/BasicConfigKey.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/BasicConfigKey.java b/core/src/main/java/org/apache/brooklyn/core/config/BasicConfigKey.java
index 8560361..8c6c25b 100644
--- a/core/src/main/java/org/apache/brooklyn/core/config/BasicConfigKey.java
+++ b/core/src/main/java/org/apache/brooklyn/core/config/BasicConfigKey.java
@@ -102,7 +102,8 @@ public class BasicConfigKey<T> implements ConfigKeySelfExtracting<T>, Serializab
public abstract static class Builder<T, B extends Builder<T,B>> {
protected String name;
protected Collection<String> deprecatedNames = ImmutableList.of();
- protected TypeToken<T> type;
+ protected Class<T> type;
+ protected TypeToken<T> typeToken;
protected String description;
protected T defaultValue;
protected boolean reconfigurable;
@@ -115,17 +116,21 @@ public class BasicConfigKey<T> implements ConfigKeySelfExtracting<T>, Serializab
public Builder() {
}
public Builder(TypeToken<T> type, String name) {
- this.type = type;
+ this.typeToken = type;
this.name = name;
}
public Builder(Class<T> type, String name) {
- this(TypeToken.of(type), name);
+ this.type = type;
+ this.name = name;
}
public Builder(ConfigKey<T> key) {
this(key.getName(), key);
}
+ @SuppressWarnings("unchecked")
public Builder(String newName, ConfigKey<T> key) {
- this.type = checkNotNull(key.getTypeToken(), "type");
+ TypeToken<T> tt = key.getTypeToken();
+ this.type = (Class<T>) TypeTokens.getRawTypeIfRaw(tt);
+ this.typeToken = TypeTokens.getTypeTokenIfNotRaw(tt);
this.name = checkNotNull(newName, "name");
this.deprecatedNames = checkNotNull(key.getDeprecatedNames(), "deprecatedNames");
description(key.getDescription());
@@ -145,10 +150,10 @@ public class BasicConfigKey<T> implements ConfigKeySelfExtracting<T>, Serializab
return deprecatedNames(val == null ? ImmutableList.of() : ImmutableList.copyOf(val));
}
public B type(Class<T> val) {
- this.type = TypeToken.of(val); return self();
+ this.type = val; return self();
}
public B type(TypeToken<T> val) {
- this.type = val; return self();
+ this.typeToken = val; return self();
}
public B description(String val) {
this.description = val; return self();
@@ -225,32 +230,37 @@ public class BasicConfigKey<T> implements ConfigKeySelfExtracting<T>, Serializab
public BasicConfigKey() { /* for gson */ }
public BasicConfigKey(Class<T> type, String name) {
- this(TypeToken.of(type), name);
+ this(type, null, name, null, null);
}
public BasicConfigKey(Class<T> type, String name, String description) {
- this(TypeToken.of(type), name, description);
+ this(type, null, name, description, null);
}
public BasicConfigKey(Class<T> type, String name, String description, T defaultValue) {
- this(TypeToken.of(type), name, description, defaultValue);
+ this(type, null, name, description, defaultValue);
}
public BasicConfigKey(TypeToken<T> type, String name) {
- this(type, name, name, null);
+ this(null, type, name, name, null);
}
public BasicConfigKey(TypeToken<T> type, String name, String description) {
- this(type, name, description, null);
+ this(null, type, name, description, null);
}
public BasicConfigKey(TypeToken<T> type, String name, String description, T defaultValue) {
+ this(null, type, name, description, defaultValue);
+ }
+
+ // exactly one of typeC or typeT should be non-null
+ private BasicConfigKey(Class<T> typeC, TypeToken<T> typeT, String name, String description, T defaultValue) {
this.description = description;
this.name = checkNotNull(name, "name");
this.deprecatedNames = ImmutableList.of();
- this.type = TypeTokens.getRawTypeIfRaw(checkNotNull(type, "type"));
- this.typeToken = TypeTokens.getTypeTokenIfNotRaw(type);
+ this.type = typeC;
+ this.typeToken = typeT;
this.defaultValue = defaultValue;
this.reconfigurable = false;
@@ -260,8 +270,9 @@ public class BasicConfigKey<T> implements ConfigKeySelfExtracting<T>, Serializab
public BasicConfigKey(Builder<T,?> builder) {
this.name = checkNotNull(builder.name, "name");
this.deprecatedNames = checkNotNull(builder.deprecatedNames, "deprecatedNames");
- this.type = TypeTokens.getRawTypeIfRaw(checkNotNull(builder.type, "type"));
- this.typeToken = TypeTokens.getTypeTokenIfNotRaw(builder.type);
+ TypeTokens.checkCompatibleOneNonNull(builder.type, builder.typeToken);
+ this.type = builder.type;
+ this.typeToken = builder.typeToken;
this.description = builder.description;
this.defaultValue = builder.defaultValue;
this.reconfigurable = builder.reconfigurable;
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/98dfee22/core/src/main/java/org/apache/brooklyn/core/sensor/BasicAttributeSensor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/BasicAttributeSensor.java b/core/src/main/java/org/apache/brooklyn/core/sensor/BasicAttributeSensor.java
index 978e4a4..e03c546 100644
--- a/core/src/main/java/org/apache/brooklyn/core/sensor/BasicAttributeSensor.java
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/BasicAttributeSensor.java
@@ -38,19 +38,24 @@ public class BasicAttributeSensor<T> extends BasicSensor<T> implements Attribute
}
public BasicAttributeSensor(Class<T> type, String name, String description) {
- this(TypeToken.of(type), name, description);
+ this(type, name, description, SensorPersistenceMode.REQUIRED);
}
public BasicAttributeSensor(TypeToken<T> typeToken, String name) {
this(typeToken, name, name);
}
-
public BasicAttributeSensor(TypeToken<T> typeToken, String name, String description) {
this(typeToken, name, description, SensorPersistenceMode.REQUIRED);
}
+ public BasicAttributeSensor(Class<T> type, String name, String description, SensorPersistenceMode persistence) {
+ this(type, null, name, description, persistence);
+ }
public BasicAttributeSensor(TypeToken<T> typeToken, String name, String description, SensorPersistenceMode persistence) {
- super(typeToken, name, description);
+ this(null, typeToken, name, description, persistence);
+ }
+ public BasicAttributeSensor(Class<T> type, TypeToken<T> typeToken, String name, String description, SensorPersistenceMode persistence) {
+ super(type, typeToken, name, description);
this.persistence = checkNotNull(persistence, "persistence");
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/98dfee22/core/src/main/java/org/apache/brooklyn/core/sensor/BasicSensor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/BasicSensor.java b/core/src/main/java/org/apache/brooklyn/core/sensor/BasicSensor.java
index f5589d4..a5a6a35 100644
--- a/core/src/main/java/org/apache/brooklyn/core/sensor/BasicSensor.java
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/BasicSensor.java
@@ -46,21 +46,28 @@ public class BasicSensor<T> implements Sensor<T> {
private String description;
private transient List<String> nameParts;
- // FIXME In groovy, fields were `public final` with a default constructor; do we need the gson?
- public BasicSensor() { /* for gson */ }
+ // constructor for json/gson (can probably be private?)
+ public BasicSensor() {}
/** name is typically a dot-separated identifier; description is optional */
public BasicSensor(Class<T> type, String name) {
- this(type, name, name);
+ this(type, null, name, name);
}
public BasicSensor(Class<T> type, String name, String description) {
- this(TypeToken.of(type), name, description);
+ this(type, null, name, description);
}
+ @SuppressWarnings("unchecked")
public BasicSensor(TypeToken<T> typeToken, String name, String description) {
- this.typeToken = TypeTokens.getTypeTokenIfNotRaw(checkNotNull(typeToken, "typeToken"));
- this.type = TypeTokens.getRawTypeIfRaw(typeToken);
+ this((Class<T>)TypeTokens.getRawTypeIfRaw(typeToken), TypeTokens.getTypeTokenIfNotRaw(checkNotNull(typeToken, "typeToken")),
+ checkNotNull(name, "name"), description);
+ }
+
+ protected BasicSensor(Class<T> type, TypeToken<T> typeToken, String name, String description) {
+ TypeTokens.checkCompatibleOneNonNull(type, typeToken);
+ this.typeToken = typeToken;
+ this.type = type;
this.name = checkNotNull(name, "name");
this.description = description;
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/98dfee22/core/src/main/java/org/apache/brooklyn/core/sensor/Sensors.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/Sensors.java b/core/src/main/java/org/apache/brooklyn/core/sensor/Sensors.java
index 13bf6f2..2d701b38 100644
--- a/core/src/main/java/org/apache/brooklyn/core/sensor/Sensors.java
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/Sensors.java
@@ -54,7 +54,8 @@ public class Sensors {
@Beta
public static class Builder<T> {
private String name;
- private TypeToken<T> type;
+ private Class<T> typeC;
+ private TypeToken<T> typeT;
private String description;
private SensorPersistenceMode persistence = SensorPersistenceMode.REQUIRED;
@@ -64,10 +65,10 @@ public class Sensors {
this.name = checkNotNull(val, "name"); return this;
}
public Builder<T> type(Class<T> val) {
- return type(TypeToken.of(val));
+ this.typeC = val; return this;
}
public Builder<T> type(TypeToken<T> val) {
- this.type = checkNotNull(val, "type"); return this;
+ this.typeT = val; return this;
}
public Builder<T> description(String val) {
this.description = val; return this;
@@ -76,7 +77,7 @@ public class Sensors {
this.persistence = val; return this;
}
public AttributeSensor<T> build() {
- return new BasicAttributeSensor<T>(type, name, description, persistence);
+ return new BasicAttributeSensor<T>(typeC, typeT, name, description, persistence);
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/98dfee22/utils/common/src/main/java/org/apache/brooklyn/util/guava/TypeTokens.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/guava/TypeTokens.java b/utils/common/src/main/java/org/apache/brooklyn/util/guava/TypeTokens.java
index b37ea33..188f328 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/guava/TypeTokens.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/guava/TypeTokens.java
@@ -68,5 +68,19 @@ public class TypeTokens {
public static <T> Class<T> getRawRawType(TypeToken<T> token) {
return (Class)token.getRawType();
}
+
+ /** Checks that if both type and token are supplied, either exactly one is null, or
+ * they both refer to the same non-null type */
+ public static <T> void checkCompatibleOneNonNull(Class<? super T> type, TypeToken<T> typeToken) {
+ if ((type==null && typeToken!=null) || (type!=null && typeToken==null)) {
+ return;
+ }
+ if (type==null && typeToken==null) {
+ throw new NullPointerException("Type not set (neither class or type token)");
+ }
+ if (!type.equals(typeToken.getRawType())) {
+ throw new NullPointerException("Invalid types, token is "+typeToken+" (raw "+typeToken.getRawType()+") but class is "+type);
+ }
+ }
}