You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2014/12/03 23:02:28 UTC

ambari git commit: AMBARI-8532. Rolling Upgrade Bootstrap - Populate repo_version table during cluster creation (alejandro)

Repository: ambari
Updated Branches:
  refs/heads/trunk 2160d544a -> b87c52aeb


AMBARI-8532. Rolling Upgrade Bootstrap - Populate repo_version table during cluster creation (alejandro)


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

Branch: refs/heads/trunk
Commit: b87c52aeb9ae3791eb53dfe009d7184a7f76e945
Parents: 2160d54
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Tue Dec 2 19:13:49 2014 -0800
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Wed Dec 3 14:02:20 2014 -0800

----------------------------------------------------------------------
 .../services/ClusterStackVersionService.java    |  2 +-
 .../api/services/HostStackVersionService.java   |  2 +-
 .../server/api/services/StacksService.java      |  2 +-
 .../AmbariManagementControllerImpl.java         | 15 +++++++--
 .../server/orm/dao/RepositoryVersionDAO.java    | 33 ++++++++++++++++++++
 .../orm/entities/RepositoryVersionEntity.java   | 12 +++++++
 ambari-web/app/mappers/stack_mapper.js          |  6 ++--
 7 files changed, 63 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b87c52ae/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterStackVersionService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterStackVersionService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterStackVersionService.java
