You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2016/02/16 21:54:50 UTC
ambari git commit: AMBARI-15058 - Schema changes for component
history (jonathanhurley)
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 <jh...@hortonworks.com>
Authored: Tue Feb 16 13:40:47 2016 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
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;
+ }
}