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/07/09 16:45:12 UTC

[6/8] git commit: Updated following PR review

Updated following PR review


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

Branch: refs/heads/master
Commit: 6572c027b6e33dcded034113f19d9d4a28fe8fff
Parents: 20507af
Author: Martin Harris <gi...@nakomis.com>
Authored: Tue Jun 17 12:31:48 2014 +0100
Committer: Martin Harris <gi...@nakomis.com>
Committed: Tue Jun 17 12:31:48 2014 +0100

----------------------------------------------------------------------
 .../elasticsearch/ElasticSearchCluster.java     |  4 +-
 .../elasticsearch/ElasticSearchClusterImpl.java | 15 +---
 .../elasticsearch/ElasticSearchNodeImpl.java    | 92 +++++++++-----------
 .../ElasticSearchNodeSshDriver.java             |  2 +-
 4 files changed, 44 insertions(+), 69 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6572c027/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchCluster.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchCluster.java b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchCluster.java
index fea777e..a026d17 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchCluster.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchCluster.java
@@ -2,9 +2,7 @@ package brooklyn.entity.nosql.elasticsearch;
 
 import brooklyn.entity.group.DynamicCluster;
 import brooklyn.entity.proxying.ImplementedBy;
-import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
-import brooklyn.event.basic.Sensors;
 import brooklyn.util.flags.SetFromFlag;
 
 /**
@@ -16,5 +14,5 @@ public interface ElasticSearchCluster extends DynamicCluster {
     BasicAttributeSensorAndConfigKey<String> CLUSTER_NAME = new BasicAttributeSensorAndConfigKey<String>(String.class, 
             "elasticsearch.cluster.name", "Name of the ElasticSearch cluster", "BrooklynCluster");
     
-    String getName();
+    String getClusterName();
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6572c027/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterImpl.java
index fe60c4a..32f8706 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterImpl.java
@@ -1,26 +1,15 @@
 package brooklyn.entity.nosql.elasticsearch;
 
-import java.util.Collection;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import brooklyn.entity.Entity;
 import brooklyn.entity.group.DynamicClusterImpl;
 import brooklyn.entity.proxying.EntitySpec;
-import brooklyn.location.Location;
 
 public class ElasticSearchClusterImpl extends DynamicClusterImpl implements ElasticSearchCluster {
     
     private AtomicInteger nextMemberId = new AtomicInteger(0);
-    
-    public ElasticSearchClusterImpl() {
-        
-    }
-    
-    @Override
-    public void start(Collection<? extends Location> locations) {
-        super.start(locations);
-    }
-    
+
     @Override
     protected boolean calculateServiceUp() {
         boolean up = false;
@@ -42,7 +31,7 @@ public class ElasticSearchClusterImpl extends DynamicClusterImpl implements Elas
     }
     
     @Override
-    public String getName() {
+    public String getClusterName() {
         return getConfig(CLUSTER_NAME);
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6572c027/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeImpl.java
index ec01539..e625aff 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeImpl.java
@@ -1,64 +1,66 @@
 package brooklyn.entity.nosql.elasticsearch;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import org.apache.http.client.HttpClient;
-import org.bouncycastle.util.Strings;
-
-import brooklyn.entity.basic.Attributes;
 import brooklyn.entity.basic.SoftwareProcessImpl;
+import brooklyn.event.AttributeSensor;
 import brooklyn.event.feed.http.HttpFeed;
 import brooklyn.event.feed.http.HttpPollConfig;
 import brooklyn.event.feed.http.HttpValueFunctions;
 import brooklyn.event.feed.http.JsonFunctions;
 import brooklyn.location.access.BrooklynAccessUtils;
-import brooklyn.util.exceptions.Exceptions;
-import brooklyn.util.http.HttpTool;
+import brooklyn.util.guava.Functionals;
+import brooklyn.util.guava.Maybe;
+import brooklyn.util.guava.MaybeFunctions;
+import brooklyn.util.guava.TypeTokens;
 import brooklyn.util.http.HttpToolResponse;
 
 import com.google.common.base.Function;
 import com.google.common.base.Functions;
-import com.google.common.collect.ImmutableMap;
 import com.google.common.net.HostAndPort;
 import com.google.gson.JsonElement;
 
 public class ElasticSearchNodeImpl extends SoftwareProcessImpl implements ElasticSearchNode {
     
-    HttpFeed httpFeed;
+    protected static final Function<Maybe<JsonElement>, Maybe<JsonElement>> GET_FIRST_NODE_FROM_NODES = new Function<Maybe<JsonElement>, Maybe<JsonElement>>() {
+        @Override public Maybe<JsonElement> apply(Maybe<JsonElement> input) {
+            if (input.isAbsent()) {
+                return input;
+            }
+            return Maybe.fromNullable(input.get().getAsJsonObject().entrySet().iterator().next().getValue());
+        }
+    };
     
-    public ElasticSearchNodeImpl() {
-        
-    }
+    protected static final Function<HttpToolResponse, Maybe<JsonElement>> GET_FIRST_NODE = Functionals.chain(HttpValueFunctions.jsonContents(), 
+            MaybeFunctions.<JsonElement>wrap(), JsonFunctions.walkM("nodes"), GET_FIRST_NODE_FROM_NODES);
+    
+    
+    HttpFeed httpFeed;
 
     @Override
     public Class<ElasticSearchNodeDriver> getDriverInterface() {
         return ElasticSearchNodeDriver.class;
     }
     
+    protected static final <T> HttpPollConfig<T> getSensorFromNodeStat(AttributeSensor<T> sensor, String... jsonPath) {
+        return new HttpPollConfig<T>(sensor)
+            .onSuccess(Functionals.chain(GET_FIRST_NODE, JsonFunctions.walkM(jsonPath), JsonFunctions.castM(TypeTokens.getRawRawType(sensor.getTypeToken()), null)))
+            .onFailureOrException(Functions.<T>constant(null));
+    }
+    
     @Override
     protected void connectSensors() {
         super.connectSensors();
         Integer rawPort = getAttribute(HTTP_PORT);
         checkNotNull(rawPort, "HTTP_PORT sensors not set for %s; is an acceptable port available?", this);
         HostAndPort hp = BrooklynAccessUtils.getBrooklynAccessibleAddress(this, rawPort);
-        Function<JsonElement, String> getNodeId = new Function<JsonElement, String>() {
-            @Override public String apply(JsonElement input) {
-                return input.getAsJsonObject().entrySet().iterator().next().getKey();
-            }
-        };
-        
-        Function<JsonElement, JsonElement> getFirstNodeFromNodes = new Function<JsonElement, JsonElement>() {
-            @Override public JsonElement apply(JsonElement input) {
-                return input.getAsJsonObject().entrySet().iterator().next().getValue();
+        Function<Maybe<JsonElement>, String> getNodeId = new Function<Maybe<JsonElement>, String>() {
+            @Override public String apply(Maybe<JsonElement> input) {
+                if (input.isAbsent()) {
+                    return null;
+                }
+                return input.get().getAsJsonObject().entrySet().iterator().next().getKey();
             }
         };
-        
-        Function<HttpToolResponse, JsonElement> getFirstNode = HttpValueFunctions.chain(HttpValueFunctions.jsonContents(), 
-            JsonFunctions.walk("nodes"), getFirstNodeFromNodes);
-                
         httpFeed = HttpFeed.builder()
             .entity(this)
             .period(1000)
@@ -66,30 +68,16 @@ public class ElasticSearchNodeImpl extends SoftwareProcessImpl implements Elasti
             .poll(new HttpPollConfig<Boolean>(SERVICE_UP)
                 .onSuccess(HttpValueFunctions.responseCodeEquals(200))
                 .onFailureOrException(Functions.constant(false)))
-                .poll(new HttpPollConfig<String>(NODE_ID)
-                        .onSuccess(HttpValueFunctions.chain(HttpValueFunctions.jsonContents(), JsonFunctions.walk("nodes"), getNodeId))
-                        .onFailureOrException(Functions.constant("")))
-            .poll(new HttpPollConfig<String>(NODE_NAME)
-                .onSuccess(HttpValueFunctions.chain(getFirstNode, JsonFunctions.walk("name"), JsonFunctions.cast(String.class)))
-                .onFailureOrException(Functions.<String>constant(null)))
-            .poll(new HttpPollConfig<Integer>(DOCUMENT_COUNT)
-                .onSuccess(HttpValueFunctions.chain(getFirstNode, JsonFunctions.walk("indices", "docs", "count"), JsonFunctions.cast(Integer.class)))
-                .onFailureOrException(Functions.<Integer>constant(null)))
-            .poll(new HttpPollConfig<Integer>(STORE_BYTES)
-                .onSuccess(HttpValueFunctions.chain(getFirstNode, JsonFunctions.walk("indices", "store", "size_in_bytes"), JsonFunctions.cast(Integer.class)))
-                .onFailureOrException(Functions.<Integer>constant(null)))
-            .poll(new HttpPollConfig<Integer>(GET_TOTAL)
-                .onSuccess(HttpValueFunctions.chain(getFirstNode, JsonFunctions.walk("indices", "get", "total"), JsonFunctions.cast(Integer.class)))
-                .onFailureOrException(Functions.<Integer>constant(null)))
-            .poll(new HttpPollConfig<Integer>(GET_TIME_IN_MILLIS)
-                .onSuccess(HttpValueFunctions.chain(getFirstNode, JsonFunctions.walk("indices", "get", "time_in_millis"), JsonFunctions.cast(Integer.class)))
-                .onFailureOrException(Functions.<Integer>constant(null)))
-            .poll(new HttpPollConfig<Integer>(SEARCH_QUERY_TOTAL)
-                .onSuccess(HttpValueFunctions.chain(getFirstNode, JsonFunctions.walk("indices", "search", "query_total"), JsonFunctions.cast(Integer.class)))
-                .onFailureOrException(Functions.<Integer>constant(null)))
-            .poll(new HttpPollConfig<Integer>(SEARCH_QUERY_TIME_IN_MILLIS)
-                .onSuccess(HttpValueFunctions.chain(getFirstNode, JsonFunctions.walk("indices", "search", "query_time_in_millis"), JsonFunctions.cast(Integer.class)))
-                .onFailureOrException(Functions.<Integer>constant(null)))
+            .poll(new HttpPollConfig<String>(NODE_ID)
+                .onSuccess(Functionals.chain(HttpValueFunctions.jsonContents(), MaybeFunctions.<JsonElement>wrap(), JsonFunctions.walkM("nodes"), getNodeId))
+                .onFailureOrException(Functions.constant("")))
+            .poll(getSensorFromNodeStat(NODE_NAME, "name"))
+            .poll(getSensorFromNodeStat(DOCUMENT_COUNT, "indices", "docs", "count"))
+            .poll(getSensorFromNodeStat(STORE_BYTES, "indices", "store", "size_in_bytes"))
+            .poll(getSensorFromNodeStat(GET_TOTAL, "indices", "get", "total"))
+            .poll(getSensorFromNodeStat(GET_TIME_IN_MILLIS, "indices", "get", "time_in_millis"))
+            .poll(getSensorFromNodeStat(SEARCH_QUERY_TOTAL, "indices", "search", "query_total"))
+            .poll(getSensorFromNodeStat(SEARCH_QUERY_TIME_IN_MILLIS, "indices", "search", "query_time_in_millis"))
             .poll(new HttpPollConfig<String>(CLUSTER_NAME)
                 .onSuccess(HttpValueFunctions.jsonContents("cluster_name", String.class)))
             .build();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6572c027/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeSshDriver.java
index 2dda090..748975b 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeSshDriver.java
@@ -32,8 +32,8 @@ public class ElasticSearchNodeSshDriver extends AbstractSoftwareProcessSshDriver
         String saveAs = resolver.getFilename();
         
         List<String> commands = ImmutableList.<String>builder()
-            .addAll(BashCommands.commandsToDownloadUrlsAs(urls, saveAs))
             .add(BashCommands.installJavaLatestOrFail())
+            .addAll(BashCommands.commandsToDownloadUrlsAs(urls, saveAs))
             .add(String.format("tar zxvf %s", saveAs))
             .build();