Forráskód Böngészése

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

Alejandro Fernandez 10 éve
szülő
commit
b87c52aeb9

+ 1 - 1
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
    * @return repository version service
    */
    */
   @Path("{stackVersionId}/repository_versions")
   @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>();
     final Map<Resource.Type, String> stackVersionProperties = new HashMap<Resource.Type, String>();
     stackVersionProperties.put(Resource.Type.Cluster, clusterName);
     stackVersionProperties.put(Resource.Type.Cluster, clusterName);
     stackVersionProperties.put(Resource.Type.ClusterStackVersion, stackVersionId);
     stackVersionProperties.put(Resource.Type.ClusterStackVersion, stackVersionId);

+ 1 - 1
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
    * @return repository version service
    */
    */
   @Path("{stackVersionId}/repository_versions")
   @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>();
     final Map<Resource.Type, String> stackVersionProperties = new HashMap<Resource.Type, String>();
     stackVersionProperties.put(Resource.Type.Host, hostName);
     stackVersionProperties.put(Resource.Type.Host, hostName);
     stackVersionProperties.put(Resource.Type.HostStackVersion, stackVersionId);
     stackVersionProperties.put(Resource.Type.HostStackVersion, stackVersionId);

+ 1 - 1
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
    * @return repository version service
    */
    */
   @Path("{stackName}/versions/{stackVersion}/repository_versions")
   @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>();
     final Map<Resource.Type, String> stackProperties = new HashMap<Resource.Type, String>();
     stackProperties.put(Resource.Type.Stack, stackName);
     stackProperties.put(Resource.Type.Stack, stackName);
     stackProperties.put(Resource.Type.StackVersion, stackVersion);
     stackProperties.put(Resource.Type.StackVersion, stackVersion);

+ 12 - 3
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());
       StackId newStackId = new StackId(request.getStackVersion());
       c.setDesiredStackVersion(newStackId);
       c.setDesiredStackVersion(newStackId);
       clusters.setCurrentStackVersion(request.getClusterName(), 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) {
     if (request.getHostNames() != null) {

+ 33 - 0
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 javax.persistence.TypedQuery;
 
 
+import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.orm.RequiresSession;
 import org.apache.ambari.server.orm.RequiresSession;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 
 
@@ -79,4 +80,36 @@ public class RepositoryVersionDAO extends CrudDAO<RepositoryVersionEntity, Long>
     query.setParameter("stack", stack);
     query.setParameter("stack", stack);
     return daoUtils.selectList(query);
     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;
+  }
+
 }
 }

+ 12 - 0
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java

@@ -80,6 +80,18 @@ public class RepositoryVersionEntity {
 
 
   // ----- 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() {
   public Long getId() {
     return id;
     return id;
   }
   }

+ 3 - 3
ambari-web/app/mappers/stack_mapper.js

@@ -70,7 +70,7 @@ App.stackMapper = App.QuickDataMapper.create({
     var modelOS = this.get('modelOS');
     var modelOS = this.get('modelOS');
     var modelRepo = this.get('modelRepo');
     var modelRepo = this.get('modelRepo');
     var resultStack = [];
     var resultStack = [];
-    var resulOS = [];
+    var resultOS = [];
     var resultRepo = [];
     var resultRepo = [];
 
 
     var stackVersions = json.items.filterProperty('Versions.active');
     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.id = operatingSystems.stack_name + "-" + operatingSystems.stack_version + "-" + operatingSystems.os_type;
         operatingSystems.stack_id = operatingSystems.stack_name + "-" + operatingSystems.stack_version;
         operatingSystems.stack_id = operatingSystems.stack_name + "-" + operatingSystems.stack_version;
         operatingSystems.repositories = repositoriesArray;
         operatingSystems.repositories = repositoriesArray;
-        resulOS.push(this.parseIt(operatingSystems, this.get('configOS')));
+        resultOS.push(this.parseIt(operatingSystems, this.get('configOS')));
         operatingSystemsArray.pushObject(operatingSystems);
         operatingSystemsArray.pushObject(operatingSystems);
         
         
       }, this);
       }, this);
@@ -108,7 +108,7 @@ App.stackMapper = App.QuickDataMapper.create({
 
 
     App.store.commit();
     App.store.commit();
     App.store.loadMany(modelRepo, resultRepo);
     App.store.loadMany(modelRepo, resultRepo);
-    App.store.loadMany(modelOS, resulOS);
+    App.store.loadMany(modelOS, resultOS);
     App.store.loadMany(modelStack, resultStack);
     App.store.loadMany(modelStack, resultStack);
   }
   }
 });
 });