modules/core/dbutils/pom.xml | 2 modules/core/dbutils/src/main/scripts/dbsetup/sysconfig-data.xml | 6 modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml | 9 modules/core/domain/src/main/java/org/rhq/core/domain/cloud/StorageClusterSettings.java | 15 + modules/core/domain/src/main/java/org/rhq/core/domain/common/composite/SystemSetting.java | 1 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/ClusterConfigurationEditor.java | 97 ++++++---- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeTableView.java | 28 ++ modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java | 2 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageClusterSettingsManagerBean.java | 11 + modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java | 1 10 files changed, 130 insertions(+), 42 deletions(-)
New commits: commit 1a8bb538cc72699de9789f6f6f07329e105d7bab Author: Jirka Kremser jkremser@redhat.com Date: Wed Aug 21 12:07:32 2013 +0200
Creating a system property for storing the storage node automatic deployment flag; updating the schema.
diff --git a/modules/core/dbutils/pom.xml b/modules/core/dbutils/pom.xml index 70783f4..261b6ba 100644 --- a/modules/core/dbutils/pom.xml +++ b/modules/core/dbutils/pom.xml @@ -17,7 +17,7 @@ <description>Database schema setup, upgrade and other utilities</description>
<properties> - <db.schema.version>2.137</db.schema.version> + <db.schema.version>2.138</db.schema.version> <rhq.ds.type-mapping>${rhq.test.ds.type-mapping}</rhq.ds.type-mapping> <rhq.ds.server-name>${rhq.test.ds.server-name}</rhq.ds.server-name> <rhq.ds.db-name>${rhq.test.ds.db-name}</rhq.ds.db-name> diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/sysconfig-data.xml b/modules/core/dbutils/src/main/scripts/dbsetup/sysconfig-data.xml index 502a289..aeb44fe 100644 --- a/modules/core/dbutils/src/main/scripts/dbsetup/sysconfig-data.xml +++ b/modules/core/dbutils/src/main/scripts/dbsetup/sysconfig-data.xml @@ -133,11 +133,15 @@ <data ID="58" PROPERTY_KEY="DRIFT_FILE_PURGE" PROPERTY_VALUE="2678400000" DEFAULT_PROPERTY_VALUE="2678400000" FREAD_ONLY="FALSE"/>
+ <!-- How long the UI session is allowed to be without any interaction before we consider it expired --> <data ID="59" PROPERTY_KEY="RHQ_SESSION_TIMEOUT" PROPERTY_VALUE="3600000" DEFAULT_PROPERTY_VALUE="3600000" FREAD_ONLY="FALSE"/>
- + <!-- Whether the newly installed storage nodes will be automatically deployed to the storage cluster --> + <data ID="60" PROPERTY_KEY="STORAGE_AUTOMATIC_DEPLOYMENT" + PROPERTY_VALUE="false" DEFAULT_PROPERTY_VALUE="false" + FREAD_ONLY="TRUE"/> </table>
</dbsetup> diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml index 6adccba..3e4f210 100644 --- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml +++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml @@ -2211,6 +2211,15 @@ </schema-directSQL> </schemaSpec>
+ <schemaSpec version="2.138"> + <schema-directSQL> + <statement desc="Adding automatic deployment system setting"> + INSERT INTO rhq_system_config (id, property_key, property_value, default_property_value) + VALUES (60, 'STORAGE_AUTOMATIC_DEPLOYMENT', 'false', 'false') + </statement> + </schema-directSQL> + </schemaSpec> + </dbupgrade> </target> </project> diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/common/composite/SystemSetting.java b/modules/core/domain/src/main/java/org/rhq/core/domain/common/composite/SystemSetting.java index 0f2f27c..70ad0e8 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/common/composite/SystemSetting.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/common/composite/SystemSetting.java @@ -117,6 +117,7 @@ public enum SystemSetting { */ STORAGE_CQL_PORT("STORAGE_CQL_PORT", PropertySimpleType.INTEGER, true, true), STORAGE_GOSSIP_PORT("STORAGE_GOSSIP_PORT", PropertySimpleType.INTEGER, true, true), + STORAGE_AUTOMATIC_DEPLOYMENT("STORAGE_AUTOMATIC_DEPLOYMENT", PropertySimpleType.BOOLEAN, true, true),
//these seem to be unused yet still present in the database... @Deprecated diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeTableView.java index 50cb614..4e2edf2 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeTableView.java @@ -468,6 +468,17 @@ public class StorageNodeTableView extends TableSection<StorageNodeDatasource> { return false; } } + List<ListGridRecord> selectionList = Arrays.asList(selection); + ListGridRecord[] allRecords = getListGrid().getRecords(); + for (ListGridRecord storageNodeRecord : allRecords) { + if (!selectionList.contains(storageNodeRecord)) { + if (StorageNode.Status.JOINING.toString().equals(storageNodeRecord.getAttributeAsString(FIELD_STATUS.propertyName())) + || StorageNode.Status.LEAVING.toString().equals(storageNodeRecord.getAttributeAsString(FIELD_STATUS.propertyName())) + || StorageNode.Status.DOWN.toString().equals(storageNodeRecord.getAttributeAsString(FIELD_STATUS.propertyName()))) { + return false; + } + } + } return true; }
@@ -481,7 +492,22 @@ public class StorageNodeTableView extends TableSection<StorageNodeDatasource> { return false; } } - return true; + List<ListGridRecord> selectionList = Arrays.asList(selection); + ListGridRecord[] allRecords = getListGrid().getRecords(); + int nodesInNormalCouner = 0; + for (ListGridRecord storageNodeRecord : allRecords) { + if (!selectionList.contains(storageNodeRecord)) { + if (StorageNode.Status.JOINING.toString().equals(storageNodeRecord.getAttributeAsString(FIELD_STATUS.propertyName())) + || StorageNode.Status.LEAVING.toString().equals(storageNodeRecord.getAttributeAsString(FIELD_STATUS.propertyName())) + || StorageNode.Status.DOWN.toString().equals(storageNodeRecord.getAttributeAsString(FIELD_STATUS.propertyName()))) { + return false; + } + } + if (StorageNode.Status.NORMAL.toString().equals(storageNodeRecord.getAttributeAsString(FIELD_STATUS.propertyName()))) { + nodesInNormalCouner++; + } + } + return nodesInNormalCouner > 1; }
@Override 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 5091fcf..e626dc6 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 @@ -106,6 +106,7 @@ public class StorageNodeManagerBean implements StorageNodeManagerLocal, StorageN private static final String RHQ_STORAGE_CQL_PORT_PROPERTY = "nativeTransportPort"; private static final String RHQ_STORAGE_GOSSIP_PORT_PROPERTY = "storagePort"; private static final String RHQ_STORAGE_JMX_PORT_PROPERTY = "jmxPort"; + private static final String RHQ_STORAGE_AUTOMATIC_DEPLOYMENT_PROPERTY = "storagePort"; private static final String RHQ_STORAGE_ADDRESS_PROPERTY = "host";
private static final int OPERATION_QUERY_TIMEOUT = 20000; @@ -215,6 +216,7 @@ public class StorageNodeManagerBean implements StorageNodeManagerLocal, StorageN clusterSettings = new StorageClusterSettings(); clusterSettings.setCqlPort(Integer.parseInt(pluginConfig.getSimpleValue(RHQ_STORAGE_CQL_PORT_PROPERTY))); clusterSettings.setGossipPort(Integer.parseInt(pluginConfig.getSimpleValue(RHQ_STORAGE_GOSSIP_PORT_PROPERTY))); +// clusterSettings.setAutomaticDeployment(Boolean.parseBoolean(pluginConfig.getSimpleValue(RHQ_STORAGE_GOSSIP_PORT_PROPERTY))); storageClusterSettingsManager.setClusterSettings(subjectManager.getOverlord(), clusterSettings); }
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageClusterSettingsManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageClusterSettingsManagerBean.java index 64fb310..f95c6ad 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageClusterSettingsManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageClusterSettingsManagerBean.java @@ -42,6 +42,13 @@ public class StorageClusterSettingsManagerBean implements StorageClusterSettings clusterSettings.setGossipPort(Integer.parseInt(settingsMap.get( SystemSetting.STORAGE_GOSSIP_PORT.getInternalName()))); } + + if (!settingsMap.containsKey(SystemSetting.STORAGE_AUTOMATIC_DEPLOYMENT.getInternalName())) { + return null; + } else { + clusterSettings.setAutomaticDeployment(Boolean.parseBoolean(settingsMap + .get(SystemSetting.STORAGE_AUTOMATIC_DEPLOYMENT.getInternalName()))); + }
return clusterSettings; } @@ -52,6 +59,10 @@ public class StorageClusterSettingsManagerBean implements StorageClusterSettings SystemSettings settings = new SystemSettings(); settings.put(SystemSetting.STORAGE_CQL_PORT, Integer.toString(clusterSettings.getCqlPort())); settings.put(SystemSetting.STORAGE_GOSSIP_PORT, Integer.toString(clusterSettings.getGossipPort())); + if (clusterSettings.getAutomaticDeployment() != null) { + settings.put(SystemSetting.STORAGE_AUTOMATIC_DEPLOYMENT, + Boolean.toString(clusterSettings.getAutomaticDeployment())); + } systemManager.setStorageClusterSettings(subject, settings); }
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java index aabd62b..86bb1b8 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java @@ -286,6 +286,7 @@ public class SystemManagerBean implements SystemManagerLocal, SystemManagerRemot switch (setting) { case STORAGE_CQL_PORT: return true; case STORAGE_GOSSIP_PORT: return true; + case STORAGE_AUTOMATIC_DEPLOYMENT: return true; default: return false; } }
commit 18266ec8704f27d4b5410584df890903aacaff75 Author: Jirka Kremser jkremser@redhat.com Date: Wed Aug 21 12:05:25 2013 +0200
Adding automaticDeployment field StorageClusterSettings, reflecting the change in UI.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/StorageClusterSettings.java b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/StorageClusterSettings.java index 661ad18..b44a2b5 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/StorageClusterSettings.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/StorageClusterSettings.java @@ -12,6 +12,8 @@ public class StorageClusterSettings implements Serializable { private int cqlPort;
private int gossipPort; + + private Boolean automaticDeployment;
public int getCqlPort() { return cqlPort; @@ -29,6 +31,14 @@ public class StorageClusterSettings implements Serializable { this.gossipPort = gossipPort; }
+ public Boolean getAutomaticDeployment() { + return automaticDeployment; + } + + public void setAutomaticDeployment(Boolean automaticDeployment) { + this.automaticDeployment = automaticDeployment; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -38,6 +48,7 @@ public class StorageClusterSettings implements Serializable {
if (cqlPort != that.cqlPort) return false; if (gossipPort != that.gossipPort) return false; + if (automaticDeployment != that.automaticDeployment) return false;
return true; } @@ -46,11 +57,13 @@ public class StorageClusterSettings implements Serializable { public int hashCode() { int result = cqlPort; result = 29 * result + gossipPort; + result = 29 * result + (automaticDeployment ? 1231 : 1237); return result; }
@Override public String toString() { - return "StorageClusterSettings[cqlPort=" + cqlPort + ", gossipPort=" + gossipPort + "]"; + return "StorageClusterSettings[cqlPort=" + cqlPort + ", gossipPort=" + gossipPort + ", automaticDeployment=" + + automaticDeployment + "]"; } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/ClusterConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/ClusterConfigurationEditor.java index bd11d03..ec948a3 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/ClusterConfigurationEditor.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/ClusterConfigurationEditor.java @@ -28,6 +28,7 @@ import com.smartgwt.client.util.BooleanCallback; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; +import com.smartgwt.client.widgets.form.fields.CheckboxItem; import com.smartgwt.client.widgets.form.fields.FormItem; import com.smartgwt.client.widgets.form.fields.StaticTextItem; import com.smartgwt.client.widgets.form.fields.TextItem; @@ -57,36 +58,36 @@ public class ClusterConfigurationEditor extends EnhancedVLayout implements Refre private EnhancedIButton saveButton; private boolean oddRow; private StorageClusterSettings settings; - + private static String FIELD_CQL_PORT = "cql_port"; private static String FIELD_GOSSIP_PORT = "gossip_port"; + private static String FIELD_AUTOMATIC_DEPLOYMENT = "automatic_deployment";
public ClusterConfigurationEditor() { super(); } - + private void fetchClusterSettings() { - GWTServiceLookup.getStorageService().retrieveClusterSettings( - new AsyncCallback<StorageClusterSettings>() { - @Override - public void onFailure(Throwable caught) { - Message message = new Message(MSG.view_configurationHistoryDetails_error_loadFailure(), - Message.Severity.Warning); - } + GWTServiceLookup.getStorageService().retrieveClusterSettings(new AsyncCallback<StorageClusterSettings>() { + @Override + public void onFailure(Throwable caught) { + Message message = new Message(MSG.view_configurationHistoryDetails_error_loadFailure(), + Message.Severity.Warning); + }
- @Override - public void onSuccess(StorageClusterSettings settings) { - ClusterConfigurationEditor.this.settings = settings; - prepareForm(); - } - }); + @Override + public void onSuccess(StorageClusterSettings settings) { + ClusterConfigurationEditor.this.settings = settings; + prepareForm(); + } + }); }
private void save() { updateSettings(); GWTServiceLookup.getStorageService().updateClusterSettings(settings, new AsyncCallback<Void>() { public void onSuccess(Void result) { - Message msg = new Message("Storage node settings were successfully updated.", Message.Severity.Info); + Message msg = new Message("Storage cluster settings were successfully updated.", Message.Severity.Info); CoreGUI.getMessageCenter().notify(msg); }
@@ -95,12 +96,12 @@ public class ClusterConfigurationEditor extends EnhancedVLayout implements Refre } }); } - + private List<FormItem> buildOneFormRowWithValidator(String name, String title, String value, String description, Validator validator) { return buildOneFormRow(name, title, value, description, false, validator); } - + private List<FormItem> buildOneFormRow(String name, String title, String value, String description, boolean unitsDropdown, Validator validator) { List<FormItem> fields = new ArrayList<FormItem>(); @@ -112,13 +113,13 @@ public class ClusterConfigurationEditor extends EnhancedVLayout implements Refre fields.add(nameItem);
FormItem valueItem = null; - valueItem = new TextItem(); - valueItem.setName(name); - valueItem.setValue(value); - valueItem.setWidth(220); - if (validator != null) { - valueItem.setValidators(validator); - } + valueItem = new TextItem(); + valueItem.setName(name); + valueItem.setValue(value); + valueItem.setWidth(220); + if (validator != null) { + valueItem.setValidators(validator); + } valueItem.setValidateOnChange(true); valueItem.setAlign(Alignment.CENTER); valueItem.setShowTitle(false); @@ -158,7 +159,7 @@ public class ClusterConfigurationEditor extends EnhancedVLayout implements Refre super.onDraw(); refresh(); } - + private void prepareForm() { form = new EnhancedDynamicForm(); form.setHiliteRequiredFields(true); @@ -171,27 +172,46 @@ public class ClusterConfigurationEditor extends EnhancedVLayout implements Refre oddRow = true;
List<FormItem> items = buildHeaderItems(); -// IntegerRangeValidator positiveInteger = new IntegerRangeValidator(); -// positiveInteger.setMin(1); -// positiveInteger.setMax(Integer.MAX_VALUE); + // IntegerRangeValidator positiveInteger = new IntegerRangeValidator(); + // positiveInteger.setMin(1); + // positiveInteger.setMax(Integer.MAX_VALUE); IsIntegerValidator validator = new IsIntegerValidator(); items.addAll(buildOneFormRowWithValidator(FIELD_CQL_PORT, "CQL Port", String.valueOf(settings.getCqlPort()), "The port on which the Storage Nodes listens for CQL client connections.", validator)); - -// IntegerRangeValidator portValidator = new IntegerRangeValidator(); -// portValidator.setMin(1); -// portValidator.setMax(65535); // (1 << 16) - 1 + + // IntegerRangeValidator portValidator = new IntegerRangeValidator(); + // portValidator.setMin(1); + // portValidator.setMax(65535); // (1 << 16) - 1 validator = new IsIntegerValidator(); - items.addAll(buildOneFormRowWithValidator(FIELD_GOSSIP_PORT, "Gossip Port", String.valueOf(settings.getGossipPort()), + items.addAll(buildOneFormRowWithValidator(FIELD_GOSSIP_PORT, "Gossip Port", + String.valueOf(settings.getGossipPort()), "The port used for internode communication. This is a shared, cluster-wide setting.", validator)); + + List<FormItem> automaticDeploymentItems = buildOneFormRow( + FIELD_AUTOMATIC_DEPLOYMENT, + "Automatic Deployment", + Boolean.toString(settings.getAutomaticDeployment()), + "If this is set, the newly installed storage nodes will be automatically deployed to the storage cluster.", + false, null); + CheckboxItem autoDeployCheckbox = new CheckboxItem(FIELD_AUTOMATIC_DEPLOYMENT); + autoDeployCheckbox.setValue(settings.getAutomaticDeployment()); + autoDeployCheckbox.setValidateOnChange(true); + autoDeployCheckbox.setAlign(Alignment.CENTER); + autoDeployCheckbox.setShowTitle(false); + autoDeployCheckbox.setShowLabel(false); + autoDeployCheckbox.setRequired(true); + autoDeployCheckbox.setCellStyle(!oddRow ? "OddRow" : "EvenRow"); + oddRow = !oddRow; + automaticDeploymentItems.set(1, autoDeployCheckbox); + items.addAll(automaticDeploymentItems); form.setFields(items.toArray(new FormItem[items.size()])); form.setWidth100(); form.setOverflow(Overflow.VISIBLE); setWidth100(); - + LayoutSpacer spacer = new LayoutSpacer(); spacer.setWidth100(); - + ToolStrip toolStrip = buildToolStrip(); setMembers(form, spacer, toolStrip); form.validate(); @@ -202,7 +222,7 @@ public class ClusterConfigurationEditor extends EnhancedVLayout implements Refre public void refresh() { fetchClusterSettings(); } - + private EnhancedToolStrip buildToolStrip() { saveButton = new EnhancedIButton(MSG.common_button_save()); saveButton.addClickHandler(new ClickHandler() { @@ -229,10 +249,11 @@ public class ClusterConfigurationEditor extends EnhancedVLayout implements Refre
return toolStrip; } - + private StorageClusterSettings updateSettings() { settings.setCqlPort(Integer.parseInt(form.getValueAsString(FIELD_CQL_PORT))); settings.setGossipPort(Integer.parseInt(form.getValueAsString(FIELD_GOSSIP_PORT))); + settings.setAutomaticDeployment(Boolean.parseBoolean(form.getValueAsString(FIELD_AUTOMATIC_DEPLOYMENT))); return settings; } }
rhq-commits@lists.fedorahosted.org