Repository: ambari Updated Branches: refs/heads/branch-dev-patch-upgrade 718f2ea18 -> e4d1475ea
AMBARI-15058 - Schema changes for component history (jonathanhurley) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e4d1475e Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e4d1475e Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e4d1475e Branch: refs/heads/branch-dev-patch-upgrade Commit: e4d1475eab7be09baeed6624447b122f2bf7853c Parents: 718f2ea Author: Jonathan Hurley <[email protected]> Authored: Tue Feb 16 13:40:47 2016 -0500 Committer: Jonathan Hurley <[email protected]> Committed: Tue Feb 16 15:54:39 2016 -0500 ---------------------------------------------------------------------- .../dao/ServiceComponentDesiredStateDAO.java | 53 +++++ .../ServiceComponentDesiredStateEntity.java | 40 ++++ .../entities/ServiceComponentHistoryEntity.java | 219 +++++++++++++++++++ .../main/resources/Ambari-DDL-Derby-CREATE.sql | 34 ++- .../main/resources/Ambari-DDL-MySQL-CREATE.sql | 26 ++- .../main/resources/Ambari-DDL-Oracle-CREATE.sql | 26 ++- .../resources/Ambari-DDL-Postgres-CREATE.sql | 31 ++- .../Ambari-DDL-Postgres-EMBEDDED-CREATE.sql | 28 ++- .../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 29 ++- .../resources/Ambari-DDL-SQLServer-CREATE.sql | 29 ++- .../src/main/resources/META-INF/persistence.xml | 1 + .../server/state/ServiceComponentTest.java | 140 ++++++++++++ 12 files changed, 599 insertions(+), 57 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceComponentDesiredStateDAO.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceComponentDesiredStateDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceComponentDesiredStateDAO.java index b8c2fcc..4c906cc 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceComponentDesiredStateDAO.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceComponentDesiredStateDAO.java @@ -20,12 +20,14 @@ package org.apache.ambari.server.orm.dao; import java.util.List; +import javax.persistence.CascadeType; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import org.apache.ambari.server.orm.RequiresSession; import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity; +import org.apache.ambari.server.orm.entities.ServiceComponentHistoryEntity; import com.google.inject.Inject; import com.google.inject.Provider; @@ -125,4 +127,55 @@ public class ServiceComponentDesiredStateDAO { entityManagerProvider.get().remove(entity); } } + + /** + * Creates a service component upgrade/downgrade historical event. + * + * @param serviceComponentHistoryEntity + */ + @Transactional + public void create(ServiceComponentHistoryEntity serviceComponentHistoryEntity) { + entityManagerProvider.get().persist(serviceComponentHistoryEntity); + } + + /** + * Merges a service component upgrade/downgrade historical event, creating it + * in the process if it does not already exist. The associated + * {@link ServiceComponentDesiredStateEntity} is automatically merged via its + * {@link CascadeType}. + * + * @param serviceComponentHistoryEntity + * @return + */ + @Transactional + public ServiceComponentHistoryEntity merge( + ServiceComponentHistoryEntity serviceComponentHistoryEntity) { + return entityManagerProvider.get().merge(serviceComponentHistoryEntity); + } + + /** + * Gets the history for a component. + * + * @param clusterId + * the component's cluster. + * @param serviceName + * the component's service (not {@code null}). + * @param componentName + * the component's name (not {@code null}). + * @return + */ + @RequiresSession + public List<ServiceComponentHistoryEntity> findHistory(long clusterId, String serviceName, + String componentName) { + EntityManager entityManager = entityManagerProvider.get(); + TypedQuery<ServiceComponentHistoryEntity> query = entityManager.createNamedQuery( + "ServiceComponentHistoryEntity.findByComponent", ServiceComponentHistoryEntity.class); + + query.setParameter("clusterId", clusterId); + query.setParameter("serviceName", serviceName); + query.setParameter("componentName", componentName); + + ServiceComponentDesiredStateEntity entity = null; + return daoUtils.selectList(query); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java index d2d1b42..65cc107 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java @@ -18,8 +18,10 @@ package org.apache.ambari.server.orm.entities; +import java.util.ArrayList; import java.util.Collection; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; @@ -96,6 +98,15 @@ public class ServiceComponentDesiredStateEntity { @OneToMany(mappedBy = "serviceComponentDesiredStateEntity") private Collection<HostComponentDesiredStateEntity> hostComponentDesiredStateEntities; + /** + * All of the upgrades and downgrades which have occurred for this component. + * Can be {@code null} for none. + */ + @OneToMany( + mappedBy = "m_serviceComponentDesiredStateEntity", + cascade = { CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE }) + private Collection<ServiceComponentHistoryEntity> serviceComponentHistory; + public Long getId() { return id; } @@ -140,6 +151,35 @@ public class ServiceComponentDesiredStateEntity { this.desiredStack = desiredStack; } + /** + * Adds a historical entry for the version of this service component. New + * entries are automatically created when this entities is merged via a + * {@link CascadeType#MERGE}. + * + * @param historicalEntry + * the entry to add. + */ + public void addHistory(ServiceComponentHistoryEntity historicalEntry) { + if (null == serviceComponentHistory) { + serviceComponentHistory = new ArrayList<>(); + } + + serviceComponentHistory.add(historicalEntry); + + if (!equals(historicalEntry.getServiceComponentDesiredState())) { + historicalEntry.setServiceComponentDesiredState(this); + } + } + + /** + * Gets the history of this component's upgrades and downgrades. + * + * @return the component history, or {@code null} if none. + */ + public Collection<ServiceComponentHistoryEntity> getHistory() { + return serviceComponentHistory; + } + @Override public boolean equals(Object o) { if (this == o) { http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentHistoryEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentHistoryEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentHistoryEntity.java new file mode 100644 index 0000000..e7fef71 --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentHistoryEntity.java @@ -0,0 +1,219 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.ambari.server.orm.entities; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; +import javax.persistence.TableGenerator; + +import org.apache.commons.lang.ObjectUtils; + +/** + * The {@link ServiceComponentHistoryEntity} class is used to represent an + * upgrade or downgrade which was performed on an individual service component. + */ +@Entity +@Table(name = "servicecomponent_history") +@TableGenerator( + name = "servicecomponent_history_id_generator", + table = "ambari_sequences", + pkColumnName = "sequence_name", + valueColumnName = "sequence_value", + pkColumnValue = "servicecomponent_history_id_seq", + initialValue = 0) +@NamedQueries({ @NamedQuery( + name = "ServiceComponentHistoryEntity.findByComponent", + query = "SELECT history FROM ServiceComponentHistoryEntity history WHERE history.m_serviceComponentDesiredStateEntity.clusterId = :clusterId AND history.m_serviceComponentDesiredStateEntity.serviceName = :serviceName AND history.m_serviceComponentDesiredStateEntity.componentName = :componentName") }) +public class ServiceComponentHistoryEntity { + + @Id + @GeneratedValue( + strategy = GenerationType.TABLE, + generator = "servicecomponent_history_id_generator") + @Column(name = "id", nullable = false, updatable = false) + private long m_id; + + @ManyToOne(optional = false, cascade = { CascadeType.MERGE }) + @JoinColumn(name = "component_id", referencedColumnName = "id", nullable = false) + private ServiceComponentDesiredStateEntity m_serviceComponentDesiredStateEntity; + + @ManyToOne(optional = false) + @JoinColumn(name = "from_stack_id", referencedColumnName = "stack_id", nullable = false) + private StackEntity m_fromStack; + + @ManyToOne(optional = false) + @JoinColumn(name = "to_stack_id", referencedColumnName = "stack_id", nullable = false) + private StackEntity m_toStack; + + @ManyToOne(optional = false) + @JoinColumn(name = "upgrade_id", referencedColumnName = "upgrade_id", nullable = false) + private UpgradeEntity m_upgradeEntity; + + public ServiceComponentDesiredStateEntity getServiceComponentDesiredState() { + return m_serviceComponentDesiredStateEntity; + } + + /** + * Sets the component associated with this historical entry. + * + * @param serviceComponentDesiredStateEntity + * the component to associate with this historical entry (not + * {@code null}). + */ + public void setServiceComponentDesiredState(ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity) { + m_serviceComponentDesiredStateEntity = serviceComponentDesiredStateEntity; + + if (!m_serviceComponentDesiredStateEntity.getHistory().contains(this)) { + m_serviceComponentDesiredStateEntity.addHistory(this); + } + } + + /** + * @return the id + */ + public long getId() { + return m_id; + } + + /** + * @return the fromStack + */ + public StackEntity getFromStack() { + return m_fromStack; + } + + /** + * @param fromStack + * the fromStack to set + */ + public void setFromStack(StackEntity fromStack) { + m_fromStack = fromStack; + } + + /** + * @return the toStack + */ + public StackEntity getToStack() { + return m_toStack; + } + + /** + * @param toStack + * the toStack to set + */ + public void setToStack(StackEntity toStack) { + m_toStack = toStack; + } + + /** + * @return the upgradeEntity + */ + public UpgradeEntity getUpgrade() { + return m_upgradeEntity; + } + + /** + * @param upgradeEntity + * the upgradeEntity to set + */ + public void setUpgrade(UpgradeEntity upgradeEntity) { + m_upgradeEntity = upgradeEntity; + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ObjectUtils.hashCode(m_fromStack); + result = prime * result + (int) (m_id ^ (m_id >>> 32)); + result = prime * result + ObjectUtils.hashCode(m_serviceComponentDesiredStateEntity); + result = prime * result + ObjectUtils.hashCode(m_toStack); + result = prime * result + ObjectUtils.hashCode(m_upgradeEntity); + return result; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (obj == null) { + return false; + } + + if (getClass() != obj.getClass()) { + return false; + } + + ServiceComponentHistoryEntity other = (ServiceComponentHistoryEntity) obj; + if (m_fromStack == null) { + if (other.m_fromStack != null) { + return false; + } + } else if (!m_fromStack.equals(other.m_fromStack)) { + return false; + } + + if (m_id != other.m_id) { + return false; + } + + if (m_serviceComponentDesiredStateEntity == null) { + if (other.m_serviceComponentDesiredStateEntity != null) { + return false; + } + } else if (!m_serviceComponentDesiredStateEntity.equals( + other.m_serviceComponentDesiredStateEntity)) { + return false; + } + + if (m_toStack == null) { + if (other.m_toStack != null) { + return false; + } + } else if (!m_toStack.equals(other.m_toStack)) { + return false; + } + + if (m_upgradeEntity == null) { + if (other.m_upgradeEntity != null) { + return false; + } + } else if (!m_upgradeEntity.equals(other.m_upgradeEntity)) { + return false; + } + + return true; + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/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 2865cf9..2db745b 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql @@ -177,12 +177,10 @@ CREATE TABLE servicecomponentdesiredstate ( desired_stack_id BIGINT NOT NULL, desired_state VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, - CONSTRAINT pk_servicecomponentdesiredstate PRIMARY KEY (id), - CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name,service_name,cluster_id) + CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id), + CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id) ); -CREATE INDEX idx_sc_desired_state ON servicecomponentdesiredstate(component_name, service_name, cluster_id); - CREATE TABLE servicedesiredstate ( cluster_id BIGINT NOT NULL, desired_host_role_mapping INTEGER NOT NULL, @@ -263,7 +261,7 @@ CREATE TABLE stage ( request_id BIGINT NOT NULL, cluster_id BIGINT NOT NULL, skippable SMALLINT DEFAULT 0 NOT NULL, - supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL, + supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL, log_info VARCHAR(255) NOT NULL, request_context VARCHAR(255), cluster_host_info BLOB NOT NULL, @@ -703,8 +701,8 @@ ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY ( ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id); ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id); ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); -ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); -ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); +ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); +ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); @@ -954,13 +952,26 @@ CREATE TABLE upgrade_item ( FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id) ); +CREATE TABLE servicecomponent_history( + id BIGINT NOT NULL, + component_id BIGINT NOT NULL, + upgrade_id BIGINT NOT NULL, + from_stack_id BIGINT NOT NULL, + to_stack_id BIGINT NOT NULL, + CONSTRAINT PK_sc_history PRIMARY KEY (id), + CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id), + CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id), + CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id), + CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id) +); + ---------inserting some data----------- -- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0. -- BEGIN; INSERT INTO ambari_sequences (sequence_name, sequence_value) SELECT 'cluster_id_seq', 1 FROM SYSIBM.SYSDUMMY1 UNION ALL - SELECT 'host_id_seq', 0 FROM SYSIBM.SYSDUMMY1 + SELECT 'host_id_seq', 0 FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 'user_id_seq', 2 FROM SYSIBM.SYSDUMMY1 UNION ALL @@ -1044,9 +1055,12 @@ INSERT INTO ambari_sequences (sequence_name, sequence_value) union all select 'setting_id_seq', 0 FROM SYSIBM.SYSDUMMY1 union all - select 'hostcomponentstate_id_seq', 0 FROM SYSIBM.SYSDUMMY1 + select 'hostcomponentstate_id_seq', 0 FROM SYSIBM.SYSDUMMY1 + union all + select 'servicecomponentdesiredstate_id_seq', 0 FROM SYSIBM.SYSDUMMY1 union all - select 'servicecomponentdesiredstate_id_seq', 0 FROM SYSIBM.SYSDUMMY1; + select 'servicecomponent_history_id_seq', 0 FROM SYSIBM.SYSDUMMY1; + INSERT INTO adminresourcetype (resource_type_id, resource_type_name) SELECT 1, 'AMBARI' FROM SYSIBM.SYSDUMMY1 http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/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 93ec226..8c626f5 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql @@ -1,5 +1,5 @@ -- --- Licensed to the stackpache Software Foundation (ASF) under one +-- Licensed to the Apache Software Foundation (ASF) under one -- or more contributor license agreements. See the NOTICE file -- distributed with this work for additional information -- regarding copyright ownership. The ASF licenses this file @@ -178,12 +178,10 @@ CREATE TABLE servicecomponentdesiredstate ( desired_stack_id BIGINT NOT NULL, desired_state VARCHAR(255) NOT NULL, service_name VARCHAR(100) NOT NULL, - CONSTRAINT pk_servicecomponentdesiredstate PRIMARY KEY (id), - CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name,service_name,cluster_id) + CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id), + CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id) ); -CREATE INDEX idx_sc_desired_state ON servicecomponentdesiredstate(component_name, service_name, cluster_id); - CREATE TABLE servicedesiredstate ( cluster_id BIGINT NOT NULL, desired_host_role_mapping INTEGER NOT NULL, @@ -713,8 +711,8 @@ ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY ( ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id); ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id); ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); -ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); -ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); +ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); +ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); @@ -964,6 +962,19 @@ CREATE TABLE upgrade_item ( FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id) ); +CREATE TABLE servicecomponent_history( + id BIGINT NOT NULL, + component_id BIGINT NOT NULL, + upgrade_id BIGINT NOT NULL, + from_stack_id BIGINT NOT NULL, + to_stack_id BIGINT NOT NULL, + CONSTRAINT PK_sc_history PRIMARY KEY (id), + CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id), + CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id), + CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id), + CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id) +); + -- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0. INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('cluster_id_seq', 1); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('host_id_seq', 0); @@ -1009,6 +1020,7 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('topology_re INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('topology_host_group_id_seq', 0); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('setting_id_seq', 0); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('hostcomponentstate_id_seq', 0); +INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('servicecomponent_history_id_seq', 0); insert into adminresourcetype (resource_type_id, resource_type_name) select 1, 'AMBARI' http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/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 b2d014b..f8e4ee1 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql @@ -168,12 +168,10 @@ CREATE TABLE servicecomponentdesiredstate ( desired_stack_id NUMBER(19) NOT NULL, desired_state VARCHAR2(255) NOT NULL, service_name VARCHAR2(255) NOT NULL, - CONSTRAINT pk_servicecomponentdesiredstate PRIMARY KEY (alert_id), - CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name,service_name,cluster_id) + CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id), + CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id) ); -CREATE INDEX idx_sc_desired_state ON servicecomponentdesiredstate(component_name, service_name, cluster_id); - CREATE TABLE servicedesiredstate ( cluster_id NUMBER(19) NOT NULL, desired_host_role_mapping NUMBER(10) NOT NULL, @@ -252,7 +250,7 @@ CREATE TABLE stage ( request_id NUMBER(19) NOT NULL, cluster_id NUMBER(19) NULL, skippable NUMBER(1) DEFAULT 0 NOT NULL, - supports_auto_skip_failure NUMBER(1) DEFAULT 0 NOT NULL, + supports_auto_skip_failure NUMBER(1) DEFAULT 0 NOT NULL, log_info VARCHAR2(255) NULL, request_context VARCHAR2(255) NULL, cluster_host_info BLOB NOT NULL, @@ -704,8 +702,8 @@ ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY ( ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id); ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id); ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); -ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); -ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); +ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); +ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); @@ -953,6 +951,19 @@ CREATE TABLE upgrade_item ( FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id) ); +CREATE TABLE servicecomponent_history( + id NUMBER(19) NOT NULL, + component_id NUMBER(19) NOT NULL, + upgrade_id NUMBER(19) NOT NULL, + from_stack_id NUMBER(19) NOT NULL, + to_stack_id NUMBER(19) NOT NULL, + CONSTRAINT PK_sc_history PRIMARY KEY (id), + CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id), + CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id), + CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id), + CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id) +); + ---------inserting some data----------- -- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0. INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('host_role_command_id_seq', 0); @@ -1000,6 +1011,7 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('topology_ho INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('setting_id_seq', 0); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('hostcomponentstate_id_seq', 0); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('servicecomponentdesiredstate_id_seq', 0); +INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('servicecomponent_history_id_seq', 0); INSERT INTO metainfo("metainfo_key", "metainfo_value") values ('version', '${ambariVersion}'); http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/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 7c648b2..e3ce96c 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql @@ -177,13 +177,10 @@ CREATE TABLE servicecomponentdesiredstate ( desired_stack_id BIGINT NOT NULL, desired_state VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, - CONSTRAINT pk_servicecomponentdesiredstate PRIMARY KEY (id), - CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name,service_name,cluster_id) + CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id), + CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id) ); -CREATE INDEX idx_sc_desired_state ON servicecomponentdesiredstate(component_name, service_name, cluster_id); - - CREATE TABLE servicedesiredstate ( cluster_id BIGINT NOT NULL, desired_host_role_mapping INTEGER NOT NULL, @@ -264,7 +261,7 @@ CREATE TABLE stage ( request_id BIGINT NOT NULL, cluster_id BIGINT NOT NULL, skippable SMALLINT DEFAULT 0 NOT NULL, - supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL, + supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL, log_info VARCHAR(255) NOT NULL, request_context VARCHAR(255), cluster_host_info BYTEA NOT NULL, @@ -705,8 +702,8 @@ ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY ( ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id); ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id); ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); -ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); -ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); +ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); +ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); @@ -956,6 +953,19 @@ CREATE TABLE upgrade_item ( FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id) ); +CREATE TABLE servicecomponent_history( + id BIGINT NOT NULL, + component_id BIGINT NOT NULL, + upgrade_id BIGINT NOT NULL, + from_stack_id BIGINT NOT NULL, + to_stack_id BIGINT NOT NULL, + CONSTRAINT PK_sc_history PRIMARY KEY (id), + CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id), + CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id), + CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id), + CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id) +); + ---------inserting some data----------- -- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0. BEGIN; @@ -1048,7 +1058,10 @@ INSERT INTO ambari_sequences (sequence_name, sequence_value) union all select 'hostcomponentstate_id_seq', 0 union all - select 'servicecomponentdesiredstate_id_seq', 0; + select 'servicecomponentdesiredstate_id_seq', 0 + union all + select 'servicecomponent_history_id_seq', 0; + INSERT INTO adminresourcetype (resource_type_id, resource_type_name) SELECT 1, 'AMBARI' http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql index 8e21f67..5d47c28 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql @@ -202,13 +202,11 @@ CREATE TABLE ambari.servicecomponentdesiredstate ( desired_stack_id BIGINT NOT NULL, desired_state VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, - CONSTRAINT pk_servicecomponentdesiredstate PRIMARY KEY (id), - CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name,service_name,cluster_id) + CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id), + CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id) ); GRANT ALL PRIVILEGES ON TABLE ambari.servicecomponentdesiredstate TO :username; -CREATE INDEX idx_sc_desired_state ON ambari.servicecomponentdesiredstate(component_name, service_name, cluster_id); - CREATE TABLE ambari.servicedesiredstate ( cluster_id BIGINT NOT NULL, desired_host_role_mapping INTEGER NOT NULL, @@ -786,8 +784,8 @@ ALTER TABLE ambari.clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIG ALTER TABLE ambari.cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id); ALTER TABLE ambari.cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES ambari.repo_version (repo_version_id); ALTER TABLE ambari.hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id); -ALTER TABLE ambari.hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES ambari.servicecomponentdesiredstate (component_name, cluster_id, service_name); -ALTER TABLE ambari.hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES ambari.servicecomponentdesiredstate (component_name, cluster_id, service_name); +ALTER TABLE ambari.hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES ambari.servicecomponentdesiredstate (component_name, service_name, cluster_id); +ALTER TABLE ambari.hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES ambari.servicecomponentdesiredstate (component_name, service_name, cluster_id); ALTER TABLE ambari.hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id); ALTER TABLE ambari.hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id); ALTER TABLE ambari.host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id); @@ -1054,6 +1052,20 @@ GRANT ALL PRIVILEGES ON TABLE ambari.upgrade TO :username; GRANT ALL PRIVILEGES ON TABLE ambari.upgrade_group TO :username; GRANT ALL PRIVILEGES ON TABLE ambari.upgrade_item TO :username; +CREATE TABLE ambari.servicecomponent_history( + id BIGINT NOT NULL, + component_id BIGINT NOT NULL, + upgrade_id BIGINT NOT NULL, + from_stack_id BIGINT NOT NULL, + to_stack_id BIGINT NOT NULL, + CONSTRAINT PK_sc_history PRIMARY KEY (id), + CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES ambari.servicecomponentdesiredstate (id), + CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES ambari.upgrade (upgrade_id), + CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES ambari.stack (stack_id), + CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES ambari.stack (stack_id) +); +GRANT ALL PRIVILEGES ON TABLE ambari.servicecomponent_history TO :username; + ---------inserting some data----------- -- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0. BEGIN; @@ -1146,7 +1158,9 @@ INSERT INTO ambari.ambari_sequences (sequence_name, sequence_value) union all select 'hostcomponentstate_id_seq', 0 union all - select 'servicecomponentdesiredstate_id_seq', 0; + select 'servicecomponentdesiredstate_id_seq', 0 + union all + select 'servicecomponent_history_id_seq', 0; INSERT INTO ambari.adminresourcetype (resource_type_id, resource_type_name) SELECT 1, 'AMBARI' http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/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 f4ce830..263004f 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql @@ -1,5 +1,5 @@ -- --- Licensed to the stackpache Software Foundation (ASF) under one +-- Licensed to the Apache Software Foundation (ASF) under one -- or more contributor license agreements. See the NOTICE file -- distributed with this work for additional information -- regarding copyright ownership. The ASF licenses this file @@ -167,12 +167,10 @@ CREATE TABLE servicecomponentdesiredstate ( desired_stack_id NUMERIC(19) NOT NULL, desired_state VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, - CONSTRAINT pk_servicecomponentdesiredstate PRIMARY KEY (id), - CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name,service_name,cluster_id) + CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id), + CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id) ); -CREATE INDEX idx_sc_desired_state ON servicecomponentdesiredstate(component_name, service_name, cluster_id); - CREATE TABLE servicedesiredstate ( cluster_id NUMERIC(19) NOT NULL, desired_host_role_mapping INTEGER NOT NULL, @@ -671,6 +669,7 @@ CREATE TABLE setting ( update_timestamp NUMERIC(19) NOT NULL, PRIMARY KEY (id) ); + -- tasks indices -- CREATE INDEX idx_stage_request_id ON stage (request_id); CREATE INDEX idx_hrc_request_id ON host_role_command (request_id); @@ -702,8 +701,8 @@ ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY ( ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id); ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id); ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); -ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); -ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); +ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); +ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); @@ -951,6 +950,19 @@ CREATE TABLE upgrade_item ( FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id) ); +CREATE TABLE servicecomponent_history( + id NUMERIC(19) NOT NULL, + component_id NUMERIC(19) NOT NULL, + upgrade_id NUMERIC(19) NOT NULL, + from_stack_id NUMERIC(19) NOT NULL, + to_stack_id NUMERIC(19) NOT NULL, + CONSTRAINT PK_sc_history PRIMARY KEY (id), + CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id), + CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id), + CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id), + CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id) +); + -- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0. INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('cluster_id_seq', 1); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('host_id_seq', 0); @@ -997,6 +1009,7 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('topology_ho INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('setting_id_seq', 0); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('hostcomponentstate_id_seq', 0); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('servicecomponentdesiredstate_id_seq', 0); +INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('servicecomponent_history_id_seq', 0); insert into adminresourcetype (resource_type_id, resource_type_name) select 1, 'AMBARI' @@ -1268,7 +1281,7 @@ insert into adminpermission(permission_id, permission_name, resource_type_id, pe SELECT permission_id, 'AMBARI.ASSIGN_ROLES' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR' UNION ALL SELECT permission_id, 'AMBARI.MANAGE_STACK_VERSIONS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR' UNION ALL SELECT permission_id, 'AMBARI.EDIT_STACK_REPOS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'; - + insert into adminprivilege (privilege_id, permission_id, resource_id, principal_id) select 1, 1, 1, 1; http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/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 47bde49..80feca5 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql @@ -188,12 +188,10 @@ CREATE TABLE servicecomponentdesiredstate ( desired_state VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, PRIMARY KEY CLUSTERED (id), - CONSTRAINT pk_servicecomponentdesiredstate PRIMARY KEY (id), - CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name,service_name,cluster_id) + CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id), + CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id) ); -CREATE NONCLUSTERED INDEX idx_sc_desired_state ON servicecomponentdesiredstate(component_name, service_name, cluster_id); - CREATE TABLE servicedesiredstate ( cluster_id BIGINT NOT NULL, desired_host_role_mapping INTEGER NOT NULL, @@ -329,7 +327,7 @@ CREATE TABLE requestoperationlevel ( host_id BIGINT NULL, -- unlike most host_id columns, this one allows NULLs because the request can be at the service level PRIMARY KEY CLUSTERED (operation_level_id) ); - + CREATE TABLE ClusterHostMapping ( cluster_id BIGINT NOT NULL, host_id BIGINT NOT NULL, @@ -814,8 +812,8 @@ ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY ( ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id); ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id); ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmponentdesiredstatehstid FOREIGN KEY (host_id) REFERENCES hosts (host_id); -ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); -ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name); +ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); +ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id); ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id); @@ -1065,6 +1063,19 @@ CREATE TABLE upgrade_item ( FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id) ); +CREATE TABLE servicecomponent_history( + id BIGINT NOT NULL, + component_id BIGINT NOT NULL, + upgrade_id BIGINT NOT NULL, + from_stack_id BIGINT NOT NULL, + to_stack_id BIGINT NOT NULL, + CONSTRAINT PK_sc_history PRIMARY KEY (id), + CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id), + CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id), + CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id), + CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id) +); + ---------inserting some data----------- BEGIN TRANSACTION INSERT INTO ambari_sequences (sequence_name, [sequence_value]) @@ -1113,7 +1124,8 @@ BEGIN TRANSACTION ('topology_host_group_id_seq', 0), ('setting_id_seq', 0), ('hostcomponentstate_id_seq', 0), - ('servicecomponentdesiredstate_id_seq', 0); + ('servicecomponentdesiredstate_id_seq', 0), + ('servicecomponent_history_id_seq', 0); insert into adminresourcetype (resource_type_id, resource_type_name) values @@ -1733,4 +1745,3 @@ BEGIN END') GO - http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/ambari-server/src/main/resources/META-INF/persistence.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/META-INF/persistence.xml b/ambari-server/src/main/resources/META-INF/persistence.xml index 7fd0391..513035f 100644 --- a/ambari-server/src/main/resources/META-INF/persistence.xml +++ b/ambari-server/src/main/resources/META-INF/persistence.xml @@ -63,6 +63,7 @@ <class>org.apache.ambari.server.orm.entities.ResourceTypeEntity</class> <class>org.apache.ambari.server.orm.entities.RoleSuccessCriteriaEntity</class> <class>org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity</class> + <class>org.apache.ambari.server.orm.entities.ServiceComponentHistoryEntity</class> <class>org.apache.ambari.server.orm.entities.ServiceConfigEntity</class> <class>org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity</class> <class>org.apache.ambari.server.orm.entities.StackEntity</class> http://git-wip-us.apache.org/repos/asf/ambari/blob/e4d1475e/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java index 4e8713b..55e7a61 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java @@ -18,10 +18,12 @@ package org.apache.ambari.server.state; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.apache.ambari.server.AmbariException; @@ -34,11 +36,16 @@ import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO; import org.apache.ambari.server.orm.dao.HostComponentStateDAO; import org.apache.ambari.server.orm.dao.HostDAO; import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO; +import org.apache.ambari.server.orm.dao.UpgradeDAO; import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity; import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntityPK; import org.apache.ambari.server.orm.entities.HostComponentStateEntity; import org.apache.ambari.server.orm.entities.HostEntity; import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity; +import org.apache.ambari.server.orm.entities.ServiceComponentHistoryEntity; +import org.apache.ambari.server.orm.entities.UpgradeEntity; +import org.apache.ambari.server.state.stack.upgrade.Direction; +import org.apache.ambari.server.state.stack.upgrade.UpgradeType; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -350,4 +357,137 @@ public class ServiceComponentTest { } } } + + @Test + public void testHistoryCreation() throws AmbariException { + ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO = injector.getInstance( + ServiceComponentDesiredStateDAO.class); + + String componentName = "NAMENODE"; + ServiceComponent component = serviceComponentFactory.createNew(service, componentName); + service.addServiceComponent(component); + component.persist(); + + ServiceComponent sc = service.getServiceComponent(componentName); + Assert.assertNotNull(sc); + + sc.setDesiredState(State.INSTALLED); + Assert.assertEquals(State.INSTALLED, sc.getDesiredState()); + + sc.setDesiredStackVersion(new StackId("HDP-2.2.0")); + StackId stackId = sc.getDesiredStackVersion(); + Assert.assertEquals(new StackId("HDP", "2.2.0"), stackId); + + Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackVersion().getStackId()); + + ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName( + cluster.getClusterId(), serviceName, componentName); + + Assert.assertNotNull(serviceComponentDesiredStateEntity); + + UpgradeEntity upgradeEntity = createUpgradeEntity("2.2.0.0", "2.2.0.1"); + ServiceComponentHistoryEntity history = new ServiceComponentHistoryEntity(); + history.setFromStack(serviceComponentDesiredStateEntity.getDesiredStack()); + history.setToStack(serviceComponentDesiredStateEntity.getDesiredStack()); + history.setUpgrade(upgradeEntity); + history.setServiceComponentDesiredState(serviceComponentDesiredStateEntity); + history = serviceComponentDesiredStateDAO.merge(history); + + serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName( + cluster.getClusterId(), serviceName, componentName); + + Assert.assertEquals(history, serviceComponentDesiredStateEntity.getHistory().iterator().next()); + } + + /** + * Tests the CASCADE nature of removing a service component also removes the + * history. + * + * @throws AmbariException + */ + @Test + public void testHistoryRemoval() throws AmbariException { + ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO = injector.getInstance( + ServiceComponentDesiredStateDAO.class); + + String componentName = "NAMENODE"; + ServiceComponent component = serviceComponentFactory.createNew(service, componentName); + service.addServiceComponent(component); + component.persist(); + + ServiceComponent sc = service.getServiceComponent(componentName); + Assert.assertNotNull(sc); + + sc.setDesiredState(State.INSTALLED); + Assert.assertEquals(State.INSTALLED, sc.getDesiredState()); + + sc.setDesiredStackVersion(new StackId("HDP-2.2.0")); + StackId stackId = sc.getDesiredStackVersion(); + Assert.assertEquals(new StackId("HDP", "2.2.0"), stackId); + + Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackVersion().getStackId()); + + ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName( + cluster.getClusterId(), serviceName, componentName); + + Assert.assertNotNull(serviceComponentDesiredStateEntity); + + UpgradeEntity upgradeEntity = createUpgradeEntity("2.2.0.0", "2.2.0.1"); + ServiceComponentHistoryEntity history = new ServiceComponentHistoryEntity(); + history.setFromStack(serviceComponentDesiredStateEntity.getDesiredStack()); + history.setToStack(serviceComponentDesiredStateEntity.getDesiredStack()); + history.setUpgrade(upgradeEntity); + history.setServiceComponentDesiredState(serviceComponentDesiredStateEntity); + history = serviceComponentDesiredStateDAO.merge(history); + + serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName( + cluster.getClusterId(), serviceName, componentName); + + Assert.assertEquals(history, serviceComponentDesiredStateEntity.getHistory().iterator().next()); + + // verify that we can retrieve the history directly + List<ServiceComponentHistoryEntity> componentHistoryList = serviceComponentDesiredStateDAO.findHistory( + sc.getClusterId(), sc.getServiceName(), sc.getName()); + + assertEquals(1, componentHistoryList.size()); + + // delete the SC + sc.delete(); + + // verify history is gone, too + serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName( + cluster.getClusterId(), serviceName, componentName); + + Assert.assertNull(serviceComponentDesiredStateEntity); + + // verify that we cannot retrieve the history directly + componentHistoryList = serviceComponentDesiredStateDAO.findHistory(sc.getClusterId(), + sc.getServiceName(), sc.getName()); + + assertEquals(0, componentHistoryList.size()); + } + + /** + * Creates an upgrade entity, asserting it was created correctly. + * + * @param fromVersion + * @param toVersion + * @return + */ + private UpgradeEntity createUpgradeEntity(String fromVersion, String toVersion) { + UpgradeDAO upgradeDao = injector.getInstance(UpgradeDAO.class); + UpgradeEntity upgradeEntity = new UpgradeEntity(); + upgradeEntity.setClusterId(cluster.getClusterId()); + upgradeEntity.setDirection(Direction.UPGRADE); + upgradeEntity.setFromVersion(fromVersion); + upgradeEntity.setToVersion(toVersion); + upgradeEntity.setUpgradePackage("upgrade_test"); + upgradeEntity.setUpgradeType(UpgradeType.ROLLING); + upgradeEntity.setRequestId(1L); + + upgradeDao.create(upgradeEntity); + List<UpgradeEntity> upgrades = upgradeDao.findUpgrades(cluster.getClusterId()); + assertEquals(1, upgrades.size()); + return upgradeEntity; + } }
