modules/common/cassandra-ccm/cassandra-ccm-arquillian/src/main/java/org/rhq/cassandra/ccm/arquillian/CCMSuiteDeploymentExtension.java | 4 modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Deploy.java | 4 modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Shutdown.java | 4 modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Start.java | 4 modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/CassandraClusterManager.java | 5 modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/DeploymentOptions.java | 2 modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/DeploymentOptionsFactory.java | 45 ++++ modules/common/cassandra-ccm/cassandra-ccm-core/src/test/java/org/rhq/cassandra/DeployerITest.java | 3 modules/common/cassandra-ccm/cassandra-ccm-maven-plugin/src/main/java/org/rhq/cassandra/ccm/maven/DeployMojo.java | 4 modules/common/cassandra-ccm/cassandra-ccm-maven-plugin/src/main/java/org/rhq/cassandra/ccm/maven/ShutdownMojo.java | 4 modules/common/cassandra-ccm/cassandra-ccm-testng/src/main/java/org/rhq/cassandra/CCMTestNGListener.java | 3 modules/common/cassandra-installer/src/main/java/org/rhq/storage/installer/StorageInstaller.java | 4 modules/common/cassandra-schema/pom.xml | 6 modules/common/cassandra-schema/src/main/java/org/rhq/cassandra/schema/SchemaManager.java | 25 -- modules/common/cassandra-util/pom.xml | 75 +++++++ modules/common/cassandra-util/src/main/java/org/rhq/cassandra/util/ClusterBuilder.java | 96 ++++++++++ modules/common/pom.xml | 1 modules/enterprise/server/installer/pom.xml | 5 modules/enterprise/server/installer/src/main/resources/module/main/module.xml | 1 modules/enterprise/server/jar/pom.xml | 12 + modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cassandra/SessionManagerBean.java | 6 modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/RHQControl.java | 5 modules/helpers/metrics-simulator/pom.xml | 12 - modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java | 69 +++++-- modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorCLI.java | 5 modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/ClusterConfig.java | 2 modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlan.java | 2 27 files changed, 341 insertions(+), 67 deletions(-)
New commits: commit a070273a87553a1dd9839206d4e3db8bdc9614f7 Author: John Sanda jsanda@redhat.com Date: Thu Apr 25 22:30:06 2013 -0400
log the root cause when a command throws an exception
diff --git a/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/RHQControl.java b/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/RHQControl.java index 63ba9d8..8a6dd8f 100644 --- a/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/RHQControl.java +++ b/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/RHQControl.java @@ -32,6 +32,8 @@ import org.apache.commons.cli.HelpFormatter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;
+import org.rhq.core.util.exception.ThrowableUtil; + /** * @author John Sanda */ @@ -100,7 +102,8 @@ public class RHQControl { control.exec(args); System.exit(0); } catch (RHQControlException e) { - control.log.error("There was an unxpected error", e); + Throwable rootCause = ThrowableUtil.getRootCause(e); + control.log.error("There was an unxpected error: " + rootCause.getMessage(), rootCause); System.exit(1); } }
commit 2e2ca51bf51af7886ed8e226263a8d373302a580 Author: John Sanda jsanda@redhat.com Date: Thu Apr 25 22:24:22 2013 -0400
[BZ 907485 956878] Configure storage node defaults to work with OpenJDK and IBM JDK
diff --git a/modules/common/cassandra-ccm/cassandra-ccm-arquillian/src/main/java/org/rhq/cassandra/ccm/arquillian/CCMSuiteDeploymentExtension.java b/modules/common/cassandra-ccm/cassandra-ccm-arquillian/src/main/java/org/rhq/cassandra/ccm/arquillian/CCMSuiteDeploymentExtension.java index 1f28d2b..f456511 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-arquillian/src/main/java/org/rhq/cassandra/ccm/arquillian/CCMSuiteDeploymentExtension.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-arquillian/src/main/java/org/rhq/cassandra/ccm/arquillian/CCMSuiteDeploymentExtension.java @@ -59,6 +59,7 @@ import org.rhq.cassandra.CassandraClusterManager; import org.rhq.cassandra.CassandraNode; import org.rhq.cassandra.ClusterInitService; import org.rhq.cassandra.DeploymentOptions; +import org.rhq.cassandra.DeploymentOptionsFactory; import org.rhq.cassandra.schema.SchemaManager;
/** @@ -81,7 +82,8 @@ public class CCMSuiteDeploymentExtension implements LoadableExtension { File basedir = new File("target"); File clusterDir = new File(basedir, "cassandra");
- DeploymentOptions options = new DeploymentOptions(); + DeploymentOptionsFactory factory = new DeploymentOptionsFactory(); + DeploymentOptions options = factory.newDeploymentOptions(); options.setClusterDir(clusterDir.getAbsolutePath()); options.setUsername("rhqadmin"); options.setPassword("rhqadmin"); diff --git a/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Deploy.java b/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Deploy.java index 9fcf8fc..9ba5411 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Deploy.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Deploy.java @@ -13,6 +13,7 @@ import org.rhq.cassandra.CassandraClusterManager; import org.rhq.cassandra.CassandraNode; import org.rhq.cassandra.ClusterInitService; import org.rhq.cassandra.DeploymentOptions; +import org.rhq.cassandra.DeploymentOptionsFactory; import org.rhq.core.util.PropertiesFileUpdate; import org.rhq.core.util.StringUtil;
@@ -49,7 +50,8 @@ public class Deploy extends CCMCommand { if (cmdLine.hasOption("h")) { printUsage(); } else { - DeploymentOptions deploymentOptions = new DeploymentOptions(); + DeploymentOptionsFactory factory = new DeploymentOptionsFactory(); + DeploymentOptions deploymentOptions = factory.newDeploymentOptions(); if (cmdLine.hasOption("n")) { int numNodes = Integer.parseInt(cmdLine.getOptionValue("n")); deploymentOptions.setNumNodes(numNodes); diff --git a/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Shutdown.java b/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Shutdown.java index 4df90f3..b396a45 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Shutdown.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Shutdown.java @@ -5,6 +5,7 @@ import org.apache.commons.cli.Options;
import org.rhq.cassandra.CassandraClusterManager; import org.rhq.cassandra.DeploymentOptions; +import org.rhq.cassandra.DeploymentOptionsFactory;
/** * @author John Sanda @@ -39,7 +40,8 @@ public class Shutdown extends CCMCommand { if (cmdLine.hasOption("h")) { printUsage(); } else { - DeploymentOptions deploymentOptions = new DeploymentOptions(); + DeploymentOptionsFactory factory = new DeploymentOptionsFactory(); + DeploymentOptions deploymentOptions = factory.newDeploymentOptions(); CassandraClusterManager ccm = new CassandraClusterManager(deploymentOptions);
if (cmdLine.hasOption("n")) { diff --git a/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Start.java b/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Start.java index 1f7e8c4..82bb8f7 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Start.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-cli/src/main/java/org/rhq/cassandra/ccm/cli/command/Start.java @@ -5,6 +5,7 @@ import org.apache.commons.cli.Options;
import org.rhq.cassandra.CassandraClusterManager; import org.rhq.cassandra.DeploymentOptions; +import org.rhq.cassandra.DeploymentOptionsFactory;
/** * @author John Sanda @@ -38,7 +39,8 @@ public class Start extends CCMCommand { if (commandLine.hasOption("h")) { printUsage(); } else { - DeploymentOptions deploymentOptions = new DeploymentOptions(); + DeploymentOptionsFactory factory = new DeploymentOptionsFactory(); + DeploymentOptions deploymentOptions = factory.newDeploymentOptions(); CassandraClusterManager ccm = new CassandraClusterManager(deploymentOptions); // TODO handle -n option if (commandLine.hasOption("n")) { 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 6e95af4..22a1cff 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 @@ -61,7 +61,7 @@ public class CassandraClusterManager { private List<File> installedNodeDirs = new ArrayList<File>();
public CassandraClusterManager() { - this(new DeploymentOptions()); + this(new DeploymentOptionsFactory().newDeploymentOptions()); }
public CassandraClusterManager(DeploymentOptions deploymentOptions) { @@ -107,7 +107,8 @@ public class CassandraClusterManager { File basedir = new File(deploymentOptions.getClusterDir(), "node" + i); String address = getLocalIPAddress(i + 1);
- DeploymentOptions nodeOptions = new DeploymentOptions(); + DeploymentOptionsFactory factory = new DeploymentOptionsFactory(); + DeploymentOptions nodeOptions = factory.newDeploymentOptions(); nodeOptions.setSeeds(seeds); nodeOptions.setJmxPort(deploymentOptions.getJmxPort() + i); nodeOptions.setBasedir(basedir.getAbsolutePath()); diff --git a/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/DeploymentOptions.java b/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/DeploymentOptions.java index a83b1d5..f2c14ce 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/DeploymentOptions.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/DeploymentOptions.java @@ -93,7 +93,7 @@ public class DeploymentOptions { private String logFileName; private String stackSize;
- public DeploymentOptions() { + DeploymentOptions() { }
/** diff --git a/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/DeploymentOptionsFactory.java b/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/DeploymentOptionsFactory.java new file mode 100644 index 0000000..7e585ac --- /dev/null +++ b/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/DeploymentOptionsFactory.java @@ -0,0 +1,45 @@ +/* + * + * * RHQ Management Platform + * * Copyright (C) 2005-2012 Red Hat, Inc. + * * All rights reserved. + * * + * * This program is free software; you can redistribute it and/or modify + * * it under the terms of the GNU General Public License, version 2, as + * * published by the Free Software Foundation, and/or the GNU Lesser + * * General Public License, version 2.1, also as published by the Free + * * Software Foundation. + * * + * * This program is distributed in the hope that it will be useful, + * * but WITHOUT ANY WARRANTY; without even the implied warranty of + * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * * GNU General Public License and the GNU Lesser General Public License + * * for more details. + * * + * * You should have received a copy of the GNU General Public License + * * and the GNU Lesser General Public License along with this program; + * * if not, write to the Free Software Foundation, Inc., + * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +package org.rhq.cassandra; + +/** + * @author John Sanda + */ +public class DeploymentOptionsFactory { + + public DeploymentOptions newDeploymentOptions() { + String arch = System.getProperty("os.arch"); + String javaVMName = System.getProperty("java.vm.name"); + String javaVersion = System.getProperty("java.version"); + + if (arch.equals("i386") && javaVMName.startsWith("OpenJDK") && javaVersion.startsWith("1.6")) { + System.setProperty("rhq.cassandra.stack.size", "240k"); + } + + return new DeploymentOptions(); + } + +} diff --git a/modules/common/cassandra-ccm/cassandra-ccm-core/src/test/java/org/rhq/cassandra/DeployerITest.java b/modules/common/cassandra-ccm/cassandra-ccm-core/src/test/java/org/rhq/cassandra/DeployerITest.java index 0e8f062..91a5459 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-core/src/test/java/org/rhq/cassandra/DeployerITest.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-core/src/test/java/org/rhq/cassandra/DeployerITest.java @@ -58,7 +58,8 @@ public class DeployerITest { deployDir = new File(System.getProperty("rhq.storage.deploy-dir", System.getProperty("java.io.tmpdir"))); confDir = new File(deployDir, "conf");
- DeploymentOptions deploymentOptions = new DeploymentOptions(); + DeploymentOptionsFactory factory = new DeploymentOptionsFactory(); + DeploymentOptions deploymentOptions = factory.newDeploymentOptions(); deploymentOptions.setBasedir(deployDir.getAbsolutePath()); deploymentOptions.setCommitLogDir("/var/lib/rhq/storage/commit_log"); deploymentOptions.setDataDir("/var/lib/rhq/storage/data"); diff --git a/modules/common/cassandra-ccm/cassandra-ccm-maven-plugin/src/main/java/org/rhq/cassandra/ccm/maven/DeployMojo.java b/modules/common/cassandra-ccm/cassandra-ccm-maven-plugin/src/main/java/org/rhq/cassandra/ccm/maven/DeployMojo.java index fa9e561..24621ed 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-maven-plugin/src/main/java/org/rhq/cassandra/ccm/maven/DeployMojo.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-maven-plugin/src/main/java/org/rhq/cassandra/ccm/maven/DeployMojo.java @@ -37,6 +37,7 @@ import org.apache.maven.plugins.annotations.Parameter; import org.rhq.cassandra.CassandraClusterManager; import org.rhq.cassandra.CassandraNode; import org.rhq.cassandra.DeploymentOptions; +import org.rhq.cassandra.DeploymentOptionsFactory; import org.rhq.cassandra.schema.SchemaManager;
/** @@ -53,7 +54,8 @@ public class DeployMojo extends AbstractMojo {
@Override public void execute() throws MojoExecutionException, MojoFailureException { - DeploymentOptions deploymentOptions = new DeploymentOptions(); + DeploymentOptionsFactory factory = new DeploymentOptionsFactory(); + DeploymentOptions deploymentOptions = factory.newDeploymentOptions(); deploymentOptions.setClusterDir(clusterDir.getAbsolutePath()); deploymentOptions.setNumNodes(numNodes);
diff --git a/modules/common/cassandra-ccm/cassandra-ccm-maven-plugin/src/main/java/org/rhq/cassandra/ccm/maven/ShutdownMojo.java b/modules/common/cassandra-ccm/cassandra-ccm-maven-plugin/src/main/java/org/rhq/cassandra/ccm/maven/ShutdownMojo.java index 1d84e9c..2c9fdec 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-maven-plugin/src/main/java/org/rhq/cassandra/ccm/maven/ShutdownMojo.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-maven-plugin/src/main/java/org/rhq/cassandra/ccm/maven/ShutdownMojo.java @@ -35,6 +35,7 @@ import org.apache.maven.plugins.annotations.Parameter;
import org.rhq.cassandra.CassandraClusterManager; import org.rhq.cassandra.DeploymentOptions; +import org.rhq.cassandra.DeploymentOptionsFactory;
/** * @author John Sanda @@ -48,7 +49,8 @@ public class ShutdownMojo extends AbstractMojo { @Override public void execute() throws MojoExecutionException, MojoFailureException { getLog().info("Shutting down cluster in " + clusterDir); - DeploymentOptions deploymentOptions = new DeploymentOptions(); + DeploymentOptionsFactory factory = new DeploymentOptionsFactory(); + DeploymentOptions deploymentOptions = factory.newDeploymentOptions(); deploymentOptions.setClusterDir(clusterDir.getAbsolutePath());
long start = System.currentTimeMillis(); diff --git a/modules/common/cassandra-ccm/cassandra-ccm-testng/src/main/java/org/rhq/cassandra/CCMTestNGListener.java b/modules/common/cassandra-ccm/cassandra-ccm-testng/src/main/java/org/rhq/cassandra/CCMTestNGListener.java index e883036..b966b60 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-testng/src/main/java/org/rhq/cassandra/CCMTestNGListener.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-testng/src/main/java/org/rhq/cassandra/CCMTestNGListener.java @@ -82,7 +82,8 @@ public class CCMTestNGListener implements IInvokedMethodListener { }
int numNodes = annotation.numNodes(); - DeploymentOptions deploymentOptions = new DeploymentOptions(); + DeploymentOptionsFactory factory = new DeploymentOptionsFactory(); + DeploymentOptions deploymentOptions = factory.newDeploymentOptions(); deploymentOptions.setClusterDir(clusterDir); deploymentOptions.setNumNodes(numNodes); deploymentOptions.setUsername(annotation.username()); 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 66849a8..ae2869b 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 @@ -56,6 +56,7 @@ import org.apache.commons.logging.LogFactory;
import org.rhq.cassandra.Deployer; import org.rhq.cassandra.DeploymentOptions; +import org.rhq.cassandra.DeploymentOptionsFactory; import org.rhq.cassandra.installer.RMIContextFactory; import org.rhq.core.util.PropertiesFileUpdate; import org.rhq.core.util.StringUtil; @@ -179,7 +180,8 @@ public class StorageInstaller { printUsage(); return STATUS_SHOW_USAGE; } else { - DeploymentOptions deploymentOptions = new DeploymentOptions(); + DeploymentOptionsFactory factory = new DeploymentOptionsFactory(); + DeploymentOptions deploymentOptions = factory.newDeploymentOptions();
File basedir; if (cmdLine.hasOption("dir")) { diff --git a/modules/common/cassandra-schema/pom.xml b/modules/common/cassandra-schema/pom.xml index e60f833..4651a7e 100644 --- a/modules/common/cassandra-schema/pom.xml +++ b/modules/common/cassandra-schema/pom.xml @@ -20,6 +20,12 @@ </dependency>
<dependency> + <groupId>${project.groupId}</groupId> + <artifactId>rhq-cassandra-util</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>${cassandra.driver.version}</version> diff --git a/modules/common/cassandra-schema/src/main/java/org/rhq/cassandra/schema/SchemaManager.java b/modules/common/cassandra-schema/src/main/java/org/rhq/cassandra/schema/SchemaManager.java index 4982c16..8b44bd2 100644 --- a/modules/common/cassandra-schema/src/main/java/org/rhq/cassandra/schema/SchemaManager.java +++ b/modules/common/cassandra-schema/src/main/java/org/rhq/cassandra/schema/SchemaManager.java @@ -25,13 +25,10 @@
package org.rhq.cassandra.schema;
-import static com.datastax.driver.core.ProtocolOptions.Compression.SNAPPY; - import java.util.ArrayList; import java.util.List;
import com.datastax.driver.core.Cluster; -import com.datastax.driver.core.ProtocolOptions; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Session; import com.datastax.driver.core.SimpleAuthInfoProvider; @@ -41,6 +38,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;
import org.rhq.cassandra.CassandraNode; +import org.rhq.cassandra.util.ClusterBuilder; import org.rhq.core.util.StringUtil;
/** @@ -60,8 +58,6 @@ public class SchemaManager {
private List<CassandraNode> nodes = new ArrayList<CassandraNode>();
- private ProtocolOptions.Compression compression = SNAPPY; - public SchemaManager(String username, String password, String... nodes) { try { this.username = username; @@ -90,20 +86,6 @@ public class SchemaManager { } }
- public SchemaManager(String username, String password, List<CassandraNode> nodes, - ProtocolOptions.Compression compression) { - try { - this.username = username; - this.password = password; - this.nodes = nodes; - this.compression = compression; - - initCluster(); - } catch (NoHostAvailableException e) { - throw new RuntimeException("Unable create session.", e); - } - } - private void initCluster() throws NoHostAvailableException { String[] hostNames = new String[nodes.size()]; for (int i = 0; i < hostNames.length; ++i) { @@ -113,16 +95,15 @@ public class SchemaManager { if (log.isDebugEnabled()) { log.debug("Initializing session to connect to " + StringUtil.arrayToString(hostNames)); } else { - log.debug("Initializing session"); + log.info("Initializing session"); }
SimpleAuthInfoProvider authInfoProvider = new SimpleAuthInfoProvider(); authInfoProvider.add("username", "cassandra").add("password", "cassandra");
- Cluster cluster = Cluster.builder() + Cluster cluster = new ClusterBuilder() .addContactPoints(hostNames) .withAuthInfoProvider(authInfoProvider) - .withCompression(compression) .withPort(nodes.get(0).getNativeTransportPort()) .build(); session = cluster.connect("system"); diff --git a/modules/common/cassandra-util/pom.xml b/modules/common/cassandra-util/pom.xml new file mode 100644 index 0000000..fc67140 --- /dev/null +++ b/modules/common/cassandra-util/pom.xml @@ -0,0 +1,75 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd%22%3E + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.rhq</groupId> + <artifactId>rhq-common-parent</artifactId> + <version>4.7.0-SNAPSHOT</version> + </parent> + + <artifactId>rhq-cassandra-util</artifactId> + <name>RHQ Cassandra Util</name> + + <dependencies> + <dependency> + <groupId>com.datastax.cassandra</groupId> + <artifactId>cassandra-driver-core</artifactId> + <version>${cassandra.driver.version}</version> + </dependency> + </dependencies> + + <profiles> + <profile> + <id>dev</id> + <properties> + <rhq.rootDir>../../..</rhq.rootDir> + <rhq.containerDir>${rhq.rootDir}/${rhq.defaultDevContainerPath}</rhq.containerDir> + <rhq.deploymentDir>${rhq.containerDir}/${rhq.earLibDir}</rhq.deploymentDir> + </properties> + + <build> + <plugins> + <plugin> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <id>deploy</id> + <phase>package</phase> + <configuration> + <target> + <mkdir dir="${rhq.deploymentDir}"/> + <property name="deployment.file" location="${rhq.deploymentDir}/${project.build.finalName}.jar"/> + <echo>*** Updating ${deployment.file}...</echo> + <jar destfile="${deployment.file}" basedir="${project.build.outputDirectory}"/> + </target> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + + <execution> + <id>undeploy</id> + <phase>clean</phase> + <configuration> + <target> + <property name="deployment.file" location="${rhq.deploymentDir}/${project.build.finalName}.jar"/> + <echo>*** Deleting ${deployment.file}...</echo> + <delete file="${deployment.file}"/> + </target> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> + +</project> diff --git a/modules/common/cassandra-util/src/main/java/org/rhq/cassandra/util/ClusterBuilder.java b/modules/common/cassandra-util/src/main/java/org/rhq/cassandra/util/ClusterBuilder.java new file mode 100644 index 0000000..6502df9 --- /dev/null +++ b/modules/common/cassandra-util/src/main/java/org/rhq/cassandra/util/ClusterBuilder.java @@ -0,0 +1,96 @@ +/* + * + * * RHQ Management Platform + * * Copyright (C) 2005-2012 Red Hat, Inc. + * * All rights reserved. + * * + * * This program is free software; you can redistribute it and/or modify + * * it under the terms of the GNU General Public License, version 2, as + * * published by the Free Software Foundation, and/or the GNU Lesser + * * General Public License, version 2.1, also as published by the Free + * * Software Foundation. + * * + * * This program is distributed in the hope that it will be useful, + * * but WITHOUT ANY WARRANTY; without even the implied warranty of + * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * * GNU General Public License and the GNU Lesser General Public License + * * for more details. + * * + * * You should have received a copy of the GNU General Public License + * * and the GNU Lesser General Public License along with this program; + * * if not, write to the Free Software Foundation, Inc., + * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +package org.rhq.cassandra.util; + +import com.datastax.driver.core.AuthInfoProvider; +import com.datastax.driver.core.Cluster; +import com.datastax.driver.core.ProtocolOptions; + +/** + * @author John Sanda + */ +public class ClusterBuilder { + + private Cluster.Builder builder = Cluster.builder(); + + private ProtocolOptions.Compression compression; + + /** + * @see Cluster.Builder#addContactPoints(String...) + */ + public ClusterBuilder addContactPoints(String... addresses) { + builder.addContactPoints(addresses); + return this; + } + + /** + * @see Cluster.Builder#withAuthInfoProvider(com.datastax.driver.core.AuthInfoProvider) + */ + public ClusterBuilder withAuthInfoProvider(AuthInfoProvider authInfoProvider) { + builder.withAuthInfoProvider(authInfoProvider); + return this; + } + + /** + * This method will throw an IllegalArgumentException if you try to use snappy + * compression while running on an IBM JRE. See <a href="https://bugzilla.redhat.com/show_bug.cgi?id=907485">BZ 907485</a> + * for details. + * + * @see Cluster.Builder#withCompression(com.datastax.driver.core.ProtocolOptions.Compression) + */ + public ClusterBuilder withCompression(ProtocolOptions.Compression compression) { + if (isIBMJRE() && compression == ProtocolOptions.Compression.SNAPPY) { + throw new IllegalArgumentException(compression.name() + " compression cannot be used with an IBM JRE. " + + "See https://bugzilla.redhat.com/show_bug.cgi?id=907485 for details."); + } + this.compression = compression; + builder.withCompression(compression); + return this; + } + + /** + * @see Cluster.Builder#withPort(int) + */ + public ClusterBuilder withPort(int port) { + builder.withPort(port); + return this; + } + + /** + * @see com.datastax.driver.core.Cluster.Builder#build() + */ + public Cluster build() { + if (compression == null && !isIBMJRE()) { + builder.withCompression(ProtocolOptions.Compression.SNAPPY); + } + return builder.build(); + } + + private boolean isIBMJRE() { + return System.getProperty("java.vm.vendor").startsWith("IBM"); + } + +} diff --git a/modules/common/pom.xml b/modules/common/pom.xml index b3210cb..7d0cf1c 100644 --- a/modules/common/pom.xml +++ b/modules/common/pom.xml @@ -30,6 +30,7 @@ <module>ant-bundle</module> <module>drift</module> <module>jboss-as-dmr-client</module> + <module>cassandra-util</module> <module>cassandra-schema</module> <module>cassandra-ccm</module> <module>cassandra-installer</module> diff --git a/modules/enterprise/server/installer/pom.xml b/modules/enterprise/server/installer/pom.xml index 8619993..f9bee54 100644 --- a/modules/enterprise/server/installer/pom.xml +++ b/modules/enterprise/server/installer/pom.xml @@ -165,6 +165,11 @@ </artifactItem> <artifactItem> <groupId>org.rhq</groupId> + <artifactId>rhq-cassandra-util</artifactId> + <version>${project.version}</version> + </artifactItem> + <artifactItem> + <groupId>org.rhq</groupId> <artifactId>rhq-cassandra-ccm-core</artifactId> <version>${project.version}</version> </artifactItem> diff --git a/modules/enterprise/server/installer/src/main/resources/module/main/module.xml b/modules/enterprise/server/installer/src/main/resources/module/main/module.xml index 8686d74..2854563 100644 --- a/modules/enterprise/server/installer/src/main/resources/module/main/module.xml +++ b/modules/enterprise/server/installer/src/main/resources/module/main/module.xml @@ -15,6 +15,7 @@ <resource-root path="i18nlog-${i18nlog.version}.jar"/> <resource-root path="rhq-cassandra-ccm-core-${project.version}.jar"/> <resource-root path="rhq-cassandra-schema-${project.version}.jar"/> + <resource-root path="rhq-cassandra-util-${project.version}.jar"/> </resources>
<dependencies> diff --git a/modules/enterprise/server/jar/pom.xml b/modules/enterprise/server/jar/pom.xml index 323e7c6..e695181 100644 --- a/modules/enterprise/server/jar/pom.xml +++ b/modules/enterprise/server/jar/pom.xml @@ -107,6 +107,18 @@ </dependency>
<dependency> + <groupId>org.rhq</groupId> + <artifactId>rhq-cassandra-util</artifactId> + <version>${project.version}</version> + <exclusions> + <exclusion> + <groupId>com.datastax.cassandra</groupId> + <artifactId>cassandra-driver-core</artifactId> + </exclusion> + </exclusions> + </dependency> + + <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>${cassandra.driver.version}</version> diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cassandra/SessionManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cassandra/SessionManagerBean.java index 88de4e2..3dbe0bf 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cassandra/SessionManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cassandra/SessionManagerBean.java @@ -25,8 +25,6 @@
package org.rhq.enterprise.server.cassandra;
-import static com.datastax.driver.core.ProtocolOptions.Compression.SNAPPY; - import javax.annotation.PostConstruct; import javax.ejb.Singleton;
@@ -35,6 +33,7 @@ import com.datastax.driver.core.Session; import com.datastax.driver.core.SimpleAuthInfoProvider;
import org.rhq.cassandra.CassandraNode; +import org.rhq.cassandra.util.ClusterBuilder; import org.rhq.server.metrics.CQLException; import org.rhq.server.metrics.MetricsConfiguration;
@@ -79,10 +78,9 @@ public class SessionManagerBean { Session.class.getName() + " object."); }
- Cluster cluster = Cluster.builder() + Cluster cluster = new ClusterBuilder() .addContactPoints(hostNames) .withAuthInfoProvider(new SimpleAuthInfoProvider().add("username", username).add("password", password)) - .withCompression(SNAPPY) .withPort(port) .build(); session = cluster.connect("rhq"); diff --git a/modules/helpers/metrics-simulator/pom.xml b/modules/helpers/metrics-simulator/pom.xml index c775d22..f5d2fcd 100644 --- a/modules/helpers/metrics-simulator/pom.xml +++ b/modules/helpers/metrics-simulator/pom.xml @@ -23,18 +23,6 @@ <version>${project.version}</version> </dependency>
- <!--<dependency>--> - <!--<groupId>org.codehaus.jackson</groupId>--> - <!--<artifactId>jackson-core-asl</artifactId>--> - <!--<version>1.9.9</version>--> - <!--</dependency>--> - - <!--<dependency>--> - <!--<groupId>org.codehaus.jackson</groupId>--> - <!--<artifactId>jackson-mapper-asl</artifactId>--> - <!--<version>1.9.9</version>--> - <!--</dependency>--> - <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> diff --git a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java index ef352bd..4de9651 100644 --- a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java +++ b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java @@ -51,7 +51,9 @@ import org.rhq.cassandra.CassandraClusterManager; import org.rhq.cassandra.CassandraNode; import org.rhq.cassandra.ClusterInitService; import org.rhq.cassandra.DeploymentOptions; +import org.rhq.cassandra.DeploymentOptionsFactory; import org.rhq.cassandra.schema.SchemaManager; +import org.rhq.cassandra.util.ClusterBuilder; import org.rhq.metrics.simulator.plan.ClusterConfig; import org.rhq.metrics.simulator.plan.ScheduleGroup; import org.rhq.metrics.simulator.plan.SimulationPlan; @@ -82,10 +84,17 @@ public class Simulator implements ShutdownManager { });
List<CassandraNode> nodes = initCluster(plan); - ProtocolOptions.Compression compression = Enum.valueOf(ProtocolOptions.Compression.class, - plan.getClientCompression().toUpperCase()); - createSchema(nodes, compression); - Session session = createSession(nodes, compression); + + createSchema(nodes); + + Session session; + if (plan.getClientCompression() == null) { + session = createSession(nodes); + } else { + ProtocolOptions.Compression compression = Enum.valueOf(ProtocolOptions.Compression.class, + plan.getClientCompression().toUpperCase()); + session = createSession(nodes, compression); + }
MetricsServer metricsServer = new MetricsServer(); metricsServer.setSession(session); @@ -174,12 +183,15 @@ public class Simulator implements ShutdownManager { log.info("Deploying cluster to " + clusterDir); clusterDir.mkdirs();
- DeploymentOptions deploymentOptions = new DeploymentOptions(); + DeploymentOptionsFactory factory = new DeploymentOptionsFactory(); + DeploymentOptions deploymentOptions = factory.newDeploymentOptions(); deploymentOptions.setClusterDir(clusterDir.getAbsolutePath()); deploymentOptions.setNumNodes(clusterConfig.getNumNodes()); deploymentOptions.setHeapSize(clusterConfig.getHeapSize()); deploymentOptions.setHeapNewSize(clusterConfig.getHeapNewSize()); - deploymentOptions.setStackSize(clusterConfig.getStackSize()); + if (clusterConfig.getStackSize() != null) { + deploymentOptions.setStackSize(clusterConfig.getStackSize()); + } deploymentOptions.setLoggingLevel("INFO"); deploymentOptions.load();
@@ -201,10 +213,10 @@ public class Simulator implements ShutdownManager { clusterInitService.waitForClusterToStart(nodes, nodes.size(), 3000, 20); }
- private void createSchema(List<CassandraNode> nodes, ProtocolOptions.Compression compression) { + private void createSchema(List<CassandraNode> nodes) { try { log.info("Creating schema"); - SchemaManager schemaManager = new SchemaManager("rhqadmin", "rhqadmin", nodes, compression); + SchemaManager schemaManager = new SchemaManager("rhqadmin", "rhqadmin", nodes); schemaManager.createSchema(); schemaManager.updateSchema(); } catch (Exception e) { @@ -212,29 +224,58 @@ public class Simulator implements ShutdownManager { } }
+ private Session createSession(List<CassandraNode> nodes) throws NoHostAvailableException { + try { + SimpleAuthInfoProvider authInfoProvider = new SimpleAuthInfoProvider(); + authInfoProvider.add("username", "rhqadmin").add("password", "rhqadmin"); + + Cluster cluster = new ClusterBuilder() + .addContactPoints(getHostNames(nodes)) + .withAuthInfoProvider(authInfoProvider) + .build(); + + log.debug("Created cluster object with " + cluster.getConfiguration().getProtocolOptions().getCompression() + + " compression."); + + return initSession(cluster); + } catch (Exception e) { + log.error("Failed to start simulator. Unable to create " + Session.class, e); + throw new RuntimeException("Failed to start simulator. Unable to create " + Session.class, e); + } + } + private Session createSession(List<CassandraNode> nodes, ProtocolOptions.Compression compression) throws NoHostAvailableException { try { + log.debug("Creating session using " + compression.name() + " compression"); + SimpleAuthInfoProvider authInfoProvider = new SimpleAuthInfoProvider(); authInfoProvider.add("username", "rhqadmin").add("password", "rhqadmin");
- Cluster cluster = Cluster.builder() + Cluster cluster = new ClusterBuilder() .addContactPoints(getHostNames(nodes)) .withAuthInfoProvider(authInfoProvider) .withCompression(compression) .build();
- NodeFailureListener listener = new NodeFailureListener(); - for (Host host : cluster.getMetadata().getAllHosts()) { - host.getMonitor().register(listener); - } + log.debug("Created cluster object with " + cluster.getConfiguration().getProtocolOptions().getCompression() + + " compression.");
- return cluster.connect("rhq"); + return initSession(cluster); } catch (Exception e) { throw new RuntimeException("Failed to start simulator. Unable to create " + Session.class, e); } }
+ private Session initSession(Cluster cluster) { + NodeFailureListener listener = new NodeFailureListener(); + for (Host host : cluster.getMetadata().getAllHosts()) { + host.getMonitor().register(listener); + } + + return cluster.connect("rhq"); + } + private String[] getHostNames(List<CassandraNode> nodes) { String[] hostnames = new String[nodes.size()]; for (int i = 0; i < hostnames.length; ++i) { diff --git a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorCLI.java b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorCLI.java index 019e792..b026752 100644 --- a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorCLI.java +++ b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorCLI.java @@ -34,6 +34,8 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory;
import org.rhq.metrics.simulator.plan.SimulationPlan; import org.rhq.metrics.simulator.plan.SimulationPlanner; @@ -43,6 +45,8 @@ import org.rhq.metrics.simulator.plan.SimulationPlanner; */ public class SimulatorCLI {
+ private final Log log = LogFactory.getLog(SimulatorCLI.class); + private Options options;
public SimulatorCLI() { @@ -112,6 +116,7 @@ public class SimulatorCLI { try { cli.exec(args); } catch (Exception e) { + cli.log.error("There was an unxpected error", e); System.exit(1); } } diff --git a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/ClusterConfig.java b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/ClusterConfig.java index 0df6636..af3ffeb 100644 --- a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/ClusterConfig.java +++ b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/ClusterConfig.java @@ -42,7 +42,7 @@ public class ClusterConfig {
private String heapNewSize = "64M";
- private String stackSize = "180k"; + private String stackSize;
public boolean isEmbedded() { return embedded; diff --git a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlan.java b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlan.java index 48f66ee..d2c62c0 100644 --- a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlan.java +++ b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlan.java @@ -51,7 +51,7 @@ public class SimulationPlan {
private ClusterConfig clusterConfig;
- private String clientCompression = "none"; + private String clientCompression = null;
public List<ScheduleGroup> getScheduleSets() { return scheduleSets;