brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aleds...@apache.org
Subject [1/3] incubator-brooklyn git commit: set IS_IN_CLUSTER on couchbase primary node, fix problem noticed in #427
Date Tue, 10 Mar 2015 12:41:59 GMT
Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 0c74027ad -> fd22cc070


set IS_IN_CLUSTER on couchbase primary node, fix problem noticed in #427


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

Branch: refs/heads/master
Commit: d26acd87c8dc8f995c94bf4f2deb1e8f8f2a018e
Parents: beeb4d8
Author: Alex Heneveld <alex.heneveld@cloudsoftcorp.com>
Authored: Thu Jan 29 12:26:08 2015 +0000
Committer: Alex Heneveld <alex.heneveld@cloudsoftcorp.com>
Committed: Thu Jan 29 12:26:08 2015 +0000

----------------------------------------------------------------------
 .../nosql/couchbase/CouchbaseClusterImpl.java   |  9 +++++--
 .../entity/nosql/couchbase/CouchbaseNode.java   |  3 ++-
 .../CouchbaseSyncGatewaySshDriver.java          | 25 +++++++-------------
 3 files changed, 17 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d26acd87/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
index 7552928..0eb2586 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
@@ -229,8 +229,13 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements
Couchbas
                 }
                 
                 ((CouchbaseNode)getPrimaryNode()).rebalance();
-            } else if (getQuorumSize()>1) {
-                log.warn(this+" is not quorate; will likely fail later, but proceeding for
now");
+            } else {
+                if (getQuorumSize()>1) {
+                    log.warn(this+" is not quorate; will likely fail later, but proceeding
for now");
+                }
+                if (!serversToAdd.isEmpty()) {
+                    ((EntityInternal) Iterables.getOnlyElement(serversToAdd)).setAttribute(CouchbaseNode.IS_IN_CLUSTER,
true);
+                }
             }
                 
             if (getConfig(CREATE_BUCKETS)!=null) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d26acd87/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNode.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNode.java
b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNode.java
index f09114d..cb9f264 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNode.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNode.java
@@ -80,7 +80,8 @@ public interface CouchbaseNode extends SoftwareProcess {
     PortAttributeSensorAndConfigKey NODE_DATA_EXCHANGE_PORT_RANGE_END = new PortAttributeSensorAndConfigKey("couchbase.nodeDataExchangePortRangeEnd",
"Node data exchange Port Range End", "21199+");
 
     AttributeSensor<Boolean> IS_PRIMARY_NODE = Sensors.newBooleanSensor("couchbase.isPrimaryNode",
"flag to determine if the current couchbase node is the primary node for the cluster");
-    AttributeSensor<Boolean> IS_IN_CLUSTER = Sensors.newBooleanSensor("couchbase.isInCluster",
"flag to determine if the current couchbase node has been added to a cluster");
+    AttributeSensor<Boolean> IS_IN_CLUSTER = Sensors.newBooleanSensor("couchbase.isInCluster",
"flag to determine if the current couchbase node has been added to a cluster, "
+        + "including being the first / primary node");
     AttributeSensor<URI> COUCHBASE_WEB_ADMIN_URL = Attributes.MAIN_URI;
     
     // Interesting stats

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d26acd87/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewaySshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewaySshDriver.java
b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewaySshDriver.java
index 164f60a..d21f9b5 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewaySshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewaySshDriver.java
@@ -26,12 +26,11 @@ import static java.lang.String.format;
 
 import java.util.List;
 
-import javax.annotation.Nullable;
-
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.AbstractSoftwareProcessSshDriver;
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.basic.EntityLocal;
+import brooklyn.entity.basic.EntityPredicates;
 import brooklyn.entity.drivers.downloads.DownloadResolver;
 import brooklyn.event.basic.DependentConfiguration;
 import brooklyn.location.OsDetails;
@@ -42,7 +41,6 @@ import brooklyn.util.time.Duration;
 import brooklyn.util.time.Time;
 
 import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -88,22 +86,15 @@ public class CouchbaseSyncGatewaySshDriver extends AbstractSoftwareProcessSshDri
         // Even once the bucket has published its API URL, it can still take a couple of
seconds for it to become available
         Time.sleep(10 * 1000);
         if (cbNode instanceof CouchbaseCluster) {
-            Optional<Entity> cbClusterNode = Iterables.tryFind(cbNode.getAttribute(CouchbaseCluster.GROUP_MEMBERS),
new Predicate<Entity>() {
-
-                @Override
-                public boolean apply(@Nullable Entity entity) {
-                    // Must either be recognised by a cluster as added, or be the primary
node in a cluster of ONE.
-                    return entity instanceof CouchbaseNode
-                        && (Boolean.TRUE.equals(entity.getAttribute(CouchbaseNode.IS_IN_CLUSTER))
-                            || Boolean.TRUE.equals(entity.getAttribute(CouchbaseNode.IS_PRIMARY_NODE)));
-                }
-            });
-            if (cbClusterNode.isPresent()) {
-                cbNode = cbClusterNode.get();
-            } else {
+            // in_cluster now applies even to a node in a cluster of size 1
+            Optional<Entity> cbClusterNode = Iterables.tryFind(cbNode.getAttribute(CouchbaseCluster.GROUP_MEMBERS),
+                Predicates.and(Predicates.instanceOf(CouchbaseNode.class), EntityPredicates.attributeEqualTo(CouchbaseNode.IS_IN_CLUSTER,
Boolean.TRUE)));
+            
+            if (!cbClusterNode.isPresent()) {
                 throw new IllegalArgumentException(format("The cluster %s does not contain
any suitable Couchbase nodes to connect to..", cbNode.getId()));
             }
-
+            
+            cbNode = cbClusterNode.get();
         }
         String hostname = cbNode.getAttribute(CouchbaseNode.HOSTNAME);
         String webPort = cbNode.getAttribute(CouchbaseNode.COUCHBASE_WEB_ADMIN_PORT).toString();


Mime
View raw message