modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/CassandraClusterManager.java | 19 +++++++- modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/Deployer.java | 23 ++++++++++ modules/common/cassandra-installer/src/main/java/org/rhq/storage/installer/StorageInstaller.java | 16 ++++++ 3 files changed, 57 insertions(+), 1 deletion(-)
New commits: commit fe6da9b5511a3b4c97c2421079db04020c33c27f Author: John Sanda jsanda@redhat.com Date: Sun Jul 21 21:11:43 2013 -0400
pre-configure internode auth conf file
From testing I have done thus far it appears that a storage node should have its own IP address included in the internode authentication config file. The storage installer updates the auth file to include the node's address as well as and seeds.
diff --git a/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/CassandraClusterManager.java b/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/CassandraClusterManager.java index edf1430..c8bb2ef 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/CassandraClusterManager.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/CassandraClusterManager.java @@ -34,6 +34,7 @@ import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; +import java.net.InetAddress; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -109,6 +110,13 @@ public class CassandraClusterManager {
List<StorageNode> nodes = new ArrayList<StorageNode>(deploymentOptions.getNumNodes()); String seeds = collectionToString(calculateLocalIPAddresses(deploymentOptions.getNumNodes())); + Set<InetAddress> ipAddresses = null; + + try { + ipAddresses = getClusterIPAddresses(); + } catch (IOException e) { + throw new RuntimeException("Failed to get cluster IP addresses", e); + }
for (int i = 0; i < deploymentOptions.getNumNodes(); ++i) { File basedir = new File(deploymentOptions.getClusterDir(), "node" + i); @@ -141,7 +149,7 @@ public class CassandraClusterManager { storageNode.setCqlPort(nodeOptions.getNativeTransportPort()); nodes.add(storageNode);
- updateStorageAuthConf(basedir); + deployer.updateStorageAuthConf(ipAddresses);
installedNodeDirs.add(basedir); } catch (Exception e) { @@ -193,6 +201,15 @@ public class CassandraClusterManager { return i <= seedsArray.length ? seedsArray[i - 1] : ("127.0.0." + i); }
+ private Set<InetAddress> getClusterIPAddresses() throws IOException { + Set<InetAddress> ipAddresses = new HashSet<InetAddress>(); + for (String address : calculateLocalIPAddresses(deploymentOptions.getNumNodes())) { + ipAddresses.add(InetAddress.getByName(address)); + } + + return ipAddresses; + } + private List<StorageNode> calculateNodes() { List<StorageNode> nodes = new ArrayList<StorageNode>(deploymentOptions.getNumNodes()); for (int i = 0; i < deploymentOptions.getNumNodes(); ++i) { diff --git a/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/Deployer.java b/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/Deployer.java index b01ebe9..6547043 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/Deployer.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/Deployer.java @@ -30,13 +30,18 @@ import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; +import java.net.InetAddress; +import java.util.HashSet; import java.util.Map; import java.util.Properties; +import java.util.Set;
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;
import org.rhq.core.util.PropertiesFileUpdate; +import org.rhq.core.util.StringUtil; import org.rhq.core.util.TokenReplacingReader; import org.rhq.core.util.ZipUtil; import org.rhq.core.util.stream.StreamUtil; @@ -171,4 +176,22 @@ public class Deployer { } }
+ public void updateStorageAuthConf(Set<InetAddress> ipAddresses) { + File confDir = new File(deploymentOptions.getBasedir(), "conf"); + File authFile = new File(confDir, "rhq-storage-auth.conf"); + + Set<String> addresses = new HashSet<String>(ipAddresses.size()); + for (InetAddress ipAddress : ipAddresses) { + addresses.add(ipAddress.getHostAddress()); + } + + try { + authFile.delete(); + StreamUtil.copy(new StringReader(StringUtil.collectionToString(addresses, "\n")), + new FileWriter(authFile), true); + } catch (IOException e) { + throw new RuntimeException("Failed to update " + authFile); + } + } + } diff --git a/modules/common/cassandra-installer/src/main/java/org/rhq/storage/installer/StorageInstaller.java b/modules/common/cassandra-installer/src/main/java/org/rhq/storage/installer/StorageInstaller.java index 5c5ac4e..113d66b 100644 --- a/modules/common/cassandra-installer/src/main/java/org/rhq/storage/installer/StorageInstaller.java +++ b/modules/common/cassandra-installer/src/main/java/org/rhq/storage/installer/StorageInstaller.java @@ -34,10 +34,12 @@ import java.net.InetAddress; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Properties; +import java.util.Set;
import javax.management.MBeanServerConnection; import javax.management.ObjectName; @@ -386,6 +388,7 @@ public class StorageInstaller { deployer.unzipDistro(); deployer.applyConfigChanges(); deployer.updateFilePerms(); + deployer.updateStorageAuthConf(getAddresses(hostname, seeds));
log.info("Finished installing RHQ Storage Node.");
@@ -499,6 +502,19 @@ public class StorageInstaller { return dir; }
+ private Set<InetAddress> getAddresses(String hostname, String seeds) throws IOException { + Set<InetAddress> addresses = new HashSet<InetAddress>(); + addresses.add(InetAddress.getByName(hostname)); + + if (!StringUtil.isEmpty(seeds)) { + for (String seed : seeds.split(",")) { + addresses.add(InetAddress.getByName(seed)); + } + } + + return addresses; + } + private PropertiesFileUpdate getServerProperties() { String sysprop = System.getProperty("rhq.server.properties-file"); if (sysprop == null) {
rhq-commits@lists.fedorahosted.org