modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
| 53 +++++++++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageConfigurationException.java
| 23 ++++
2 files changed, 71 insertions(+), 5 deletions(-)
New commits:
commit 69656f42348a8ee43e83e77d1d0bc565b290ba8f
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Jul 31 21:59:34 2013 -0400
adding initial support for setting gossip port for new storage node
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
index 1c96e27..bf25daf 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
@@ -94,6 +94,7 @@ import
org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
import org.rhq.enterprise.server.rest.reporting.MeasurementConverter;
import org.rhq.enterprise.server.scheduler.SchedulerLocal;
import org.rhq.enterprise.server.scheduler.jobs.StorageNodeMaintenanceJob;
+import org.rhq.enterprise.server.storage.StorageConfigurationException;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -214,7 +215,7 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
schedule.setOperationName("updateKnownNodes");
Configuration parameters = new Configuration();
- parameters.put(createPropertyListOfAddresses("ipAddresses",
combine(getStorageNodes(), newStorageNode)));
+ parameters.put(createPropertyListOfAddresses("ipAddresses",
combine(getClusteredStorageNodes(), newStorageNode)));
schedule.setParameters(parameters);
operationManager.scheduleGroupOperation(subjectManager.getOverlord(), schedule);
@@ -451,6 +452,11 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
return query.getResultList();
}
+ private List<StorageNode> getClusteredStorageNodes() {
+ return entityManager.createNamedQuery(StorageNode.QUERY_FIND_ALL_BY_MODE,
StorageNode.class)
+ .setParameter("operationMode",
OperationMode.NORMAL).getResultList();
+ }
+
@Override
@RequiredPermission(Permission.MANAGE_SETTINGS)
public PageList<StorageNode> findStorageNodesByCriteria(Subject subject,
StorageNodeCriteria criteria) {
@@ -840,7 +846,7 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
log.info("Preparing to bootstrap " + storageNode + " into
cluster...");
}
- List<StorageNode> existingStorageNodes = getStorageNodes();
+ List<StorageNode> existingStorageNodes = getClusteredStorageNodes();
ResourceOperationSchedule schedule = new ResourceOperationSchedule();
schedule.setResource(storageNode.getResource());
@@ -850,15 +856,52 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
Configuration parameters = new Configuration();
parameters.put(new PropertySimple("cqlPort",
existingStorageNodes.get(0).getCqlPort()));
- // TODO need to add support for storage_port in cassandra/storage plugins
- parameters.put(new PropertySimple("gossipPort", 7100));
- parameters.put(createPropertyListOfAddresses("storageNodeIPAddresses",
getStorageNodes()));
+ parameters.put(new PropertySimple("gossipPort",
getGossipPort(storageNode, existingStorageNodes)));
+ parameters.put(createPropertyListOfAddresses("storageNodeIPAddresses",
getClusteredStorageNodes()));
schedule.setParameters(parameters);
operationManager.scheduleResourceOperation(subjectManager.getOverlord(),
schedule);
}
+ private Integer getGossipPort(StorageNode newStorageNode, List<StorageNode>
storageNodes) {
+ if (log.isInfoEnabled()) {
+ log.info("Looking up gossip port for new storage node " +
newStorageNode);
+ }
+ try {
+ StorageNode node = null;
+ Configuration resourceConfig = null;
+ for (StorageNode storageNode : storageNodes) {
+ resourceConfig =
configurationManager.getLiveResourceConfiguration(subjectManager.getOverlord(),
+ storageNode.getResource().getId(), false);
+ if (resourceConfig == null) {
+ log.warn("Failed to load resource configuration for storage node
" + newStorageNode.getResource());
+ } else {
+ node = storageNode;
+ break;
+ }
+ }
+ if (resourceConfig == null) {
+ log.error("Failed to obtain gossip port from existing storage
nodes");
+ throw new StorageConfigurationException("Failed to obtain gossip
port from existing storage nodes");
+ }
+
+ PropertySimple property = resourceConfig.getSimple("gossipPort");
+ if (property == null) {
+ throw new StorageConfigurationException("The resource configuration
for " + node.getResource() +
+ "did not include the required property [gossipPort]");
+ }
+ Integer port = property.getIntegerValue();
+ log.info("Found gossip port set to " + port);
+ return property.getIntegerValue();
+ } catch (Exception e) {
+ if (e instanceof StorageConfigurationException) {
+ throw (StorageConfigurationException) e;
+ }
+ throw new RuntimeException("An error occurred while trying to obtain the
gossip port", e);
+ }
+ }
+
@Override
public void runAddNodeMaintenance() {
log.info("Preparing to schedule addNodeMaintenance on the storage
cluster...");
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageConfigurationException.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageConfigurationException.java
new file mode 100644
index 0000000..dc616a8
--- /dev/null
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageConfigurationException.java
@@ -0,0 +1,23 @@
+package org.rhq.enterprise.server.storage;
+
+/**
+ * @author John Sanda
+ */
+public class StorageConfigurationException extends RuntimeException {
+
+ public StorageConfigurationException() {
+ super();
+ }
+
+ public StorageConfigurationException(String message) {
+ super(message);
+ }
+
+ public StorageConfigurationException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public StorageConfigurationException(Throwable cause) {
+ super(cause);
+ }
+}
Show replies by date