You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2014/11/24 22:38:22 UTC

ambari git commit: AMBARI-8422. Upgrade Execute: create database mappings for Upgrades to Requests (ncole)

Repository: ambari
Updated Branches:
  refs/heads/trunk eff6a7b31 -> 41bc7902e


AMBARI-8422. Upgrade Execute: create database mappings for Upgrades to Requests (ncole)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/41bc7902
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/41bc7902
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/41bc7902

Branch: refs/heads/trunk
Commit: 41bc7902e5542ecde4c45322dbf00c815b50d573
Parents: eff6a7b
Author: Nate Cole <nc...@hortonworks.com>
Authored: Sat Nov 22 11:22:39 2014 -0500
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Mon Nov 24 16:03:58 2014 -0500

----------------------------------------------------------------------
 .../server/actionmanager/HostRoleStatus.java    | 40 +++++++---
 .../internal/UpgradeItemResourceProvider.java   | 79 ++++++++++++++++++--
 .../internal/UpgradeResourceProvider.java       | 16 ++--
 .../server/orm/entities/UpgradeEntity.java      | 19 ++++-
 .../server/orm/entities/UpgradeItemEntity.java  | 12 +++
 .../ambari/server/state/UpgradeState.java       |  4 +
 .../server/upgrade/UpgradeCatalog200.java       |  3 +
 .../main/resources/Ambari-DDL-MySQL-CREATE.sql  |  5 +-
 .../main/resources/Ambari-DDL-Oracle-CREATE.sql |  5 +-
 .../resources/Ambari-DDL-Postgres-CREATE.sql    | 11 ++-
 .../Ambari-DDL-Postgres-EMBEDDED-CREATE.sql     |  5 +-
 .../resources/Ambari-DDL-SQLServer-CREATE.sql   |  5 +-
 .../internal/UpgradeResourceProviderTest.java   | 12 +++
 .../ambari/server/orm/dao/UpgradeDAOTest.java   |  6 +-
 .../server/upgrade/UpgradeCatalog200Test.java   |  4 +-
 15 files changed, 189 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleStatus.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleStatus.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleStatus.java
