modules/common/cassandra-ccm/cassandra-ccm-arquillian/src/main/java/org/rhq/cassandra/ccm/arquillian/CCMSuiteDeploymentExtension.java | 32 ++++++---- modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/ClusterInitService.java | 9 ++ modules/enterprise/server/appserver/pom.xml | 1 modules/enterprise/server/appserver/src/main/scripts/rhq-container.build.xml | 11 +++ modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/ControlCommand.java | 4 + modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/command/Install.java | 12 +++ modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/CassandraIntegrationTest.java | 2 modules/enterprise/server/server-metrics/src/test/resources/log4j.properties | 8 +- 8 files changed, 61 insertions(+), 18 deletions(-)
New commits: commit 2bb0b948cb9908e508f27f4b29e33bf9d9a44dff Author: John Sanda jsanda@redhat.com Date: Wed May 8 16:46:57 2013 -0400
fix regression in ClusterInitService.waitForClusterToStart
when a storage node is take off of the queue to see if it is initialized, we need to put it back on the queue if it is not initialized; otherwise, the waitForClusterToStart method can return prematurely before the cluster has fully initialized.
diff --git a/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/ClusterInitService.java b/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/ClusterInitService.java index 0b38fb0..d7a4e9e 100644 --- a/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/ClusterInitService.java +++ b/modules/common/cassandra-ccm/cassandra-ccm-core/src/main/java/org/rhq/cassandra/ClusterInitService.java @@ -202,6 +202,8 @@ public final class ClusterInitService { } if (isNativeTransportRunning) { ++connections; + } else { + queue.offer(storageNode); } if (connections == numHosts) { if (log.isDebugEnabled()) { @@ -301,7 +303,12 @@ public final class ClusterInitService { connector = JMXConnectorFactory.connect(serviceURL, env); MBeanServerConnection serverConnection = connector.getMBeanServerConnection(); ObjectName storageService = new ObjectName("org.apache.cassandra.db:type=StorageService"); - nativeTransportRunning = (Boolean) serverConnection.getAttribute(storageService, "NativeTransportRunning"); + String attribute = "NativeTransportRunning"; + try { + nativeTransportRunning = (Boolean) serverConnection.getAttribute(storageService, attribute); + } catch (Exception e) { + log.debug("Failed to read attribute [" + attribute + "] from " + storageService, e); + } } finally { if (connector != null) { connector.close(); diff --git a/modules/enterprise/server/server-metrics/src/test/resources/log4j.properties b/modules/enterprise/server/server-metrics/src/test/resources/log4j.properties index 44f8c2e..c13e2bd 100644 --- a/modules/enterprise/server/server-metrics/src/test/resources/log4j.properties +++ b/modules/enterprise/server/server-metrics/src/test/resources/log4j.properties @@ -23,7 +23,7 @@ # */ #
-log4j.rootCategory=DEBUG, FILE, CONSOLE +log4j.rootCategory=WARN, FILE, CONSOLE
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.FILE.DatePattern='.'yyyy-MM-dd @@ -35,6 +35,8 @@ log4j.appender.FILE.Append=false
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout -log4j.appender.CONSOLE.layout.ConversionPattern=%5p %d{HH:mm:ss,SSS} %m%n +#log4j.appender.CONSOLE.layout.ConversionPattern=%5p %d{HH:mm:ss,SSS} %m%n +log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p %c %m%n
-log4j.logger.org.apache.cassandra.cql.jdbc=TRACE +log4j.logger.org.rhq=DEBUG +log4j.logger.com.datastax=INFO
commit c7b14052fcf6708ab5953bee962bcb2499f4b17c Author: John Sanda jsanda@redhat.com Date: Wed May 8 13:53:45 2013 -0400
make sure test cluster is shut down when there are errors prior to any tests running
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 0f297ca..fb28c11 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 @@ -111,16 +111,20 @@ public class CCMSuiteDeploymentExtension implements LoadableExtension {
List<StorageNode> nodes = ccm.createCluster(); ccm.startCluster(false); + try { + ClusterInitService clusterInitService = new ClusterInitService(); + clusterInitService.waitForClusterToStart(nodes, nodes.size(), 1500, 20, 5);
- ClusterInitService clusterInitService = new ClusterInitService(); - clusterInitService.waitForClusterToStart(nodes, nodes.size(), 1500, 20, 5); - - SchemaManager schemaManager = new SchemaManager("cassandra", "cassandra", nodes); - if (!schemaManager.schemaExists()) { - schemaManager.createSchema(); + SchemaManager schemaManager = new SchemaManager("cassandra", "cassandra", nodes); + if (!schemaManager.schemaExists()) { + schemaManager.createSchema(); + } + schemaManager.updateSchema(); + schemaManager.shutdown(); + } catch (Exception e) { + ccm.shutdownCluster(); + throw new RuntimeException("Cassandra cluster initialization failed", e); } - schemaManager.updateSchema(); - schemaManager.shutdown();
executeInClassScope(new Callable<Void>() { public Void call() throws Exception { @@ -135,11 +139,15 @@ public class CCMSuiteDeploymentExtension implements LoadableExtension { final AfterStart event, final ContainerRegistry registry) { executeInClassScope(new Callable<Void>() { public Void call() throws Exception { - for (Deployment d : suiteDeploymentScenario.deployments()) { - deploymentEvent.fire(new DeployDeployment(findContainer(registry, - event.getDeployableContainer()), d)); + try { + for (Deployment d : suiteDeploymentScenario.deployments()) { + deploymentEvent.fire(new DeployDeployment(findContainer(registry, + event.getDeployableContainer()), d)); + } + return null; + } finally { + ccm.shutdownCluster(); } - return null; } }); } diff --git a/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/CassandraIntegrationTest.java b/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/CassandraIntegrationTest.java index 3a9679e..3129b43 100644 --- a/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/CassandraIntegrationTest.java +++ b/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/CassandraIntegrationTest.java @@ -66,7 +66,7 @@ public class CassandraIntegrationTest { session = cluster.connect("rhq"); }
- @AfterSuite + @AfterSuite(alwaysRun = true) @ShutdownCluster public void shutdownCluster() throws Exception { }
commit 1f4699e54b5b45f9f846f1b9f4715163c6dab9e3 Author: John Sanda jsanda@redhat.com Date: Wed May 8 12:59:49 2013 -0400
updating container ant script to generate rhq-storage.properties
This is a dev-container only change for pre-configuring the storage node.
diff --git a/modules/enterprise/server/appserver/src/main/scripts/rhq-container.build.xml b/modules/enterprise/server/appserver/src/main/scripts/rhq-container.build.xml index e932ac7..c6ac637 100644 --- a/modules/enterprise/server/appserver/src/main/scripts/rhq-container.build.xml +++ b/modules/enterprise/server/appserver/src/main/scripts/rhq-container.build.xml @@ -776,6 +776,17 @@ rhq.cassandra.cluster.num-nodes=${rhq.cassandra.cluster.num-nodes} # The log4j logging level to use on each node. rhq.cassandra.logging.level=${rhq.cassandra.logging.level} </echo> + +<echo file="${project.build.outputDirectory}/bin/rhq-storage.properties" append="true"># storage installer options for dev deployment +hostname=127.0.0.1 +commitlog=${rhq.dev.data.dir}/storage/commit_log +data=${rhq.dev.data.dir}/storage/data +saved-caches=${rhq.dev.data.dir}/storage/saved_caches +heap-size=256M +heap-new-size=64M +</echo> + +<echo file="${project.build.outputDirectory}/bin/rhqctl.properties" append="true">rhqctl.install.storage-config=bin/rhq-storage.properties</echo> </target>
commit 049402dc47377e3b1ad18771a7f8c66d734dc038 Author: John Sanda jsanda@redhat.com Date: Wed May 8 12:51:51 2013 -0400
add support for specifying storage installer props file in rhqctl.properties
This is used for dev-container deployments so that we can pre-configure the storage installer. This could also be useful for production use as a way to templatize deployments.
diff --git a/modules/enterprise/server/appserver/pom.xml b/modules/enterprise/server/appserver/pom.xml index 42aa4a5..79d2b5f 100644 --- a/modules/enterprise/server/appserver/pom.xml +++ b/modules/enterprise/server/appserver/pom.xml @@ -186,6 +186,7 @@ <!-- dev/test DB type (TODO: do we still need this?) --> <property name="rhq.test.ds.type-mapping" value="${rhq.test.ds.type-mapping}" /> <property name="rhq.dev.ds.type-mapping" value="${rhq.dev.ds.type-mapping}" /> + <property name="rhq.dev.data.dir" location="${rhq.rootDir}/rhq-data"/> </ant> </target> </configuration> diff --git a/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/ControlCommand.java b/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/ControlCommand.java index ee7a404..8919630 100644 --- a/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/ControlCommand.java +++ b/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/ControlCommand.java @@ -184,6 +184,10 @@ public abstract class ControlCommand { return null; }
+ protected boolean hasProperty(String key) { + return rhqctlConfig.containsKey(key); + } + protected String getProperty(String key) { return rhqctlConfig.getString(key); } diff --git a/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/command/Install.java b/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/command/Install.java index fe79183..d2e4c0e 100644 --- a/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/command/Install.java +++ b/modules/enterprise/server/server-control/src/main/java/org/rhq/server/control/command/Install.java @@ -66,6 +66,10 @@ public class Install extends ControlCommand {
private final String SERVER_CONFIG_OPTION = "server-config";
+ private final String AGENT_TOKEN_OPTION = "agent-security-token"; + + private final String STORAGE_CONFIG_PROP = "rhqctl.install.storage-config"; + private final File DEFAULT_STORAGE_BASEDIR = new File(basedir, STORAGE_BASEDIR_NAME);
private final File DEFAULT_AGENT_BASEDIR = new File(basedir, AGENT_BASEDIR_NAME); @@ -99,7 +103,10 @@ public class Install extends ControlCommand { true, "A properties file with keys that correspond to option names " + "of the storage installer. Each property will be translated into an option that is passed to the " - + " storage installer. See example.storage.properties for examples."); + + " storage installer. See example.storage.properties for examples.") + .addOption(null, AGENT_TOKEN_OPTION, true, "The security token that the agent needs to include with " + + "commands sent to the server. Use this option when installing or upgrading an agent that is already " + + "registered with the server."); }
@Override @@ -308,6 +315,9 @@ public class Install extends ControlCommand { if (rhqctlCommandLine.hasOption(STORAGE_CONFIG_OPTION)) { String[] args = toArray(loadStorageProperties(rhqctlCommandLine.getOptionValue(STORAGE_CONFIG_OPTION))); commandLine.addArguments(args); + } else if (hasProperty(STORAGE_CONFIG_PROP)) { + String[] args = toArray(loadStorageProperties(getProperty(STORAGE_CONFIG_PROP))); + commandLine.addArguments(args); }
Executor executor = new DefaultExecutor();
rhq-commits@lists.fedorahosted.org