Repository: ambari Updated Branches: refs/heads/branch-2.5 05bb83fee -> 9b3db7e83
AMBARI-18711: Ambari-server: DB changes to enable/disable credential store support Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9b3db7e8 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9b3db7e8 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9b3db7e8 Branch: refs/heads/branch-2.5 Commit: 9b3db7e8338edc0d699c38532d00f12a550436c2 Parents: 05bb83f Author: Nahappan Somasundaram <[email protected]> Authored: Mon Oct 31 09:25:58 2016 -0700 Committer: Nahappan Somasundaram <[email protected]> Committed: Mon Nov 7 08:47:29 2016 -0800 ---------------------------------------------------------------------- .../orm/entities/ServiceDesiredStateEntity.java | 42 +++++++++ .../org/apache/ambari/server/state/Service.java | 31 +++++++ .../apache/ambari/server/state/ServiceImpl.java | 95 ++++++++++++++++++++ .../server/upgrade/UpgradeCatalog250.java | 21 ++++- .../main/resources/Ambari-DDL-Derby-CREATE.sql | 2 + .../main/resources/Ambari-DDL-MySQL-CREATE.sql | 2 + .../main/resources/Ambari-DDL-Oracle-CREATE.sql | 2 + .../resources/Ambari-DDL-Postgres-CREATE.sql | 2 + .../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 2 + .../resources/Ambari-DDL-SQLServer-CREATE.sql | 2 + .../server/upgrade/UpgradeCatalog250Test.java | 24 +++++ 11 files changed, 224 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/9b3db7e8/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceDesiredStateEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceDesiredStateEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceDesiredStateEntity.java index 6cb3dde..e4401a1 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceDesiredStateEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceDesiredStateEntity.java @@ -67,6 +67,12 @@ public class ServiceDesiredStateEntity { @Enumerated(value = EnumType.STRING) private SecurityState securityState = SecurityState.UNSECURED; + @Column(name = "credential_store_supported", nullable = false, insertable = true, updatable = true) + private short credentialStoreSupported = 0; + + @Column(name = "credential_store_enabled", nullable = false, insertable = true, updatable = true) + private short credentialStoreEnabled = 0; + @OneToOne @javax.persistence.JoinColumns( { @@ -131,6 +137,42 @@ public class ServiceDesiredStateEntity { this.securityState = securityState; } + /** + * Gets a value indicating if credential store is supported or not. + * + * @return true or false + */ + public boolean isCredentialStoreSupported() { + return credentialStoreSupported != 0; + } + + /** + * Sets a value indicating if credential store is supported or not. + * + * @param credentialStoreSupported + */ + public void setCredentialStoreSupported(boolean credentialStoreSupported) { + this.credentialStoreSupported = (short)((credentialStoreSupported == false) ? 0 : 1); + } + + /** + * Gets a value indicating if credential store use is enabled or not. + * + * @return true or false + */ + public boolean isCredentialStoreEnabled() { + return credentialStoreEnabled != 0; + } + + /** + * Sets a value indicating if credential store use is enabled or not. + * + * @param credentialStoreEnabled + */ + public void setCredentialStoreEnabled(boolean credentialStoreEnabled) { + this.credentialStoreEnabled = (short)((credentialStoreEnabled == false) ? 0 : 1); + } + @Override public boolean equals(Object o) { if (this == o) { http://git-wip-us.apache.org/repos/asf/ambari/blob/9b3db7e8/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java index df3cfd8..cf36a8b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java @@ -102,6 +102,37 @@ public interface Service { */ MaintenanceState getMaintenanceState(); + /** + * Get a true or false value specifying + * whether credential store is supported by this service. + * @return true or false + */ + boolean isCredentialStoreSupported(); + + /** + * Set a true or false value specifying if this + * service supports credential store. + * + * @param credentialStoreSupported - true or false + */ + void setCredentialStoreSupported(boolean credentialStoreSupported); + + /** + * Get a true or false value specifying whether + * credential store use is enabled for this service. + * + * @return true or false + */ + boolean isCredentialStoreEnabled(); + + /** + * Set a true or false value specifying whether this + * service is to be enabled for credential store use. + * + * @param credentialStoreEnabled - true or false + */ + void setCredentialStoreEnabled(boolean credentialStoreEnabled); + enum Type { HDFS, GLUSTERFS, http://git-wip-us.apache.org/repos/asf/ambari/blob/9b3db7e8/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java index 9b56059..6f8d306 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java @@ -318,6 +318,101 @@ public class ServiceImpl implements Service { return cluster; } + /** + * Get a true or false value specifying whether + * credential store is supported by this service. + * + * @return true or false + */ + @Override + public boolean isCredentialStoreSupported() { + ServiceDesiredStateEntity desiredStateEntity = getServiceDesiredStateEntity(); + + if (desiredStateEntity != null) { + return desiredStateEntity.isCredentialStoreSupported(); + } else { + LOG.warn("Trying to fetch a member from an entity object that may " + + "have been previously deleted, serviceName = " + getName()); + } + return false; + } + + + /** + * Set a true or false value specifying whether this + * service supports credential store. + * + * @param credentialStoreSupported - true or false + */ + @Override + public void setCredentialStoreSupported(boolean credentialStoreSupported) { + if (LOG.isDebugEnabled()) { + LOG.debug("Setting CredentialStoreEnabled of Service" + ", clusterName=" + + cluster.getClusterName() + ", clusterId=" + + cluster.getClusterId() + ", serviceName=" + getName() + + ", oldCredentialStoreSupported=" + isCredentialStoreSupported() + + ", newCredentialStoreSupported=" + credentialStoreSupported); + } + + ServiceDesiredStateEntity desiredStateEntity = getServiceDesiredStateEntity(); + + if (desiredStateEntity != null) { + desiredStateEntity.setCredentialStoreSupported(credentialStoreSupported); + serviceDesiredStateDAO.merge(desiredStateEntity); + + } else { + LOG.warn("Setting a member on an entity object that may have been " + + "previously deleted, serviceName = " + getName()); + } + } + + /** + * Get a true or false value specifying whether + * credential store use is enabled for this service. + * + * @return true or false + */ + @Override + public boolean isCredentialStoreEnabled() { + ServiceDesiredStateEntity desiredStateEntity = getServiceDesiredStateEntity(); + + if (desiredStateEntity != null) { + return desiredStateEntity.isCredentialStoreEnabled(); + } else { + LOG.warn("Trying to fetch a member from an entity object that may " + + "have been previously deleted, serviceName = " + getName()); + } + return false; + } + + + /** + * Set a true or false value specifying whether this + * service is to be enabled for credential store use. + * + * @param credentialStoreEnabled - true or false + */ + @Override + public void setCredentialStoreEnabled(boolean credentialStoreEnabled) { + if (LOG.isDebugEnabled()) { + LOG.debug("Setting CredentialStoreEnabled of Service" + ", clusterName=" + + cluster.getClusterName() + ", clusterId=" + + cluster.getClusterId() + ", serviceName=" + getName() + + ", oldCredentialStoreEnabled=" + isCredentialStoreEnabled() + + ", newCredentialStoreEnabled=" + credentialStoreEnabled); + } + + ServiceDesiredStateEntity desiredStateEntity = getServiceDesiredStateEntity(); + + if (desiredStateEntity != null) { + desiredStateEntity.setCredentialStoreEnabled(credentialStoreEnabled); + desiredStateEntity = serviceDesiredStateDAO.merge(desiredStateEntity); + } else { + LOG.warn("Setting a member on an entity object that may have been " + + "previously deleted, serviceName = " + getName()); + } + } + @Override public void debugDump(StringBuilder sb) { sb.append("Service={ serviceName=" + getName() + ", clusterName=" + cluster.getClusterName() http://git-wip-us.apache.org/repos/asf/ambari/blob/9b3db7e8/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java index 20dd736..a7d5af9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java @@ -58,6 +58,10 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog { public static final String COMPONENT_VERSION_FK_COMPONENT = "FK_scv_component_id"; public static final String COMPONENT_VERSION_FK_REPO_VERSION = "FK_scv_repo_version_id"; + protected static final String SERVICE_DESIRED_STATE_TABLE = "servicedesiredstate"; + protected static final String CREDENTIAL_STORE_SUPPORTED_COL = "credential_store_supported"; + protected static final String CREDENTIAL_STORE_ENABLED_COL = "credential_store_enabled"; + /** * Logger. */ @@ -110,7 +114,7 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog { dbAccessor.addColumn("stage", new DBAccessor.DBColumnInfo("command_execution_type", String.class, 32, CommandExecutionType.STAGE.toString(), false)); - + updateServiceDesiredStateTable(); } /** @@ -214,5 +218,20 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog { addSequence("servicecomponent_version_id_seq", 0L, false); } + + /** + * Alter servicedesiredstate table. + * @throws SQLException + */ + private void updateServiceDesiredStateTable() throws SQLException { + // ALTER TABLE servicedesiredstate ADD COLUMN + // credential_store_supported SMALLINT DEFAULT 0 NOT NULL + // credential_store_enabled SMALLINT DEFAULT 0 NOT NULL + dbAccessor.addColumn(SERVICE_DESIRED_STATE_TABLE, + new DBColumnInfo(CREDENTIAL_STORE_SUPPORTED_COL, Short.class, null, 0, false)); + + dbAccessor.addColumn(SERVICE_DESIRED_STATE_TABLE, + new DBColumnInfo(CREDENTIAL_STORE_ENABLED_COL, Short.class, null, 0, false)); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/9b3db7e8/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql index a0a0afd..8cf2c0d 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql @@ -259,6 +259,8 @@ CREATE TABLE servicedesiredstate ( service_name VARCHAR(255) NOT NULL, maintenance_state VARCHAR(32) NOT NULL, security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED', + credential_store_supported SMALLINT NOT NULL DEFAULT 0, + credential_store_enabled SMALLINT NOT NULL DEFAULT 0, CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name), CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id), CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id)); http://git-wip-us.apache.org/repos/asf/ambari/blob/9b3db7e8/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql index 7a02315..37a9757 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql @@ -259,6 +259,8 @@ CREATE TABLE servicedesiredstate ( service_name VARCHAR(255) NOT NULL, maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE', security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED', + credential_store_supported SMALLINT NOT NULL DEFAULT 0, + credential_store_enabled SMALLINT NOT NULL DEFAULT 0, CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name), CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id), CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id)); http://git-wip-us.apache.org/repos/asf/ambari/blob/9b3db7e8/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql index 3b486fe..15d6120 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql @@ -250,6 +250,8 @@ CREATE TABLE servicedesiredstate ( service_name VARCHAR2(255) NOT NULL, maintenance_state VARCHAR2(32) NOT NULL, security_state VARCHAR2(32) DEFAULT 'UNSECURED' NOT NULL, + credential_store_supported SMALLINT DEFAULT 0 NOT NULL, + credential_store_enabled SMALLINT DEFAULT 0 NOT NULL, CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name), CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id), CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id)); http://git-wip-us.apache.org/repos/asf/ambari/blob/9b3db7e8/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql index c5a9119..5a82a52 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql @@ -259,6 +259,8 @@ CREATE TABLE servicedesiredstate ( service_name VARCHAR(255) NOT NULL, maintenance_state VARCHAR(32) NOT NULL, security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED', + credential_store_supported SMALLINT NOT NULL DEFAULT 0, + credential_store_enabled SMALLINT NOT NULL DEFAULT 0, CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name), CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id), CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id)); http://git-wip-us.apache.org/repos/asf/ambari/blob/9b3db7e8/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql index 2905eda..659e4dc 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql @@ -248,6 +248,8 @@ CREATE TABLE servicedesiredstate ( service_name VARCHAR(255) NOT NULL, maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE', security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED', + credential_store_supported SMALLINT NOT NULL DEFAULT 0, + credential_store_enabled SMALLINT NOT NULL DEFAULT 0, CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name), CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id), CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id)); http://git-wip-us.apache.org/repos/asf/ambari/blob/9b3db7e8/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql index 6b19974..e9a258a 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql @@ -262,6 +262,8 @@ CREATE TABLE servicedesiredstate ( service_name VARCHAR(255) NOT NULL, maintenance_state VARCHAR(32) NOT NULL, security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED', + credential_store_supported SMALLINT NOT NULL DEFAULT 0, + credential_store_enabled SMALLINT NOT NULL DEFAULT 0, CONSTRAINT PK_servicedesiredstate PRIMARY KEY CLUSTERED (cluster_id,service_name), CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id), CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id)); http://git-wip-us.apache.org/repos/asf/ambari/blob/9b3db7e8/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java index 023af50..5ac0822 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java @@ -120,6 +120,11 @@ public class UpgradeCatalog250Test { eq(UpgradeCatalog250.COMPONENT_VERSION_FK_REPO_VERSION), eq("repo_version_id"), eq("repo_version"), eq("repo_version_id"), eq(false)); + // servicedesiredstate table + Capture<DBAccessor.DBColumnInfo> capturedCredentialStoreSupportedCol = newCapture(); + Capture<DBAccessor.DBColumnInfo> capturedCredentialStoreEnabledCol = newCapture(); + dbAccessor.addColumn(eq(UpgradeCatalog250.SERVICE_DESIRED_STATE_TABLE), capture(capturedCredentialStoreSupportedCol)); + dbAccessor.addColumn(eq(UpgradeCatalog250.SERVICE_DESIRED_STATE_TABLE), capture(capturedCredentialStoreEnabledCol)); expect(dbAccessor.getConnection()).andReturn(connection); expect(connection.createStatement()).andReturn(statement); @@ -170,6 +175,25 @@ public class UpgradeCatalog250Test { // did we get them all? Assert.assertEquals(0, expected.size()); + // Verify if credential_store_supported & credential_store_enabled columns + // were added to servicedesiredstate table + DBAccessor.DBColumnInfo capturedCredentialStoreSupportedColValues = capturedCredentialStoreSupportedCol.getValue(); + Assert.assertNotNull(capturedCredentialStoreSupportedColValues); + + Assert.assertEquals(UpgradeCatalog250.CREDENTIAL_STORE_SUPPORTED_COL, capturedCredentialStoreSupportedColValues.getName()); + Assert.assertEquals(null, capturedCredentialStoreSupportedColValues.getLength()); + Assert.assertEquals(Short.class, capturedCredentialStoreSupportedColValues.getType()); + Assert.assertEquals(0, capturedCredentialStoreSupportedColValues.getDefaultValue()); + Assert.assertEquals(false, capturedCredentialStoreSupportedColValues.isNullable()); + + DBAccessor.DBColumnInfo capturedCredentialStoreEnabledColValues = capturedCredentialStoreEnabledCol.getValue(); + Assert.assertNotNull(capturedCredentialStoreEnabledColValues); + + Assert.assertEquals(UpgradeCatalog250.CREDENTIAL_STORE_ENABLED_COL, capturedCredentialStoreEnabledColValues.getName()); + Assert.assertEquals(null, capturedCredentialStoreEnabledColValues.getLength()); + Assert.assertEquals(Short.class, capturedCredentialStoreEnabledColValues.getType()); + Assert.assertEquals(0, capturedCredentialStoreEnabledColValues.getDefaultValue()); + Assert.assertEquals(false, capturedCredentialStoreEnabledColValues.isNullable()); } @Test