index 447aead..0d5434c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleStatus.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleStatus.java
@@ -22,23 +22,39 @@ import java.util.Collections;
 import java.util.List;
 
 public enum HostRoleStatus {
-  PENDING(0), //Not queued for a host
-  QUEUED(1), //Queued for a host (or has already been sent to host, but host did not answer yet)
-  IN_PROGRESS(2), //Host reported it is working (we received an IN_PROGRESS command status from host)
-  COMPLETED(3), //Host reported success
-  FAILED(4), //Failed
-  TIMEDOUT(5), //Host did not respond in time
-  ABORTED(6); //Operation was abandoned
-  private final int status;
+  /**
+   * Not queued for a host.
+   */
+  PENDING,
+  /**
+   * Queued for a host, or has already been sent to host, but host did not answer yet.
+   */
+  QUEUED,
+  /**
+   * Host reported it is working, received an IN_PROGRESS command status from host.
+   */
+  IN_PROGRESS,
+  /**
+   * Host reported success
+   */
+  COMPLETED,
+  /**
+   * Failed
+   */
+  FAILED,
+  /**
+   * Host did not respond in time
+   */
+  TIMEDOUT,
+  /**
+   * Operation was abandoned
+   */
+  ABORTED;
 
   private static List<HostRoleStatus> COMPLETED_STATES = Arrays.asList(FAILED, TIMEDOUT, ABORTED, COMPLETED);
   private static List<HostRoleStatus> FAILED_STATES = Arrays.asList(FAILED, TIMEDOUT, ABORTED);
 
 
-  private HostRoleStatus(int status) {
-    this.status = status;
-  }
-
   /**
    * Indicates whether or not it is a valid failure state.
    *

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
index d7e8271..fb7789c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
@@ -21,10 +21,13 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.StaticallyInject;
+import org.apache.ambari.server.actionmanager.HostRoleCommand;
+import org.apache.ambari.server.actionmanager.HostRoleStatus;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
@@ -39,6 +42,7 @@ import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
 import org.apache.ambari.server.orm.dao.UpgradeDAO;
 import org.apache.ambari.server.orm.entities.UpgradeEntity;
 import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
+import org.apache.ambari.server.state.UpgradeState;
 
 import com.google.inject.Inject;
 import com.google.inject.Provider;
@@ -53,6 +57,7 @@ public class UpgradeItemResourceProvider extends AbstractControllerResourceProvi
   protected static final String UPGRADE_ITEM_ID = "UpgradeItem/id";
   protected static final String UPGRADE_ITEM_STATE = "UpgradeItem/state";
   protected static final String UPGRADE_ITEM_TEXT = "UpgradeItem/text";
+  protected static final String UPGRADE_ITEM_STAGE_ID= "UpgradeItem/stage_id";
 
   private static final Set<String> PK_PROPERTY_IDS = new HashSet<String>(
       Arrays.asList(UPGRADE_ID, UPGRADE_ITEM_ID));
@@ -119,7 +124,7 @@ public class UpgradeItemResourceProvider extends AbstractControllerResourceProvi
       Collection<UpgradeItemEntity> items = upgrade.getUpgradeItems();
       if (null != items) {
         for (UpgradeItemEntity entity : items) {
-          results.add(toResource(entity, upgradeId, requestPropertyIds));
+          results.add(toResource(upgrade, entity, requestPropertyIds));
         }
       }
     }
@@ -148,15 +153,77 @@ public class UpgradeItemResourceProvider extends AbstractControllerResourceProvi
     return PK_PROPERTY_IDS;
   }
 
-  private Resource toResource(UpgradeItemEntity entity, long upgradeId, Set<String> requestedIds) {
+  private Resource toResource(UpgradeEntity upgrade, UpgradeItemEntity item, Set<String> requestedIds) {
     ResourceImpl resource = new ResourceImpl(Resource.Type.UpgradeItem);
 
-    setResourceProperty(resource, UPGRADE_ID, Long.valueOf(upgradeId), requestedIds);
-    setResourceProperty(resource, UPGRADE_ITEM_ID, entity.getId(), requestedIds);
-    setResourceProperty(resource, UPGRADE_ITEM_STATE, entity.getState(), requestedIds);
-    setResourceProperty(resource, UPGRADE_ITEM_TEXT, entity.getText(), requestedIds);
+    setResourceProperty(resource, UPGRADE_ID, upgrade.getId(), requestedIds);
+    setResourceProperty(resource, UPGRADE_ITEM_ID, item.getId(), requestedIds);
+    if (isPropertyRequested(UPGRADE_ITEM_STATE, requestedIds)) {
+      UpgradeState state = calculateState(upgrade, item);
+      setResourceProperty(resource, UPGRADE_ITEM_STATE, state, requestedIds);
+    }
+    setResourceProperty(resource, UPGRADE_ITEM_TEXT, item.getText(), requestedIds);
 
     return resource;
   }
 
+  private UpgradeState calculateState(UpgradeEntity upgrade, UpgradeItemEntity item) {
+    long requestId = upgrade.getRequestId().longValue();
+    long stageId = item.getStageId().longValue();
+
+    List<HostRoleCommand> commands = getManagementController().getActionManager().getRequestTasks(requestId);
+
+    int pending = 0;
+    int complete = 0;
+    int in_progress = 0;
+    int failed = 0;
+
+    for (HostRoleCommand command : commands) {
+      if (stageId != command.getStageId()) {
+        continue;
+      }
+
+      HostRoleStatus status = command.getStatus();
+      if (status.isFailedState()) {
+        failed++;
+      } else {
+        switch (status) {
+          case COMPLETED:
+            complete++;
+            break;
+          case IN_PROGRESS:
+            in_progress++;
+            break;
+          case PENDING:
+            pending++;
+            break;
+          case QUEUED:
+            in_progress++;
+            break;
+          case FAILED:
+          case ABORTED:
+          case TIMEDOUT:
+            failed++;
+            break;
+          default:
+            break;
+        }
+      }
+    }
+
+    if (failed > 0) {
+      return UpgradeState.FAILED;
+    } else if (in_progress > 0) {
+      return UpgradeState.IN_PROGRESS;
+    } else if (pending > 0) {
+      return UpgradeState.PENDING;
+    } else if (complete > 0) {
+      return UpgradeState.COMPLETE;
+    }
+
+    return UpgradeState.NONE;
+  }
+
+
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index eb2ad76..d0a9e19 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@ -77,7 +77,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
 
   protected static final String UPGRADE_ID = "Upgrade/id";
   protected static final String UPGRADE_CLUSTER_NAME = "Upgrade/cluster_name";
-  protected static final String UPGRADE_VERSION = "Upgrade/version";
+  protected static final String UPGRADE_VERSION = "Upgrade/repository_version";
+  protected static final String UPGRADE_REQUEST_ID = "Upgrade/request_id";
 
   private static final Set<String> PK_PROPERTY_IDS = new HashSet<String>(
       Arrays.asList(UPGRADE_ID, UPGRADE_CLUSTER_NAME));
@@ -100,13 +101,12 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
   @Inject
   private static Provider<AmbariCustomCommandExecutionHelper> commandExecutionHelper;
 
-
-
   static {
     // properties
     PROPERTY_IDS.add(UPGRADE_ID);
     PROPERTY_IDS.add(UPGRADE_CLUSTER_NAME);
     PROPERTY_IDS.add(UPGRADE_VERSION);
+    PROPERTY_IDS.add(UPGRADE_REQUEST_ID);
 
     // keys
     KEY_PROPERTY_IDS.put(Resource.Type.Upgrade, UPGRADE_ID);
@@ -219,6 +219,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
 
     setResourceProperty(resource, UPGRADE_ID, entity.getId(), requestedIds);
     setResourceProperty(resource, UPGRADE_CLUSTER_NAME, clusterName, requestedIds);
+    setResourceProperty(resource, UPGRADE_REQUEST_ID, entity.getRequestId(), requestedIds);
 
     return resource;
   }
@@ -349,8 +350,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
     entity.setClusterId(Long.valueOf(cluster.getClusterId()));
     entity.setUpgradeItems(items);
 
-    m_upgradeDAO.create(entity);
-
     RequestStageContainer req = createRequest((String) requestMap.get(UPGRADE_VERSION));
 
     for (StageHolder holder : preUpgrades) {
@@ -367,8 +366,12 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
 
     req.getRequestStatusResponse();
 
+    entity.setRequestId(req.getId());
+
     req.persist();
 
+    m_upgradeDAO.create(entity);
+
     return entity;
   }
 
@@ -487,7 +490,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
     private Set<String> hosts;
   }
 
-
   private RequestStageContainer createRequest(String version) {
     ActionManager actionManager = getManagementController().getActionManager();
 
@@ -524,6 +526,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
       stageId = 1L;
     }
     stage.setStageId(stageId);
+    holder.upgradeItemEntity.setStageId(Long.valueOf(stageId));
 
     // add each host to this stage
     RequestResourceFilter filter = new RequestResourceFilter("", "",
@@ -583,6 +586,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
       stageId = 1L;
     }
     stage.setStageId(stageId);
+    holder.upgradeItemEntity.setStageId(Long.valueOf(stageId));
 
     // !!! TODO verify the action is valid
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
index 8695f84..41346d0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
@@ -17,7 +17,6 @@
  */
 package org.apache.ambari.server.orm.entities;
 
-import java.util.Collection;
 import java.util.List;
 
 import javax.persistence.CascadeType;
@@ -25,6 +24,7 @@ import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
@@ -64,6 +64,9 @@ public class UpgradeEntity {
   @Column(name = "state", nullable = false)
   private UpgradeState state = UpgradeState.NONE;
 
+  @Column(name="request_id", nullable = false)
+  private Long requestId;
+
   @OneToMany(mappedBy = "upgradeEntity", cascade = { CascadeType.ALL })
   private List<UpgradeItemEntity> upgradeItemEntities;
 
@@ -128,4 +131,18 @@ public class UpgradeEntity {
     upgradeItemEntities = items;
   }
 
+  /**
+   * @return the request id
+   */
+  public Long getRequestId() {
+    return requestId;
+  }
+
+  /**
+   * @param id the request id
+   */
+  public void setRequestId(Long id) {
+    requestId = id;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeItemEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeItemEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeItemEntity.java
index 0453e72..2ae6944 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeItemEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeItemEntity.java
@@ -67,6 +67,10 @@ public class UpgradeItemEntity {
   @Column(name = "item_text", length = 1024)
   private String itemText = null;
 
+  @Basic
+  @Column(name = "stage_id", nullable = false)
+  private Long stageId = Long.valueOf(0L);
+
   @ManyToOne
   @JoinColumn(name = "upgrade_id", referencedColumnName = "upgrade_id", nullable = false)
   private UpgradeEntity upgradeEntity;
@@ -153,5 +157,13 @@ public class UpgradeItemEntity {
     upgradeEntity = entity;
   }
 
+  public Long getStageId() {
+    return stageId;
+  }
+
+  public void setStageId(Long id) {
+    stageId = id;
+  }
+
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeState.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeState.java
index 3d69541..ced1dd3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeState.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeState.java
@@ -26,6 +26,10 @@ public enum UpgradeState {
    */
   NONE,
   /**
+   * Upgrade is complete
+   */
+  COMPLETE,
+  /**
    * Upgrade is pending
    */
   PENDING,

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
index 4735980..a6157fb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
@@ -180,14 +180,17 @@ public class UpgradeCatalog200 extends AbstractUpgradeCatalog {
     columns = new ArrayList<DBColumnInfo>();
     columns.add(new DBAccessor.DBColumnInfo("upgrade_id", Long.class, null, null, false));
     columns.add(new DBAccessor.DBColumnInfo("cluster_id", Long.class, null, null, false));
+    columns.add(new DBAccessor.DBColumnInfo("request_id", Long.class, null, null, false));
     columns.add(new DBAccessor.DBColumnInfo("state", String.class, 255, UpgradeState.NONE.name(), false));
     dbAccessor.createTable("upgrade", columns, "upgrade_id");
     dbAccessor.addFKConstraint("upgrade", "fk_upgrade_cluster_id", "cluster_id", "clusters", "cluster_id", false);
+    dbAccessor.addFKConstraint("upgrade", "fk_upgrade_request_id", "request_id", "request", "request_id", false);
     dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('upgrade_id_seq', 0)", false);
 
     columns = new ArrayList<DBColumnInfo>();
     columns.add(new DBAccessor.DBColumnInfo("upgrade_item_id", Long.class, null, null, false));
     columns.add(new DBAccessor.DBColumnInfo("upgrade_id", Long.class, null, null, false));
+    columns.add(new DBAccessor.DBColumnInfo("stage_id", Long.class, null, null, false));
     columns.add(new DBAccessor.DBColumnInfo("state", String.class, 255, UpgradeState.NONE.name(), false));
     columns.add(new DBAccessor.DBColumnInfo("hosts", char[].class, 32672, null, true));
     columns.add(new DBAccessor.DBColumnInfo("tasks", char[].class, 32672, null, true));

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/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 f0623f8..110abe0 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -700,14 +700,17 @@ CREATE INDEX idx_alert_notice_state on alert_notice(notify_state);
 CREATE TABLE upgrade (
   upgrade_id BIGINT NOT NULL,
   cluster_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
   state VARCHAR(255) DEFAULT 'NONE' NOT NULL,
   PRIMARY KEY (upgrade_id),
-  FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id)
+  FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
+  FOREIGN KEY (request_id) REFERENCES request(request_id)
 );
 
 CREATE TABLE upgrade_item (
   upgrade_item_id BIGINT NOT NULL,
   upgrade_id BIGINT NOT NULL,
+  stage_id BIGINT NOT NULL,
   state VARCHAR(255) DEFAULT 'NONE' NOT NULL,
   hosts TEXT,
   tasks TEXT,

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/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 fd7343b..9e4cad3 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -690,14 +690,17 @@ CREATE INDEX idx_alert_notice_state on alert_notice(notify_state);
 CREATE TABLE upgrade (
   upgrade_id BIGINT NOT NULL,
   cluster_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
   state VARCHAR2(255) DEFAULT 'NONE' NOT NULL,
   PRIMARY KEY (upgrade_id),
-  FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id)
+  FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
+  FOREIGN KEY (request_id) REFERENCES request(request_id)
 );
 
 CREATE TABLE upgrade_item (
   upgrade_item_id BIGINT NOT NULL,
   upgrade_id BIGINT NOT NULL,
+  stage_id BIGINT NOT NULL,
   state VARCHAR2(255) DEFAULT 'NONE' NOT NULL,
   hosts CLOB,
   tasks CLOB,

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/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 f4d9c86..92e9170 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -684,23 +684,26 @@ CREATE INDEX idx_alert_group_name on alert_group(group_name);
 CREATE INDEX idx_alert_notice_state on alert_notice(notify_state);
 
 -- upgrade tables
-CREATE TABLE ambari.upgrade (
+CREATE TABLE upgrade (
   upgrade_id BIGINT NOT NULL,
   cluster_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
   state VARCHAR(255) DEFAULT 'NONE' NOT NULL,
   PRIMARY KEY (upgrade_id),
-  FOREIGN KEY (cluster_id) REFERENCES ambari.clusters(cluster_id)
+  FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
+  FOREIGN KEY (request_id) REFERENCES request(request_id)
 );
 
-CREATE TABLE ambari.upgrade_item (
+CREATE TABLE upgrade_item (
   upgrade_item_id BIGINT NOT NULL,
   upgrade_id BIGINT NOT NULL,
+  stage_id BIGINT NOT NULL,
   state VARCHAR(255) DEFAULT 'NONE' NOT NULL,
   hosts TEXT,
   tasks TEXT,
   item_text VARCHAR(1024),
   PRIMARY KEY (upgrade_item_id),
-  FOREIGN KEY (upgrade_id) REFERENCES ambari.upgrade(upgrade_id)
+  FOREIGN KEY (upgrade_id) REFERENCES upgrade(upgrade_id)
 );
 
 ---------inserting some data-----------

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/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 f80bb32..a35d33e 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
@@ -770,14 +770,17 @@ CREATE INDEX idx_alert_notice_state on ambari.alert_notice(notify_state);
 CREATE TABLE ambari.upgrade (
   upgrade_id BIGINT NOT NULL,
   cluster_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
   state VARCHAR(255) DEFAULT 'NONE' NOT NULL,
   PRIMARY KEY (upgrade_id),
-  FOREIGN KEY (cluster_id) REFERENCES ambari.clusters(cluster_id)
+  FOREIGN KEY (cluster_id) REFERENCES ambari.clusters(cluster_id),
+  FOREIGN KEY (request_id) REFERENCES ambari.request(request_id)
 );
 
 CREATE TABLE ambari.upgrade_item (
   upgrade_item_id BIGINT NOT NULL,
   upgrade_id BIGINT NOT NULL,
+  stage_id BIGINT NOT NULL,
   state VARCHAR(255) DEFAULT 'NONE' NOT NULL,
   hosts TEXT,
   tasks TEXT,

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/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 ca4738c..69dc552 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -267,14 +267,17 @@ CREATE INDEX idx_alert_notice_state on alert_notice(notify_state);
 CREATE TABLE upgrade (
   upgrade_id BIGINT NOT NULL,
   cluster_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
   state VARCHAR(255) DEFAULT 'NONE' NOT NULL,
   PRIMARY KEY (upgrade_id),
-  FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id)
+  FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
+  FOREIGN KEY (request_id) REFERENCES request(request_id)
 );
 
 CREATE TABLE upgrade_item (
   upgrade_item_id BIGINT NOT NULL,
   upgrade_id BIGINT NOT NULL,
+  stage_id BIGINT NOT NULL,
   state VARCHAR(255) DEFAULT 'NONE' NOT NULL,
   hosts TEXT,
   tasks TEXT,

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index 87a0a48..046a69b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -38,6 +38,7 @@ import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
 import org.apache.ambari.server.orm.dao.UpgradeDAO;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.orm.entities.UpgradeEntity;
+import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Host;
@@ -45,6 +46,7 @@ import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponent;
 import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.UpgradeState;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -153,8 +155,18 @@ public class UpgradeResourceProviderTest {
     List<Long> requests = am.getRequestsByStatus(RequestStatus.IN_PROGRESS, 100, true);
 
     assertEquals(1, requests.size());
+    assertEquals(requests.get(0), entity.getRequestId());
+
+
     List<Stage> stages = am.getRequestStatus(requests.get(0).longValue());
     assertEquals(3, stages.size());
+    for (int i = 0; i < stages.size(); i++) {
+      Stage stage = stages.get(i);
+      UpgradeItemEntity upgradeItem = entity.getUpgradeItems().get(i);
+      assertEquals(stage.getStageId(), upgradeItem.getStageId().longValue());
+      assertEquals(UpgradeState.NONE, upgradeItem.getState());
+    }
+
 
     List<HostRoleCommand> tasks = am.getRequestTasks(requests.get(0).longValue());
     assertEquals(3, tasks.size());

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
index c61a473..4848428 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
@@ -69,19 +69,21 @@ public class UpgradeDAOTest {
     // create upgrade entities
     UpgradeEntity entity = new UpgradeEntity();
     entity.setClusterId(Long.valueOf(1));
+    entity.setRequestId(Long.valueOf(1));
 
     // create 2 items
     List<UpgradeItemEntity> items = new ArrayList<UpgradeItemEntity>();
     UpgradeItemEntity item = new UpgradeItemEntity();
     item.setState(UpgradeState.IN_PROGRESS);
-    item.setUpgradeEntity(entity);
+    item.setStageId(Long.valueOf(1L));
     items.add(item);
 
     item = new UpgradeItemEntity();
     item.setState(UpgradeState.PENDING);
-    item.setUpgradeEntity(entity);
+    item.setStageId(Long.valueOf(1L));
     items.add(item);
 
+
     entity.setUpgradeItems(items);
     dao.create(entity);
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/41bc7902/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
index 6ff92c3..5f0b03a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
@@ -184,8 +184,8 @@ public class UpgradeCatalog200Test {
     assertViewInstancePropertyColumns(valueColumnCapture);
     assertViewInstanceDataColumns(dataValueColumnCapture);
 
-    assertEquals(3, upgradeCapture.getValue().size());
-    assertEquals(6, upgradeItemCapture.getValue().size());
+    assertEquals(4, upgradeCapture.getValue().size());
+    assertEquals(7, upgradeItemCapture.getValue().size());
   }
 
   @Test