modules/core/domain/src/main/java/org/rhq/core/domain/cloud/StorageNodeLoadComposite.java | 58 +++++++--- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeDatasource.java | 32 ++++- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeLoadComponent.java | 5 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java | 31 ++++- modules/plugins/cassandra/src/main/resources/META-INF/rhq-plugin.xml | 2 modules/plugins/rhq-storage/src/main/resources/META-INF/rhq-plugin.xml | 3 6 files changed, 102 insertions(+), 29 deletions(-)
New commits: commit cc64adde1d8835f8c000afe2de0746fda5bbd5c1 Author: Stefan Negrea snegrea@redhat.com Date: Tue Jul 23 08:43:19 2013 -0500
One more place where the previous rebase removed code for the storage node configuration.
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 31e3bf7..9416c67 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 @@ -643,6 +643,8 @@ public class StorageNodeManagerBean implements StorageNodeManagerLocal, StorageN Configuration parameters = new Configuration(); parameters.setSimpleValue("jmxPort", storageNodeConfiguration.getJmxPort() + ""); parameters.setSimpleValue("heapSize", storageNodeConfiguration.getHeapSize() + ""); + parameters.setSimpleValue("heapNewSize", storageNodeConfiguration.getHeapNewSize() + ""); + parameters.setSimpleValue("threadStackSize", storageNodeConfiguration.getThreadStackSize() + "");
boolean updateConfigurationResult = runOperationAndWaitForResult(subject, storageNodeResource, UPDATE_CONFIGURATION_OPERATION, parameters);
commit 373a931987b402479df3d02269cc00f4ac88a358 Author: Stefan Negrea snegrea@redhat.com Date: Tue Jul 23 08:42:49 2013 -0500
Enable the new set of calculated metrics for disk space utilization in the UI and CLI.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/StorageNodeLoadComposite.java b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/StorageNodeLoadComposite.java index 80bfdd6..2c0b8f8 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/StorageNodeLoadComposite.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/StorageNodeLoadComposite.java @@ -41,9 +41,13 @@ public class StorageNodeLoadComposite implements Serializable { private MeasurementAggregateWithUnits heapUsed; private MeasurementAggregateWithUnits heapPercentageUsed; private MeasurementAggregateWithUnits load; - private MeasurementAggregateWithUnits partitionDiskUsedPercentage; private MeasurementAggregateWithUnits dataDiskUsed; private MeasurementAggregate tokens; + + private MeasurementAggregateWithUnits dataDiskUsedPercentage; + private MeasurementAggregateWithUnits totalDiskUsedPercentage; + private MeasurementAggregate freeDiskToDataSizeRatio; + private MeasurementAggregateWithUnits actuallyOwns;
public StorageNodeLoadComposite() { @@ -113,35 +117,59 @@ public class StorageNodeLoadComposite implements Serializable { public void setHeapPercentageUsed(MeasurementAggregateWithUnits heapPercentageUsed) { this.heapPercentageUsed = heapPercentageUsed; } - + /** * @deprecated use {@link #getPartitionDiskUsedPercentage() getPartitionDiskUsedPercentage()} instead - * + * * @return partitionDiskUsedPercentage */ public MeasurementAggregateWithUnits getDiskSpacePercentageUsed() { - return getPartitionDiskUsedPercentage(); + return getDataDiskUsedPercentage(); } - + /** * @deprecated use {@link #setPartitionDiskUsedPercentage() setPartitionDiskUsedPercentage()} instead - * + * * @param partitionDiskUsedPercentage */ - public void setDiskSpacePercentageUsed(MeasurementAggregateWithUnits partitionDiskUsedPercentage) { - setPartitionDiskUsedPercentage(partitionDiskUsedPercentage); + public void setDiskSpacePercentageUsed(MeasurementAggregateWithUnits diskUsedPercentage) { + setDataDiskUsedPercentage(diskUsedPercentage); + } + + /** + * @return A computed metric for the percentage of disk space used by data file on the corresponding partitions. + * If multiple data locations are configured then the aggregate is calculated. + */ + public MeasurementAggregateWithUnits getDataDiskUsedPercentage() { + return dataDiskUsedPercentage; + } + + public void setDataDiskUsedPercentage(MeasurementAggregateWithUnits dataDiskUsedPercentage) { + this.dataDiskUsedPercentage = dataDiskUsedPercentage; + } + + /** + * @return A computed metric for the percentage of total (system + Storage Node data file) disk space used the partitions where data files are stored. + * If multiple data locations are configured then the aggregate is calculated. + */ + public MeasurementAggregateWithUnits getTotalDiskUsedPercentage() { + return totalDiskUsedPercentage; + } + + public void setTotalDiskUsedPercentage(MeasurementAggregateWithUnits totalDiskUsedPercentage) { + this.totalDiskUsedPercentage = totalDiskUsedPercentage; }
/** - * @return A computed metric for the percentage of disk space used on the partition that contains the SSTables. - * If multiple data locations are configured then the partition with the highest utilization will be reported. + * @return A computed metric for the percentage of total (system + Storage Node data file) disk space used the partitions where data files are stored. + * If multiple data locations are configured then the aggregate is calculated. */ - public MeasurementAggregateWithUnits getPartitionDiskUsedPercentage() { - return partitionDiskUsedPercentage; + public MeasurementAggregate getFreeDiskToDataSizeRatio() { + return freeDiskToDataSizeRatio; }
- public void setPartitionDiskUsedPercentage(MeasurementAggregateWithUnits partitionDiskUsedPercentage) { - this.partitionDiskUsedPercentage = partitionDiskUsedPercentage; + public void setFreeDiskToDataSizeRatio(MeasurementAggregate freeDiskToDataSizeRatio) { + this.freeDiskToDataSizeRatio = freeDiskToDataSizeRatio; }
/** @@ -202,7 +230,7 @@ public class StorageNodeLoadComposite implements Serializable { builder.append("heapUsed=").append(heapUsed).append(", "); builder.append("heapPercentageUsed=").append(heapPercentageUsed).append(", "); builder.append("load=").append(load).append(", "); - builder.append("partitionDiskUsedPercentage=").append(partitionDiskUsedPercentage).append(", "); + builder.append("dataUsedPercentage=").append(dataDiskUsedPercentage).append(", "); builder.append("dataDiskUsed=").append(dataDiskUsed).append(", "); builder.append("tokens=").append(tokens).append(", "); builder.append("actuallyOwns=").append(actuallyOwns); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeDatasource.java index 7d413fd..07064b7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeDatasource.java @@ -47,6 +47,7 @@ import org.rhq.core.domain.cloud.StorageNode.OperationMode; import org.rhq.core.domain.cloud.StorageNodeLoadComposite; import org.rhq.core.domain.cloud.StorageNodeLoadComposite.MeasurementAggregateWithUnits; import org.rhq.core.domain.criteria.StorageNodeCriteria; +import org.rhq.core.domain.measurement.MeasurementAggregate; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.core.domain.util.PageOrdering; @@ -200,7 +201,8 @@ public class StorageNodeDatasource extends RPCDataSource<StorageNode, StorageNod
public static class StorageNodeLoadCompositeDatasource extends RPCDataSource<StorageNodeLoadComposite, StorageNodeCriteria> { public static final String HEAP_PERCENTAGE_KEY = "heapPercentage"; - public static final String DISK_SPACE_PERCENTAGE_KEY = "diskSpacePercentage"; + public static final String DATA_DISK_SPACE_PERCENTAGE_KEY = "dataDiskSpacePercentage"; + public static final String TOTAL_DISK_SPACE_PERCENTAGE_KEY = "totalDiskSpacePercentage"; private int id;
public static StorageNodeLoadCompositeDatasource getInstance(int id) { @@ -296,10 +298,15 @@ public class StorageNodeDatasource extends RPCDataSource<StorageNode, StorageNod "This value is calculated by dividing Heap Used by Heap Maximum.", HEAP_PERCENTAGE_KEY), Arrays.<Object> asList(loadComposite.getLoad(), "Load", "Data stored on the node", "load"), Arrays.<Object> asList( - loadComposite.getPartitionDiskUsedPercentage(), - "Disk Space Percent Used", - "Percentage of total disk space used for the partition that contains the data files.If multiple data locations are specified then this will report the average utilization accross all the partitions.", - DISK_SPACE_PERCENTAGE_KEY), + loadComposite.getDataDiskUsedPercentage(), + "Data Disk Space Percent Used", + "Percentage of disk space used by data files on the partitions that contain the data files. If multiple data locations are specified then the aggregate accross all the partitions that contain data files is reported.", + DATA_DISK_SPACE_PERCENTAGE_KEY), + Arrays.<Object> asList( + loadComposite.getTotalDiskUsedPercentage(), + "Total Disk Space Percent Used", + "Percentage of total disk space used (system and Storage Node) on the partitions that contain the data files. If multiple data locations are specified then the aggregate accross all the partitions that contain data files is reported.", + TOTAL_DISK_SPACE_PERCENTAGE_KEY), Arrays.<Object> asList( loadComposite.getDataDiskUsed(), "Total Disk Space Used", @@ -325,6 +332,21 @@ public class StorageNodeDatasource extends RPCDataSource<StorageNode, StorageNod recordsList.add(tokens); }
+ + if (loadComposite.getFreeDiskToDataSizeRatio() != null){ + MeasurementAggregate aggregate = loadComposite.getFreeDiskToDataSizeRatio(); + + ListGridRecord record = new ListGridRecord(); + record.setAttribute("id", "freeDiskToDataSizeRatio"); + record.setAttribute("name", "Free Disk To Data Size Ratio"); + record.setAttribute("hover", "Ratio of (Free Disk)/(Data File Size). A value below 1 is not recommended since a compaction or repair process could double the amount of disk space used by data files. If multiple data locations are specified then the aggregate accross all the partitions that contain data files is reported."); + record.setAttribute("min", aggregate.getMin()); + record.setAttribute("avg", aggregate.getAvg()); + record.setAttribute("max", aggregate.getMax()); + + recordsList.add(record); + } + ListGridRecord[] records = recordsList.toArray(new ListGridRecord[recordsList.size()]); return records; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeLoadComponent.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeLoadComponent.java index e8dde9d..e044e4e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeLoadComponent.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeLoadComponent.java @@ -51,8 +51,9 @@ public class StorageNodeLoadComponent extends EnhancedVLayout { @Override protected String getCellCSSText(ListGridRecord record, int rowNum, int colNum) { if ("avg".equals(getFieldName(colNum)) - && (StorageNodeLoadCompositeDatasource.HEAP_PERCENTAGE_KEY.equals(record.getAttribute("id")) || StorageNodeLoadCompositeDatasource.DISK_SPACE_PERCENTAGE_KEY - .equals(record.getAttribute("id")))) { + && (StorageNodeLoadCompositeDatasource.HEAP_PERCENTAGE_KEY.equals(record.getAttribute("id")) || + StorageNodeLoadCompositeDatasource.DATA_DISK_SPACE_PERCENTAGE_KEY.equals(record.getAttribute("id")) || + StorageNodeLoadCompositeDatasource.TOTAL_DISK_SPACE_PERCENTAGE_KEY.equals(record.getAttribute("id")))) { if (record.getAttributeAsFloat("avgFloat") > .85) { return "font-weight:bold; color:#d64949;"; } else if (record.getAttributeAsFloat("avgFloat") > .7) { 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 fab803b..31e3bf7 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 @@ -253,13 +253,16 @@ public class StorageNodeManagerBean implements StorageNodeManagerLocal, StorageN Map<String, Integer> scheduleIdsMap = new HashMap<String, Integer>();
// get the schedule ids for Storage Service resource - final String tokensMetric = "Tokens", ownershipMetric = "Ownership", diskUsedPercentageMetric = "Calculated.PartitionDiskUsedPercentage"; + final String tokensMetric = "Tokens", ownershipMetric = "Ownership"; + final String dataDiskUsedPercentageMetric = "Calculated.DataDiskUsedPercentage"; + final String totalDiskUsedPercentageMetric = "Calculated.TotalDiskUsedPercentage"; + final String freeDiskToDataRatioMetric = "Calculated.FreeDiskToDataSizeRatio"; final String loadMetric = "Load", keyCacheSize = "KeyCacheSize", rowCacheSize = "RowCacheSize", totalCommitLogSize = "TotalCommitlogSize"; TypedQuery<Object[]> query = entityManager.<Object[]> createNamedQuery( StorageNode.QUERY_FIND_SCHEDULE_IDS_BY_PARENT_RESOURCE_ID_AND_MEASUREMENT_DEFINITION_NAMES, Object[].class); query.setParameter("parrentId", resourceId).setParameter("metricNames", - Arrays.asList(tokensMetric, ownershipMetric, diskUsedPercentageMetric, loadMetric, keyCacheSize, - rowCacheSize, totalCommitLogSize)); + Arrays.asList(tokensMetric, ownershipMetric, loadMetric, keyCacheSize, rowCacheSize, totalCommitLogSize, + dataDiskUsedPercentageMetric, totalDiskUsedPercentageMetric, freeDiskToDataRatioMetric)); for (Object[] pair : query.getResultList()) { scheduleIdsMap.put((String) pair[0], (Integer) pair[1]); } @@ -292,10 +295,22 @@ public class StorageNodeManagerBean implements StorageNodeManagerLocal, StorageN subject, scheduleId, MeasurementUnits.PERCENTAGE, beginTime, endTime); result.setActuallyOwns(ownershipAggregateWithUnits); } - if ((scheduleId = scheduleIdsMap.get(diskUsedPercentageMetric)) != null) { - StorageNodeLoadComposite.MeasurementAggregateWithUnits diskUsedPercentageAggregateWithUnits = getMeasurementAggregateWithUnits( + + //calculated disk space related metrics + if ((scheduleId = scheduleIdsMap.get(dataDiskUsedPercentageMetric)) != null) { + StorageNodeLoadComposite.MeasurementAggregateWithUnits dataDiskUsedPercentageAggregateWithUnits = getMeasurementAggregateWithUnits( + subject, scheduleId, MeasurementUnits.PERCENTAGE, beginTime, endTime); + result.setDataDiskUsedPercentage(dataDiskUsedPercentageAggregateWithUnits); + } + if ((scheduleId = scheduleIdsMap.get(totalDiskUsedPercentageMetric)) != null) { + StorageNodeLoadComposite.MeasurementAggregateWithUnits totalDiskUsedPercentageAggregateWithUnits = getMeasurementAggregateWithUnits( subject, scheduleId, MeasurementUnits.PERCENTAGE, beginTime, endTime); - result.setPartitionDiskUsedPercentage(diskUsedPercentageAggregateWithUnits); + result.setDataDiskUsedPercentage(totalDiskUsedPercentageAggregateWithUnits); + } + if ((scheduleId = scheduleIdsMap.get(freeDiskToDataRatioMetric)) != null) { + MeasurementAggregate freeDiskToDataRatioAggregate = measurementManager.getAggregate(subject, + scheduleId, beginTime, endTime); + result.setFreeDiskToDataSizeRatio(freeDiskToDataRatioAggregate); }
if ((scheduleId = scheduleIdsMap.get(loadMetric)) != null) { diff --git a/modules/plugins/cassandra/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/cassandra/src/main/resources/META-INF/rhq-plugin.xml index 5bbebed..e95f995 100644 --- a/modules/plugins/cassandra/src/main/resources/META-INF/rhq-plugin.xml +++ b/modules/plugins/cassandra/src/main/resources/META-INF/rhq-plugin.xml @@ -188,7 +188,7 @@
<metric property="Calculated.DataDiskUsedPercentage" displayName="Data File Disk Used Percentage" dataType="measurement" units="percentage" displayType="summary" description="Percentage of disk space used by Cassandra data files. The aggregate accross all the partitions will be reported if multiple data locations are specified. This is a calculated metric derived from system and Cassandra runtime information."/> <metric property="Calculated.TotalDiskUsedPercentage" displayName="Total Disk Used Percentage" dataType="measurement" units="percentage" displayType="summary" description="Percentage of total disk space used. The metric acounts overall disk usage (including system files), not just disk space used by Cassandra. The aggregate accross all the partitions will be reported if multiple data locations are specified. This is a calculated metric derived from system and Cassandra runtime information."/> - <metric property="Calculated.FreeDiskToDataSizeRatio" displayName="Free Disk to Data Size Ratio" dataType="measurement" displayType="summary" description="Ratio of (Amount of Free Disk)/(Data File Size). A value below 1 is not recommended since a compaction or repair process could double the amount of disk space used by data files. The aggregate accross all the partitions will be reported if multiple data locations are specified. This is a calculated metric derived from system and Cassandra runtime information."/> + <metric property="Calculated.FreeDiskToDataSizeRatio" displayName="Free Disk to Data Size Ratio" dataType="measurement" displayType="summary" description="Ratio of (Free Disk)/(Data File Size). A value below 1 is not recommended since a compaction or repair process could double the amount of disk space used by data files. The aggregate accross all the partitions will be reported if multiple data locations are specified. This is a calculated metric derived from system and Cassandra runtime information."/>
<metric property="CurrentGenerationNumber" dataType="trait" displayType="summary" description="Current generation number"/> <metric property="ExceptionCount" measurementType="trendsup" dataType="measurement" displayType="summary" description="Exception Count"/>
commit 6997631e56204db41c9f4902eef1c6210706be3f Author: Stefan Negrea snegrea@redhat.com Date: Mon Jul 22 15:14:22 2013 -0500
Add back code used to update storage node configuration tha was lost due to rebase. This code updates two additional storage node properties added.
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 b32ab5b..fab803b 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 @@ -611,6 +611,8 @@ public class StorageNodeManagerBean implements StorageNodeManagerLocal, StorageN storageNodeResource.getId());
configuration.setHeapSize(storageNodeConfiguration.getSimpleValue("maxHeapSize")); + configuration.setHeapNewSize(storageNodeConfiguration.getSimpleValue("heapNewSize")); + configuration.setThreadStackSize(storageNodeConfiguration.getSimpleValue("threadStackSize")); configuration.setJmxPort(storageNode.getJmxPort()); }
diff --git a/modules/plugins/rhq-storage/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/rhq-storage/src/main/resources/META-INF/rhq-plugin.xml index 8156d02..1e39d6c 100644 --- a/modules/plugins/rhq-storage/src/main/resources/META-INF/rhq-plugin.xml +++ b/modules/plugins/rhq-storage/src/main/resources/META-INF/rhq-plugin.xml @@ -122,6 +122,9 @@ <operation name="updateConfiguration" description="Updates the node configuration. Will require a separate server restart for the settings to take effect."> <parameters> <c:simple-property name="heapSize" type="string" description="The heap size to be used for both -Xms and -Xmx JVM options."/> + <c:simple-property name="heapNewSize" type="string" description="The heap new size to be used be used with -Xmn JVM option."/> + <c:simple-property name="threadStackSize" type="integer" description="The thread stack size. This memory is allocated to each thread off heap. The + value should be an integer that will be interpreted in kilobytes."/> <c:simple-property name="jmxPort" type="integer" description="JMX port JVM option."/> </parameters> <results>
rhq-commits@lists.fedorahosted.org