index f9ae235..97d3bde 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterStackVersionService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterStackVersionService.java
@@ -91,7 +91,7 @@ public class ClusterStackVersionService extends BaseService {
    * @return repository version service
    */
   @Path("{stackVersionId}/repository_versions")
-  public RepositoryVersionService getRepositoryVersionHanlder(@PathParam("stackVersionId") String stackVersionId) {
+  public RepositoryVersionService getRepositoryVersionHandler(@PathParam("stackVersionId") String stackVersionId) {
     final Map<Resource.Type, String> stackVersionProperties = new HashMap<Resource.Type, String>();
     stackVersionProperties.put(Resource.Type.Cluster, clusterName);
     stackVersionProperties.put(Resource.Type.ClusterStackVersion, stackVersionId);

http://git-wip-us.apache.org/repos/asf/ambari/blob/b87c52ae/ambari-server/src/main/java/org/apache/ambari/server/api/services/HostStackVersionService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/HostStackVersionService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/HostStackVersionService.java
index d0f872d..f449052 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/HostStackVersionService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/HostStackVersionService.java
@@ -112,7 +112,7 @@ public class HostStackVersionService extends BaseService {
    * @return repository version service
    */
   @Path("{stackVersionId}/repository_versions")
-  public RepositoryVersionService getRepositoryVersionHanlder(@PathParam("stackVersionId") String stackVersionId) {
+  public RepositoryVersionService getRepositoryVersionHandler(@PathParam("stackVersionId") String stackVersionId) {
     final Map<Resource.Type, String> stackVersionProperties = new HashMap<Resource.Type, String>();
     stackVersionProperties.put(Resource.Type.Host, hostName);
     stackVersionProperties.put(Resource.Type.HostStackVersion, stackVersionId);

http://git-wip-us.apache.org/repos/asf/ambari/blob/b87c52ae/ambari-server/src/main/java/org/apache/ambari/server/api/services/StacksService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/StacksService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/StacksService.java
index c34ee3d..4d0fb31 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/StacksService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/StacksService.java
@@ -243,7 +243,7 @@ public class StacksService extends BaseService {
    * @return repository version service
    */
   @Path("{stackName}/versions/{stackVersion}/repository_versions")
-  public RepositoryVersionService getRepositoryVersionHanlder(@PathParam("stackName") String stackName, @PathParam("stackVersion") String stackVersion) {
+  public RepositoryVersionService getRepositoryVersionHandler(@PathParam("stackName") String stackName, @PathParam("stackVersion") String stackVersion) {
     final Map<Resource.Type, String> stackProperties = new HashMap<Resource.Type, String>();
     stackProperties.put(Resource.Type.Stack, stackName);
     stackProperties.put(Resource.Type.StackVersion, stackVersion);

http://git-wip-us.apache.org/repos/asf/ambari/blob/b87c52ae/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index 7c533d0..abd83fc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -356,9 +356,18 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
       StackId newStackId = new StackId(request.getStackVersion());
       c.setDesiredStackVersion(newStackId);
       clusters.setCurrentStackVersion(request.getClusterName(), newStackId);
-      // TODO Alejandro, this needs to use the repo version, e.g., 2.2.0.0.-994
-      // For the sake of having the end-to-end workflow work, use as is.
-      c.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), getAuthName(), RepositoryVersionState.CURRENT);
+      
+      try {
+        // Because Ambari may eventually support multiple clusters, it may be possible that a previously installed cluster
+        // already inserted the Repository Version for this stack and version.
+        RepositoryVersionEntity existingRepositoryVersion = repositoryVersionDAO.findByStackAndVersion(newStackId.getStackId(),  newStackId.getStackVersion());
+        if (existingRepositoryVersion == null) {
+          repositoryVersionDAO.create(newStackId.getStackId(), newStackId.getStackVersion(), newStackId.getStackId(), "", "");
+        }
+        c.createClusterVersion(stackId.getStackId(), stackId.getStackVersion(), getAuthName(), RepositoryVersionState.CURRENT);
+      } catch (Exception e) {
+        throw new AmbariException("Unable to create Repository Version and/or Cluster Version for Stack " + stackId.toString() + ". Error: " + e.getMessage());
+      }
     }
 
     if (request.getHostNames() != null) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/b87c52ae/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
index 7ac0df9..7099c5c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
@@ -21,6 +21,7 @@ import java.util.List;
 
 import javax.persistence.TypedQuery;
 
+import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.orm.RequiresSession;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 
@@ -79,4 +80,36 @@ public class RepositoryVersionDAO extends CrudDAO<RepositoryVersionEntity, Long>
     query.setParameter("stack", stack);
     return daoUtils.selectList(query);
   }
+
+  /**
+   * Validates and creates an object.
+   * @param stack Stack name, e.g., HDP or HDP-2.2
+   * @param version Stack version, e.g., 2.2 or 2.2.0.1-885
+   * @param displayName Unique display name
+   * @param upgradePack Optional upgrade pack, e.g, upgrade-2.2
+   * @param operatingSystems JSON structure of repository URLs for each OS
+   * @return Returns the object created if successful, and throws an exception otherwise.
+   * @throws AmbariException
+   */
+  public RepositoryVersionEntity create(String stack, String version, String displayName, String upgradePack, String operatingSystems) throws AmbariException {
+    if (stack == null || stack.isEmpty() || version == null || version.isEmpty() || displayName == null || displayName.isEmpty()) {
+      throw new AmbariException("At least one of the required properties is null or empty");
+    }
+
+    RepositoryVersionEntity existingByDisplayName = this.findByDisplayName(displayName);
+
+    if (existingByDisplayName != null) {
+      throw new AmbariException("Repository version with display name '" + displayName + "' already exists");
+    }
+
+    RepositoryVersionEntity existingByStackAndVersion = this.findByStackAndVersion(stack, version);
+    if (existingByStackAndVersion != null) {
+      throw new AmbariException("Repository version for stack " + stack + " and version " + version + " already exists");
+    }
+
+    RepositoryVersionEntity newEntity = new RepositoryVersionEntity(stack, version, displayName, upgradePack, operatingSystems);
+    this.create(newEntity);
+    return newEntity;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/b87c52ae/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
index df0a04f..4b5486a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
@@ -80,6 +80,18 @@ public class RepositoryVersionEntity {
 
   // ----- RepositoryVersionEntity -------------------------------------------------------
 
+  public RepositoryVersionEntity() {
+
+  }
+
+  public RepositoryVersionEntity(String stack, String version, String displayName, String upgradePackage, String operatingSystems) {
+    this.stack = stack;
+    this.version = version;
+    this.displayName = displayName;
+    this.upgradePackage = upgradePackage;
+    this.operatingSystems = operatingSystems;
+  }
+
   public Long getId() {
     return id;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/b87c52ae/ambari-web/app/mappers/stack_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/stack_mapper.js b/ambari-web/app/mappers/stack_mapper.js
index 4bfea03..d641a55 100644
--- a/ambari-web/app/mappers/stack_mapper.js
+++ b/ambari-web/app/mappers/stack_mapper.js
@@ -70,7 +70,7 @@ App.stackMapper = App.QuickDataMapper.create({
     var modelOS = this.get('modelOS');
     var modelRepo = this.get('modelRepo');
     var resultStack = [];
-    var resulOS = [];
+    var resultOS = [];
     var resultRepo = [];
 
     var stackVersions = json.items.filterProperty('Versions.active');
@@ -95,7 +95,7 @@ App.stackMapper = App.QuickDataMapper.create({
         operatingSystems.id = operatingSystems.stack_name + "-" + operatingSystems.stack_version + "-" + operatingSystems.os_type;
         operatingSystems.stack_id = operatingSystems.stack_name + "-" + operatingSystems.stack_version;
         operatingSystems.repositories = repositoriesArray;
-        resulOS.push(this.parseIt(operatingSystems, this.get('configOS')));
+        resultOS.push(this.parseIt(operatingSystems, this.get('configOS')));
         operatingSystemsArray.pushObject(operatingSystems);
         
       }, this);
@@ -108,7 +108,7 @@ App.stackMapper = App.QuickDataMapper.create({
 
     App.store.commit();
     App.store.loadMany(modelRepo, resultRepo);
-    App.store.loadMany(modelOS, resulOS);
+    App.store.loadMany(modelOS, resultOS);
     App.store.loadMany(modelStack, resultStack);
   }
 });
\ No newline at end of file