modules/helpers/metrics-simulator/pom.xml | 20 - modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh | 4 modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java | 18 + modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorThreadFactory.java | 2 modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/ClusterConfig.java | 10 modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java | 121 ++++++++-- modules/helpers/metrics-simulator/src/main/scripts/assembly.xml | 4 7 files changed, 135 insertions(+), 44 deletions(-)
New commits: commit 39cb481fac87829332f9cd125bbb769f1e5d90ef Author: John Sanda jsanda@redhat.com Date: Tue Mar 5 23:13:05 2013 -0500
add defaults for simulation config values
Also add a shutdown hook for shutting down thread pool. Turned out that the JVM still was not exiting cleanly.
diff --git a/modules/helpers/metrics-simulator/pom.xml b/modules/helpers/metrics-simulator/pom.xml index 115faca..7ad4b47 100644 --- a/modules/helpers/metrics-simulator/pom.xml +++ b/modules/helpers/metrics-simulator/pom.xml @@ -23,17 +23,17 @@ <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-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>org.codehaus.jackson</groupId>--> + <!--<artifactId>jackson-mapper-asl</artifactId>--> + <!--<version>1.9.9</version>--> + <!--</dependency>-->
<dependency> <groupId>com.fasterxml.jackson.core</groupId> diff --git a/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh b/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh index 0171a5a..4258c68 100644 --- a/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh +++ b/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh @@ -36,7 +36,9 @@ prepare_java_opts()
launch_simulator() { - $RHQ_MS_JAVA_EXE $JAVA_OPTS $RHQ_MS_ADDITIONAL_JAVA_OPTS -cp "$RHQ_MS_CLASSPATH" org.rhq.metrics.simulator.SimulatorCLI "$@" & + cmd="$RHQ_MS_JAVA_EXE $JAVA_OPTS $RHQ_MS_ADDITIONAL_JAVA_OPTS -cp $RHQ_MS_CLASSPATH org.rhq.metrics.simulator.SimulatorCLI $@" + eval $cmd + return $? }
source "$RHQ_MS_HOME/bin/rhq-ms-env.sh" 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 5d9bfeb..bcc3a9b 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 @@ -88,8 +88,14 @@ public class Simulator { Stats stats = new Stats(); StatsCollector statsCollector = new StatsCollector(stats);
- ScheduledExecutorService executorService = Executors.newScheduledThreadPool(plan.getThreadPoolSize(), + final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(plan.getThreadPoolSize(), new SimulatorThreadFactory()); + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + shutdown(executorService); + } + }); log.info("Starting executor service"); executorService.scheduleAtFixedRate(statsCollector, 0, 1, TimeUnit.MINUTES);
@@ -112,6 +118,12 @@ public class Simulator { Thread.sleep(Minutes.minutes(plan.getSimulationTime()).toStandardDuration().getMillis()); } catch (InterruptedException e) { } +// shutdown(executorService); + log.info("Simulation has completed. Initiating shutdown..."); + System.exit(0); + } + + private void shutdown(ScheduledExecutorService executorService) { log.info("Shutting down executor service"); executorService.shutdown(); try { @@ -123,7 +135,7 @@ public class Simulator { executorService.shutdownNow(); } log.info("Shut down complete"); - System.exit(0); + //System.exit(0); }
private List<CassandraNode> initCluster(SimulationPlan plan) { @@ -139,6 +151,8 @@ public class Simulator { private List<CassandraNode> deployCluster(ClusterConfig clusterConfig) throws IOException { File clusterDir = new File(clusterConfig.getClusterDir(), "cassandra"); log.info("Deploying cluster to " + clusterDir); + clusterDir.mkdirs(); + DeploymentOptions deploymentOptions = new DeploymentOptions(); deploymentOptions.setClusterDir(clusterDir.getAbsolutePath()); deploymentOptions.setNumNodes(clusterConfig.getNumNodes()); diff --git a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorThreadFactory.java b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorThreadFactory.java index dd492e7..da27356 100644 --- a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorThreadFactory.java +++ b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorThreadFactory.java @@ -49,7 +49,7 @@ public class SimulatorThreadFactory implements ThreadFactory, Thread.UncaughtExc @Override public Thread newThread(Runnable r) { Thread t = new Thread(r, poolName + "-" + threadNumber.getAndIncrement()); - t.setDaemon(true); + t.setDaemon(false); t.setUncaughtExceptionHandler(this);
return t; 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 c022523..4c1dcce 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 @@ -30,15 +30,15 @@ package org.rhq.metrics.simulator.plan; */ public class ClusterConfig {
- private boolean embedded; + private boolean embedded = true;
- private String clusterDir; + private String clusterDir = "target";
- private int numNodes; + private int numNodes = 2;
- private String heapSize; + private String heapSize = "256M";
- private String heapNewSize; + private String heapNewSize = "64M";
public boolean isEmbedded() { return embedded; diff --git a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java index 148ce08..30d9779 100644 --- a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java +++ b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java @@ -49,45 +49,106 @@ public class SimulationPlanner { JsonNode root = mapper.readTree(jsonFile); SimulationPlan simulation = new SimulationPlan();
- simulation.setCollectionInterval(root.get("collectionInterval").asLong()); - simulation.setAggregationInterval(root.get("aggregationInterval").asLong()); - simulation.setThreadPoolSize(root.get("threadPoolSize").asInt()); - simulation.setNumMeasurementCollectors(root.get("numMeasurementCollectors").asInt()); - simulation.setSimulationTime(root.get("simulationTime").asInt()); - - for (JsonNode node : root.get("schedules")) { - simulation.addScheduleSet(new ScheduleGroup(node.get("count").asInt(), node.get("interval").asLong())); + simulation.setCollectionInterval(getLong(root.get("collectionInterval"), 500L)); + simulation.setAggregationInterval(getLong(root.get("aggregationInterval"), 1000L)); + simulation.setThreadPoolSize(getInt(root.get("threadPoolSize"), 7)); + simulation.setNumMeasurementCollectors(getInt(root.get("numMeasurementCollectors"), 5)); + simulation.setSimulationTime(getInt(root.get("simulationTime"), 10)); + + JsonNode schedules = root.get("schedules"); + if (schedules.isArray()) { + for (JsonNode node : schedules) { + simulation.addScheduleSet(new ScheduleGroup(getInt(node.get("count"), 2500), + getLong(node.get("interval"), 500L))); + } + } else { + simulation.addScheduleSet(new ScheduleGroup(getInt(schedules.get("count"), 2500), + getLong(schedules.get("interval"), 500L))); }
- MetricsConfiguration serverConfiguration = new MetricsConfiguration(); + MetricsConfiguration serverConfiguration = createDefaultMetricsConfiguration(); simulation.setMetricsServerConfiguration(serverConfiguration);
- for (JsonNode node : root.get("ttl")) { - MetricsTable table = getTable(node.get("table").asText()); - int ttl = node.get("value").asInt(); - setTTLAndRetention(table, ttl, serverConfiguration); + JsonNode ttlNodes = root.get("ttl"); + if (ttlNodes != null) { + for (JsonNode node : ttlNodes) { + String tableName = node.get("table").asText(); + if (!tableName.isEmpty()) { + MetricsTable table = getTable(tableName); + JsonNode ttlNode = node.get("value"); + if (ttlNode != null) { + setTTLAndRetention(table, ttlNode.asInt(), serverConfiguration); + } + } + } }
JsonNode timeSliceNode = root.get("timeSliceDuration"); - String units = timeSliceNode.get("units").asText(); - for (JsonNode node : timeSliceNode.get("values")) { - Duration duration = getDuration(units, node.get("value").asInt()); - MetricsTable table = getTable(node.get("table").asText()); - setTimeSliceDuration(table, duration, serverConfiguration); + if (timeSliceNode != null) { + String units = timeSliceNode.get("units").asText(); + if (units.isEmpty()) { + units = "minutes"; + } + for (JsonNode node : timeSliceNode.get("values")) { + JsonNode valueNode = node.get("value"); + JsonNode tableNode = node.get("table"); + if (!(tableNode == null || valueNode == null)) { + Duration duration = getDuration(units, valueNode.asInt()); + MetricsTable table = getTable(tableNode.asText()); + setTimeSliceDuration(table, duration, serverConfiguration); + } + } }
ClusterConfig clusterConfig = new ClusterConfig(); JsonNode clusterConfigNode = root.get("cluster"); - clusterConfig.setEmbedded(clusterConfigNode.get("embedded").asBoolean()); - clusterConfig.setClusterDir(clusterConfigNode.get("clusterDir").asText()); - clusterConfig.setHeapSize(clusterConfigNode.get("heapSize").asText()); - clusterConfig.setHeapNewSize(clusterConfigNode.get("heapNewSize").asText()); - clusterConfig.setNumNodes(clusterConfigNode.get("numNodes").asInt()); + if (clusterConfigNode != null) { + clusterConfig.setEmbedded(clusterConfigNode.get("embedded").asBoolean(true)); + + String clusterDir = clusterConfigNode.get("clusterDir").asText(); + if (clusterDir.isEmpty()) { + clusterConfig.setClusterDir("target"); + } else { + clusterConfig.setClusterDir(clusterDir); + } + + JsonNode heapSizeNode = clusterConfigNode.get("heapSize"); + if (heapSizeNode != null) { + clusterConfig.setHeapSize(heapSizeNode.asText()); + } + + JsonNode heapNewSizeNode = clusterConfigNode.get("heapNewSize"); + if (heapNewSizeNode != null) { + clusterConfig.setHeapNewSize(heapNewSizeNode.asText()); + } + + clusterConfig.setNumNodes(getInt(clusterConfigNode.get("numNodes"), 2)); + } simulation.setClusterConfig(clusterConfig);
return simulation; }
+ private MetricsConfiguration createDefaultMetricsConfiguration() { + MetricsConfiguration configuration = new MetricsConfiguration(); + configuration.setRawTTL(180); + configuration.setRawRetention(Seconds.seconds(180).toStandardDuration()); + configuration.setRawTimeSliceDuration(Minutes.ONE.toStandardDuration()); + + configuration.setOneHourTTL(360); + configuration.setOneHourRetention(Seconds.seconds(360).toStandardDuration()); + configuration.setOneHourTimeSliceDuration(Minutes.minutes(6).toStandardDuration()); + + configuration.setSixHourTTL(540); + configuration.setSixHourRetention(Seconds.seconds(540).toStandardDuration()); + configuration.setSixHourTimeSliceDuration(Minutes.minutes(24).toStandardDuration()); + + configuration.setTwentyFourHourTTL(720); + configuration.setTwentyFourHourRetention(Seconds.seconds(720).toStandardDuration()); + + return configuration; + } + private MetricsTable getTable(String name) { if (name.equals(MetricsTable.RAW.getTableName())) { return MetricsTable.RAW; @@ -154,4 +215,18 @@ public class SimulationPlanner { } }
+ private long getLong(JsonNode node, long defaultValue) { + if (node == null) { + return defaultValue; + } + return node.longValue(); + } + + private int getInt(JsonNode node, int defaultValue) { + if (node == null) { + return defaultValue; + } + return node.intValue(); + } + } diff --git a/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml b/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml index ec1a459..2474a01 100644 --- a/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml +++ b/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml @@ -20,7 +20,7 @@ <include>**/*</include> </includes> <excludes> - <exclude>bin/rhq-ms</exclude> + <exclude>bin/rhq-ms.sh</exclude> </excludes> </fileSet>
@@ -28,7 +28,7 @@ <directory>src/main/assembly</directory> <outputDirectory>/</outputDirectory> <includes> - <include>bin/rhq-ms</include> + <include>bin/rhq-ms.sh</include> </includes> <fileMode>0755</fileMode> </fileSet>