This is an automated email from the ASF dual-hosted git repository. jluniya pushed a commit to branch branch-feature-AMBARI-14714 in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/branch-feature-AMBARI-14714 by this push: new 1ae465f AMBARI-22979: Update software registry API to support new mpack schema (jluniya) (#433) 1ae465f is described below commit 1ae465f1af19b52c87f6141b42cd9377ef825471 Author: jayush <jay...@gmail.com> AuthorDate: Thu Feb 22 10:49:13 2018 -0800 AMBARI-22979: Update software registry API to support new mpack schema (jluniya) (#433) --- .../api/resources/MpackResourceDefinition.java | 2 +- .../ambari/server/api/services/MpacksService.java | 24 ++--- .../api/services/RootClusterSettingService.java | 2 +- .../ambari/server/controller/MpackRequest.java | 24 ++--- .../ambari/server/controller/MpackResponse.java | 73 +++++++------- .../server/controller/RegistryMpackResponse.java | 37 ++++---- .../controller/RegistryMpackVersionResponse.java | 88 ++++++++--------- .../ambari/server/controller/RegistryResponse.java | 1 - .../controller/internal/MpackResourceProvider.java | 50 +++++----- .../internal/RegistryMpackResourceProvider.java | 22 ++--- .../RegistryMpackVersionResourceProvider.java | 74 +++++++-------- .../apache/ambari/server/mpack/MpackGenerator.java | 1 - .../apache/ambari/server/mpack/MpackManager.java | 53 +++++------ .../org/apache/ambari/server/orm/dao/MpackDAO.java | 14 +-- .../ambari/server/orm/entities/MpackEntity.java | 20 ++-- .../ambari/server/registry/RegistryAdvisor.java | 57 +++++++---- .../ambari/server/registry/RegistryMpack.java | 13 +-- ...patiblity.java => RegistryMpackDependency.java} | 18 +++- .../server/registry/RegistryMpackService.java | 41 -------- .../server/registry/RegistryMpackVersion.java | 33 ++----- .../server/registry/json/JsonRegistryMpack.java | 24 ++--- ...ility.java => JsonRegistryMpackDependency.java} | 14 ++- .../registry/json/JsonRegistryMpackService.java | 42 --------- .../registry/json/JsonRegistryMpackVersion.java | 72 +++++++------- .../java/org/apache/ambari/server/state/Mpack.java | 105 ++++++--------------- .../apache/ambari/server/utils/MpackVersion.java | 83 ++++++++++++---- .../apache/ambari/server/utils/VersionUtils.java | 13 ++- .../AmbariManagementControllerImplTest.java | 2 +- .../ambari/server/controller/MpackRequestTest.java | 2 +- .../server/controller/MpackResponseTest.java | 4 +- .../server/controller/RegistryRequestTest.java | 4 +- .../internal/MpackResourceProviderTest.java | 20 ++-- .../apache/ambari/server/orm/dao/MpackDAOTest.java | 4 +- .../server/orm/entities/MpackEntityTest.java | 6 +- .../org/apache/ambari/server/state/MpackTest.java | 4 +- .../ambari/server/utils/TestVersionUtils.java | 32 ++++++- 36 files changed, 540 insertions(+), 538 deletions(-) diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/MpackResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/MpackResourceDefinition.java index fdf8217..4fbe5be 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/MpackResourceDefinition.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/MpackResourceDefinition.java @@ -85,7 +85,7 @@ public class MpackResourceDefinition extends BaseResourceDefinition { Map<String, Object> mpackInfo = mapInfo.get("MpackInfo"); int idx = href.indexOf("stacks/"); - Long mpackId = (Long)mpackInfo.get("mpack_id"); + Long mpackId = (Long)mpackInfo.get("id"); href = href.substring(0, idx) + "mpacks/" + mpackId; resultNode.setProperty("href", href); } else { diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/MpacksService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/MpacksService.java index cf71af3..ba76fe1 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/MpacksService.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/MpacksService.java @@ -73,7 +73,7 @@ public class MpacksService extends BaseService { response = MpackResponseWrapper.class, responseContainer = RESPONSE_CONTAINER_LIST) @ApiImplicitParams({ @ApiImplicitParam(name = QUERY_FIELDS, value = QUERY_FILTER_DESCRIPTION, dataType = DATA_TYPE_STRING, - paramType = PARAM_TYPE_QUERY, defaultValue = MpackResourceProvider.MPACK_ID), + paramType = PARAM_TYPE_QUERY, defaultValue = MpackResourceProvider.MPACK_RESOURCE_ID), @ApiImplicitParam(name = QUERY_SORT, value = QUERY_SORT_DESCRIPTION, dataType = DATA_TYPE_STRING, paramType = PARAM_TYPE_QUERY), @ApiImplicitParam(name = QUERY_PAGE_SIZE, value = QUERY_PAGE_SIZE_DESCRIPTION, defaultValue = DEFAULT_PAGE_SIZE, @@ -123,13 +123,13 @@ public class MpacksService extends BaseService { } /*** - * Handles: GET /mpacks/{mpack_id} - * Return a specific mpack given an mpack_id + * Handles: GET /mpacks/{id} + * Return a specific mpack given an id * * @param */ @GET - @Path("{mpack_id}") + @Path("{id}") @Produces(MediaType.TEXT_PLAIN) @ApiOperation(value = "Returns information about a specific mpack that is registered with this Ambari instance", response = MpackResponseWrapper.class) @@ -145,14 +145,14 @@ public class MpacksService extends BaseService { @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR), }) public Response getMpack(String body, @Context HttpHeaders headers, @Context UriInfo ui, - @PathParam("mpack_id") String mpackId) { + @PathParam("id") String id) { return handleRequest(headers, body, ui, Request.Type.GET, - createMpackResource(mpackId)); + createMpackResource(id)); } @DELETE - @Path("{mpack_id}") + @Path("{id}") @Produces(MediaType.TEXT_PLAIN) @ApiOperation(value = "Deletes a selected management pack") @ApiImplicitParams({ @@ -166,19 +166,19 @@ public class MpacksService extends BaseService { @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED), @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR), }) - public Response deleteMpack(String body, @Context HttpHeaders headers, @Context UriInfo ui, @PathParam("mpack_id") String mpackId) { + public Response deleteMpack(String body, @Context HttpHeaders headers, @Context UriInfo ui, @PathParam("id") String id) { return handleRequest(headers, body, ui, Request.Type.DELETE, - createMpackResource(mpackId)); + createMpackResource(id)); } /** * Create an mpack resource instance - * @param mpackId + * @param id * @return ResourceInstance */ - private ResourceInstance createMpackResource(String mpackId) { + private ResourceInstance createMpackResource(String id) { return createResource(Resource.Type.Mpack, - Collections.singletonMap(Resource.Type.Mpack, mpackId)); + Collections.singletonMap(Resource.Type.Mpack, id)); } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/RootClusterSettingService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/RootClusterSettingService.java index bd2fb91..d8a3785 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/RootClusterSettingService.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/RootClusterSettingService.java @@ -70,7 +70,7 @@ public class RootClusterSettingService extends BaseService { response = ReadOnlyConfigurationResponse.ReadOnlyConfigurationResponseSwagger.class, responseContainer = RESPONSE_CONTAINER_LIST) @ApiImplicitParams({ @ApiImplicitParam(name = QUERY_FIELDS, value = QUERY_FILTER_DESCRIPTION, dataType = DATA_TYPE_STRING, - paramType = PARAM_TYPE_QUERY, defaultValue = MpackResourceProvider.MPACK_ID), + paramType = PARAM_TYPE_QUERY, defaultValue = MpackResourceProvider.MPACK_RESOURCE_ID), @ApiImplicitParam(name = QUERY_SORT, value = QUERY_SORT_DESCRIPTION, dataType = DATA_TYPE_STRING, paramType = PARAM_TYPE_QUERY), @ApiImplicitParam(name = QUERY_PAGE_SIZE, value = QUERY_PAGE_SIZE_DESCRIPTION, defaultValue = DEFAULT_PAGE_SIZE, diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/MpackRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/MpackRequest.java index a705d18..49d0caa 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/MpackRequest.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/MpackRequest.java @@ -26,25 +26,25 @@ import org.apache.ambari.server.orm.entities.MpackEntity; */ public class MpackRequest { - private Long mpackId; + private Long id; + private Long registryId; private String mpackName; private String mpackVersion; private String mpackUri; - private Long registryId; - public MpackRequest(Long mpackId) { - this.setMpackId(mpackId); + public MpackRequest(Long id) { + this.setId(id); } public MpackRequest() { } - public Long getMpackId() { - return mpackId; + public Long getId() { + return id; } - public void setMpackId(Long mpackId) { - this.mpackId = mpackId; + public void setId(Long id) { + this.id = id; } public String getMpackName() { @@ -82,7 +82,7 @@ public class MpackRequest { @Override public int hashCode() { int result = 1; - result = 31 + getMpackId().hashCode(); + result = 31 + getId().hashCode(); return result; } @@ -96,11 +96,11 @@ public class MpackRequest { } MpackRequest mpackRequest = (MpackRequest) obj; - if (mpackId == null) { - if (mpackRequest.mpackId != null) { + if (id == null) { + if (mpackRequest.id != null) { return false; } - } else if (!mpackId.equals(mpackRequest.mpackId)) { + } else if (!id.equals(mpackRequest.id)) { return false; } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/MpackResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/MpackResponse.java index ce70f8a..0755c16 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/MpackResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/MpackResponse.java @@ -27,86 +27,93 @@ import io.swagger.annotations.ApiModelProperty; */ public class MpackResponse { - private Long mpackId; - private String mpackVersion; + private Long id; + private String mpackId; private String mpackName; + private String mpackVersion; private String mpackUri; private Long registryId; private String stackId; private String description; public MpackResponse(Mpack mpack) { + this.id = mpack.getResourceId(); this.mpackId = mpack.getMpackId(); + this.mpackName = mpack.getName(); this.mpackVersion = mpack.getVersion(); this.mpackUri = mpack.getMpackUri(); - this.mpackName = mpack.getName(); this.registryId = mpack.getRegistryId(); - this.stackId = mpack.getStackId(); this.description = mpack.getDescription(); } - public String getMpackVersion() { - return mpackVersion; + public Long getId() { + return id; } - public String getMpackUri() { - return mpackUri; + public void setId(Long id) { + this.id = id; } - public Long getMpackId() { - return mpackId; + public Long getRegistryId() { + return registryId; } - public String getStackId() { - return stackId; + public void setRegistryId(Long registryId) { + this.registryId = registryId; } - public void setStackId(String stackId) { - this.stackId = stackId; + public String getMpackId() { + return mpackId; + } + + public void setMpackId(String mpackId) { + this.mpackId = mpackId; } public String getMpackName() { return mpackName; } - public Long getRegistryId() { - return registryId; + public void setMpackName(String mpackName) { + this.mpackName = mpackName; } - public void setMpackVersion(String mpackVersion) { - this.mpackVersion = mpackVersion; + public String getDescription() { + return description; } - public void setMpackName(String mpackName) { - this.mpackName = mpackName; + public void setDescription(String description) { + this.description = description; } - public void setMpackUri(String mpackUri) { - this.mpackUri = mpackUri; + public String getMpackVersion() { + return mpackVersion; } - public void setRegistryId(Long registryId) { - this.registryId = registryId; + public void setMpackVersion(String mpackVersion) { + this.mpackVersion = mpackVersion; } - public void setMpackId(Long mpackId) { - this.mpackId = mpackId; + public String getMpackUri() { + return mpackUri; } - - public String getDescription() { - return description; + public void setMpackUri(String mpackUri) { + this.mpackUri = mpackUri; } - public void setDescription(String description) { - this.description = description; + public String getStackId() { + return stackId; } + public void setStackId(String stackId) { + this.stackId = stackId; + } @Override public int hashCode() { int result = 1; - result = 31 + getMpackId().hashCode(); + result = 31 + getId().hashCode(); return result; } @@ -119,7 +126,7 @@ public class MpackResponse { return true; } MpackResponse MpackResponse = (MpackResponse) obj; - return getMpackId().equals(MpackResponse.getMpackId()); + return getId().equals(MpackResponse.getId()); } public interface MpackResponseWrapper extends ApiModel { diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryMpackResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryMpackResponse.java index 1bc9659..9943024 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryMpackResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryMpackResponse.java @@ -26,25 +26,25 @@ import io.swagger.annotations.ApiModelProperty; */ public class RegistryMpackResponse { private Long registryId; + private String mpackId; private String mpackName; - private String mpackDisplayName; private String mpackDescription; - private String mpackLogoUrl; + private String mpackLogoUri; /** * Constructor * @param registryId registry id + * @param mpackId mpack id * @param mpackName mpack name - * @param mpackDisplayName mpack Display Name * @param mpackDescription mpack description - * @param mpackLogoUrl mpack logo url + * @param mpackLogoUri mpack logo uri */ - public RegistryMpackResponse(Long registryId, String mpackName, String mpackDisplayName, String mpackDescription, String mpackLogoUrl) { + public RegistryMpackResponse(Long registryId, String mpackId, String mpackName, String mpackDescription, String mpackLogoUri) { this.registryId = registryId; this.mpackName = mpackName; - this.mpackDisplayName = mpackDisplayName; + this.mpackId = mpackId; this.mpackDescription = mpackDescription; - this.mpackLogoUrl = mpackLogoUrl; + this.mpackLogoUri = mpackLogoUri; } /** @@ -56,6 +56,15 @@ public class RegistryMpackResponse { } /** + * Get mpack id + * @return mpack id + */ + public String getMpackId() { + return mpackId; + } + + + /** * Get mpack name * @return mpack name */ @@ -64,12 +73,6 @@ public class RegistryMpackResponse { } /** - * Get mpack summary - * @return - */ - public String getMpackDisplayName() {return mpackDisplayName;} - - /** * Get mpack description * @return mpack description */ @@ -78,11 +81,11 @@ public class RegistryMpackResponse { } /** - * Get mpack logo url - * @return mpack logo url + * Get mpack logo uri + * @return mpack logo uri */ - public String getMpackLogoUrl() { - return mpackLogoUrl; + public String getMpackLogoUri() { + return mpackLogoUri; } /** diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryMpackVersionResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryMpackVersionResponse.java index 5929c4c..829ed5e 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryMpackVersionResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryMpackVersionResponse.java @@ -20,8 +20,8 @@ package org.apache.ambari.server.controller; import java.util.List; import org.apache.ambari.server.controller.internal.RegistryMpackVersionResourceProvider; -import org.apache.ambari.server.registry.RegistryMpackCompatiblity; -import org.apache.ambari.server.registry.RegistryMpackService; +import org.apache.ambari.server.registry.RegistryMpackDependency; +import org.apache.ambari.server.state.Module; import io.swagger.annotations.ApiModelProperty; @@ -30,82 +30,82 @@ import io.swagger.annotations.ApiModelProperty; */ public class RegistryMpackVersionResponse { private Long registryId; + private String mpackId; private String mpackName; + private String mpackDescription; private String mpackVersion; - private String mpackBuildNumber; - private String stackId; - private String mpackUrl; - private String mpackDocUrl; - private List<? extends RegistryMpackService> mpackServices; - private List<? extends RegistryMpackCompatiblity> compatibleMpacks; + private String mpackUri; + private String mpackDocUri; + private String mpackLogoUri; + private List<? extends RegistryMpackDependency> dependencies; + private List<Module> modules; /** * Constructor * @param registryId registry id + * @param mpackId mpack id * @param mpackName mpack name + * @param mpackDescription mpack description * @param mpackVersion mpack version - * @param mpackBuildNumber mpack build number - * @param mpackUrl mpack download url - * @param mpackDocUrl mpack documentation url - * @param mpackServices list of mpack services - * @param compatibleMpacks list of compatible mpacks - * @param stackId stack id of the mpack version + * @param mpackUri mpack uri + * @param mpackDocUri mpack documentation uri + * @param mpackLogoUri mpack logo uri + * @param dependencies list of mpack dependencies + * @param modules list of modules in the mpack */ - public RegistryMpackVersionResponse( - Long registryId, String mpackName, String mpackVersion, String mpackBuildNumber, - String mpackUrl, String mpackDocUrl, - List<? extends RegistryMpackService> mpackServices, - List<? extends RegistryMpackCompatiblity> compatibleMpacks, String stackId) { + public RegistryMpackVersionResponse(Long registryId, String mpackId, String mpackName, String mpackDescription, + String mpackVersion, String mpackUri, String mpackDocUri, String mpackLogoUri, + List<? extends RegistryMpackDependency> dependencies, List<Module> modules) { this.registryId = registryId; + this.mpackId = mpackId; this.mpackName = mpackName; + this.mpackDescription = mpackDescription; this.mpackVersion = mpackVersion; - this.mpackBuildNumber = mpackBuildNumber; - this.mpackUrl = mpackUrl; - this.mpackDocUrl = mpackDocUrl; - this.mpackServices = mpackServices; - this.compatibleMpacks = compatibleMpacks; - this.stackId = stackId; + this.mpackUri = mpackUri; + this.mpackDocUri = mpackDocUri; + this.mpackLogoUri = mpackLogoUri; + this.dependencies = dependencies; + this.modules = modules; } public Long getRegistryId() { return registryId; } - public String getMpackName() { - return mpackName; + public String getMpackId() { + return mpackId; } - public String getMpackVersion() { - return mpackVersion; + public String getMpackName() { + return mpackName; } - public String getMpackBuildNumber() { - return mpackBuildNumber; + public String getMpackDescription() { + return mpackDescription; } - public String getMpackUrl() { - return mpackUrl; + public String getMpackVersion() { + return mpackVersion; } - public String getMpackDocUrl() { - return mpackDocUrl; + public String getMpackUri() { + return mpackUri; } - public List<? extends RegistryMpackService> getMpackServices() { - return mpackServices; + public String getMpackDocUri() { + return mpackDocUri; } - public List<? extends RegistryMpackCompatiblity> getCompatibleMpacks() { - return compatibleMpacks; + public String getMpackLogoUri() { + return mpackLogoUri; } - - public String getStackId() { - return stackId; + public List<? extends RegistryMpackDependency> getDependencies() { + return dependencies; } - public void setStackId(String stackId) { - this.stackId = stackId; + public List<Module> getModules() { + return modules; } @Override diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryResponse.java index 729451f..b338fd5 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RegistryResponse.java @@ -67,7 +67,6 @@ public class RegistryResponse { return registryUri; } - public void setRegistryUri(String registryUri) { this.registryUri = registryUri; } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MpackResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MpackResourceProvider.java index e3b6a5f..a867d11 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MpackResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MpackResourceProvider.java @@ -69,19 +69,20 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider { public static final String RESPONSE_KEY = "MpackInfo"; public static final String ALL_PROPERTIES = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "*"; - public static final String MPACK_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_id"; + public static final String MPACK_RESOURCE_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "id"; public static final String REGISTRY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "registry_id"; + public static final String MPACK_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_id"; public static final String MPACK_NAME = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_name"; public static final String MPACK_VERSION = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_version"; + public static final String MPACK_DESCRIPTION = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_description"; public static final String MPACK_URI = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_uri"; public static final String MODULES = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "modules"; - public static final String MPACK_DESC = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "description"; public static final String STACK_NAME_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "stack_name"; public static final String STACK_VERSION_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "stack_version"; private static Set<String> pkPropertyIds = new HashSet<>( - Arrays.asList(MPACK_ID, STACK_NAME_PROPERTY_ID, STACK_VERSION_PROPERTY_ID)); + Arrays.asList(MPACK_RESOURCE_ID, STACK_NAME_PROPERTY_ID, STACK_VERSION_PROPERTY_ID)); /** * The property ids for an mpack resource. @@ -104,18 +105,19 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider { static { // properties - PROPERTY_IDS.add(MPACK_ID); + PROPERTY_IDS.add(MPACK_RESOURCE_ID); PROPERTY_IDS.add(REGISTRY_ID); + PROPERTY_IDS.add(MPACK_ID); PROPERTY_IDS.add(MPACK_NAME); PROPERTY_IDS.add(MPACK_VERSION); PROPERTY_IDS.add(MPACK_URI); - PROPERTY_IDS.add(MPACK_DESC); + PROPERTY_IDS.add(MPACK_DESCRIPTION); PROPERTY_IDS.add(MODULES); PROPERTY_IDS.add(STACK_NAME_PROPERTY_ID); PROPERTY_IDS.add(STACK_VERSION_PROPERTY_ID); // keys - KEY_PROPERTY_IDS.put(Resource.Type.Mpack, MPACK_ID); + KEY_PROPERTY_IDS.put(Resource.Type.Mpack, MPACK_RESOURCE_ID); KEY_PROPERTY_IDS.put(Resource.Type.Stack, STACK_NAME_PROPERTY_ID); KEY_PROPERTY_IDS.put(Resource.Type.StackVersion, STACK_VERSION_PROPERTY_ID); @@ -147,11 +149,12 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider { if (response != null) { notifyCreate(Resource.Type.Mpack, request); Resource resource = new ResourceImpl(Resource.Type.Mpack); + resource.setProperty(MPACK_RESOURCE_ID, response.getId()); resource.setProperty(MPACK_ID, response.getMpackId()); resource.setProperty(MPACK_NAME, response.getMpackName()); resource.setProperty(MPACK_VERSION, response.getMpackVersion()); resource.setProperty(MPACK_URI, response.getMpackUri()); - resource.setProperty(MPACK_DESC, response.getDescription()); + resource.setProperty(MPACK_DESCRIPTION, response.getDescription()); resource.setProperty(REGISTRY_ID, response.getRegistryId()); associatedResources.add(resource); return getRequestStatus(null, associatedResources); @@ -203,21 +206,21 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider { Set<Map<String, Object>> properties = request.getProperties(); for (Map propertyMap : properties) { //Mpack Download url is either given in the request body or is fetched using the registry id - if (!propertyMap.containsKey(MPACK_URI) && !propertyMap.containsKey(REGISTRY_ID)) + if (!propertyMap.containsKey(MPACK_URI) && !propertyMap.containsKey(REGISTRY_ID)) { return null; - //Fetch Mpack Download Url using the given registry id - else if (!propertyMap.containsKey(MPACK_URI)) { + } else if (!propertyMap.containsKey(MPACK_URI)) { + // Retrieve mpack download url using the given registry id mpackRequest.setRegistryId(Long.valueOf((String) propertyMap.get(REGISTRY_ID))); mpackRequest.setMpackName((String) propertyMap.get(MPACK_NAME)); mpackRequest.setMpackVersion((String) propertyMap.get(MPACK_VERSION)); mpackRequest.setMpackUri(getMpackUri(mpackRequest)); } - //Directly download the mpack using the given url - else + else { + //Directly download the mpack using the given url mpackRequest.setMpackUri((String) propertyMap.get(MPACK_URI)); + } } return mpackRequest; - } /*** @@ -231,7 +234,7 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider { Registry registry = getManagementController().getRegistry(mpackRequest.getRegistryId()); RegistryMpack registryMpack = registry.getRegistryMpack(mpackRequest.getMpackName()); RegistryMpackVersion registryMpackVersion = registryMpack.getMpackVersion(mpackRequest.getMpackVersion()); - return registryMpackVersion.getMpackUrl(); + return registryMpackVersion.getMpackUri(); } @Override @@ -249,11 +252,12 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider { } for (MpackResponse response : responses){ Resource resource = new ResourceImpl(Resource.Type.Mpack); + resource.setProperty(MPACK_RESOURCE_ID, response.getId()); resource.setProperty(MPACK_ID, response.getMpackId()); resource.setProperty(MPACK_NAME, response.getMpackName()); resource.setProperty(MPACK_VERSION, response.getMpackVersion()); resource.setProperty(MPACK_URI, response.getMpackUri()); - resource.setProperty(MPACK_DESC, response.getDescription()); + resource.setProperty(MPACK_DESCRIPTION, response.getDescription()); resource.setProperty(REGISTRY_ID, response.getRegistryId()); results.add(resource); } @@ -269,11 +273,12 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider { MpackResponse response = getManagementController().getMpack(mpackId); Resource resource = new ResourceImpl(Resource.Type.Mpack); if (null != response) { + resource.setProperty(MPACK_RESOURCE_ID, response.getId()); resource.setProperty(MPACK_ID, response.getMpackId()); resource.setProperty(MPACK_NAME, response.getMpackName()); resource.setProperty(MPACK_VERSION, response.getMpackVersion()); resource.setProperty(MPACK_URI, response.getMpackUri()); - resource.setProperty(MPACK_DESC, response.getDescription()); + resource.setProperty(MPACK_DESCRIPTION, response.getDescription()); resource.setProperty(REGISTRY_ID, response.getRegistryId()); resource.setProperty(STACK_NAME_PROPERTY_ID, stackName); resource.setProperty(STACK_VERSION_PROPERTY_ID, stackVersion); @@ -283,21 +288,22 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider { return results; } - if (propertyMap.containsKey(MPACK_ID)) { - Object objMpackId = propertyMap.get(MPACK_ID); + if (propertyMap.containsKey(MPACK_RESOURCE_ID)) { + Object objMpackId = propertyMap.get(MPACK_RESOURCE_ID); if (objMpackId != null) mpackId = Long.valueOf((String) objMpackId); MpackResponse response = getManagementController().getMpack(mpackId); Resource resource = new ResourceImpl(Resource.Type.Mpack); if (null != response) { + resource.setProperty(MPACK_RESOURCE_ID, response.getId()); resource.setProperty(MPACK_ID, response.getMpackId()); resource.setProperty(MPACK_NAME, response.getMpackName()); resource.setProperty(MPACK_VERSION, response.getMpackVersion()); resource.setProperty(MPACK_URI, response.getMpackUri()); - resource.setProperty(MPACK_DESC, response.getDescription()); + resource.setProperty(MPACK_DESCRIPTION, response.getDescription()); resource.setProperty(REGISTRY_ID, response.getRegistryId()); - List<Module> modules = getManagementController().getModules(response.getMpackId()); + List<Module> modules = getManagementController().getModules(response.getId()); resource.setProperty(MODULES, modules); results.add(resource); } @@ -325,8 +331,8 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider { if (getManagementController().getClusters().getClusters().size() > 0) { throw new SystemException("Delete request cannot be completed since there is a cluster deployed"); } else { - if (propertyMap.containsKey(MPACK_ID)) { - Object objMpackId = propertyMap.get(MPACK_ID); + if (propertyMap.containsKey(MPACK_RESOURCE_ID)) { + Object objMpackId = propertyMap.get(MPACK_RESOURCE_ID); if (objMpackId != null) { mpackId = Long.valueOf((String) objMpackId); LOG.info("Deleting Mpack, id = " + mpackId.toString()); diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RegistryMpackResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RegistryMpackResourceProvider.java index 2e1c23c..fa0f62b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RegistryMpackResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RegistryMpackResourceProvider.java @@ -49,13 +49,13 @@ public class RegistryMpackResourceProvider extends AbstractControllerResourcePro public static final String RESPONSE_KEY = "RegistryMpackInfo"; public static final String ALL_PROPERTIES = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "*"; public static final String REGISTRY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "registry_id"; + public static final String REGISTRY_MPACK_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_id"; public static final String REGISTRY_MPACK_NAME = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_name"; - public static final String REGISTRY_MPACK_DISPLAY_NAME = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_display_name"; public static final String REGISTRY_MPACK_DESC = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_description"; - public static final String REGISTRY_MPACK_LOGO_URL = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_logo_url"; + public static final String REGISTRY_MPACK_LOGO_URI = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_logo_uri"; private static Set<String> pkPropertyIds = new HashSet<>( - Arrays.asList(REGISTRY_ID, REGISTRY_MPACK_NAME)); + Arrays.asList(REGISTRY_ID, REGISTRY_MPACK_ID, REGISTRY_MPACK_NAME)); /** * The property ids for a software registry resource. @@ -70,10 +70,10 @@ public class RegistryMpackResourceProvider extends AbstractControllerResourcePro static { // properties PROPERTY_IDS.add(REGISTRY_ID); + PROPERTY_IDS.add(REGISTRY_MPACK_ID); PROPERTY_IDS.add(REGISTRY_MPACK_NAME); - PROPERTY_IDS.add(REGISTRY_MPACK_DISPLAY_NAME); PROPERTY_IDS.add(REGISTRY_MPACK_DESC); - PROPERTY_IDS.add(REGISTRY_MPACK_LOGO_URL); + PROPERTY_IDS.add(REGISTRY_MPACK_LOGO_URI); // keys KEY_PROPERTY_IDS.put(Resource.Type.Registry, REGISTRY_ID); @@ -130,10 +130,10 @@ public class RegistryMpackResourceProvider extends AbstractControllerResourcePro for (RegistryMpackResponse response : responses) { Resource resource = new ResourceImpl(Resource.Type.RegistryMpack); setResourceProperty(resource, REGISTRY_ID, response.getRegistryId(), requestedIds); + setResourceProperty(resource, REGISTRY_MPACK_ID, response.getMpackId(), requestedIds); setResourceProperty(resource, REGISTRY_MPACK_NAME, response.getMpackName(), requestedIds); - setResourceProperty(resource, REGISTRY_MPACK_DISPLAY_NAME, response.getMpackDisplayName(), requestedIds); setResourceProperty(resource, REGISTRY_MPACK_DESC, response.getMpackDescription(), requestedIds); - setResourceProperty(resource, REGISTRY_MPACK_LOGO_URL, response.getMpackLogoUrl(), requestedIds); + setResourceProperty(resource, REGISTRY_MPACK_LOGO_URI, response.getMpackLogoUri(), requestedIds); resources.add(resource); } return resources; @@ -184,10 +184,10 @@ public class RegistryMpackResourceProvider extends AbstractControllerResourcePro for (RegistryMpack registryMpack : registry.getRegistryMpacks()) { RegistryMpackResponse response = new RegistryMpackResponse( registry.getRegistryId(), + registryMpack.getMpackId(), registryMpack.getMpackName(), - registryMpack.getMpackDisplayName(), registryMpack.getMpackDescription(), - registryMpack.getMpackLogoUrl()); + registryMpack.getMpackLogoUri()); responses.add(response); } } else { @@ -195,10 +195,10 @@ public class RegistryMpackResourceProvider extends AbstractControllerResourcePro if(registryMpack != null) { RegistryMpackResponse response = new RegistryMpackResponse( registry.getRegistryId(), + registryMpack.getMpackId(), registryMpack.getMpackName(), - registryMpack.getMpackDisplayName(), registryMpack.getMpackDescription(), - registryMpack.getMpackLogoUrl()); + registryMpack.getMpackLogoUri()); responses.add(response); } } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RegistryMpackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RegistryMpackVersionResourceProvider.java index 4b5393d..7dfddb0 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RegistryMpackVersionResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RegistryMpackVersionResourceProvider.java @@ -58,20 +58,18 @@ public class RegistryMpackVersionResourceProvider extends AbstractControllerReso public static final String ALL_PROPERTIES = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "*"; public static final String REGISTRY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "registry_id"; + public static final String REGISTRY_MPACK_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_id"; public static final String REGISTRY_MPACK_NAME = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_name"; + public static final String REGISTRY_MPACK_DESCRIPTION = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_description"; public static final String REGISTRY_MPACK_VERSION = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_version"; - public static final String REGISTRY_MPACK_BUILDNUM = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_buildnum"; - public static final String REGISTRY_MPACK_URL = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_url"; - public static final String REGISTRY_MPACK_DOC_URL = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_doc_url"; - public static final String REGISTRY_MPACK_SERVICES = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "services"; - public static final String REGISTRY_MPACK_COMPATIBLE_MPACKS = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "compatible_mpacks"; - public static final String REGISTRY_MPACK_STACK_NAME_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "stack_name"; - public static final String REGISTRY_MPACK_STACK_VERSION_PROPERTY_ID = - RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "stack_version"; - + public static final String REGISTRY_MPACK_URI = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_uri"; + public static final String REGISTRY_MPACK_DOC_URI = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_doc_uri"; + public static final String REGISTRY_MPACK_LOGO_URI = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_logo_uri"; + public static final String REGISTRY_MPACK_DEPENDENCIES = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_dependencies"; + public static final String REGISTRY_MPACK_MODULES = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "modules"; private static Set<String> pkPropertyIds = new HashSet<>( - Arrays.asList(REGISTRY_ID, REGISTRY_MPACK_NAME)); + Arrays.asList(REGISTRY_ID, REGISTRY_MPACK_ID, REGISTRY_MPACK_NAME)); /** * The property ids for a software registry resource. @@ -91,17 +89,15 @@ public class RegistryMpackVersionResourceProvider extends AbstractControllerReso static { // properties PROPERTY_IDS.add(REGISTRY_ID); + PROPERTY_IDS.add(REGISTRY_MPACK_ID); PROPERTY_IDS.add(REGISTRY_MPACK_NAME); + PROPERTY_IDS.add(REGISTRY_MPACK_DESCRIPTION); PROPERTY_IDS.add(REGISTRY_MPACK_VERSION); - PROPERTY_IDS.add(REGISTRY_MPACK_BUILDNUM); - PROPERTY_IDS.add(REGISTRY_MPACK_URL); - PROPERTY_IDS.add(REGISTRY_MPACK_DOC_URL); - PROPERTY_IDS.add(REGISTRY_MPACK_SERVICES); - PROPERTY_IDS.add(REGISTRY_MPACK_COMPATIBLE_MPACKS); - PROPERTY_IDS.add(REGISTRY_MPACK_STACK_NAME_PROPERTY_ID); - PROPERTY_IDS.add(REGISTRY_MPACK_STACK_VERSION_PROPERTY_ID); - - + PROPERTY_IDS.add(REGISTRY_MPACK_URI); + PROPERTY_IDS.add(REGISTRY_MPACK_DOC_URI); + PROPERTY_IDS.add(REGISTRY_MPACK_LOGO_URI); + PROPERTY_IDS.add(REGISTRY_MPACK_DEPENDENCIES); + PROPERTY_IDS.add(REGISTRY_MPACK_MODULES); // keys KEY_PROPERTY_IDS.put(Resource.Type.Registry, REGISTRY_ID); KEY_PROPERTY_IDS.put(Resource.Type.RegistryMpack, REGISTRY_MPACK_NAME); @@ -157,15 +153,15 @@ public class RegistryMpackVersionResourceProvider extends AbstractControllerReso for (RegistryMpackVersionResponse response : responses) { Resource resource = new ResourceImpl(Resource.Type.RegistryMpackVersion); setResourceProperty(resource, REGISTRY_ID, response.getRegistryId(), requestedIds); + setResourceProperty(resource, REGISTRY_MPACK_ID, response.getMpackId(), requestedIds); setResourceProperty(resource, REGISTRY_MPACK_NAME, response.getMpackName(), requestedIds); + setResourceProperty(resource, REGISTRY_MPACK_DESCRIPTION, response.getMpackDescription(), requestedIds); setResourceProperty(resource, REGISTRY_MPACK_VERSION, response.getMpackVersion(), requestedIds); - setResourceProperty(resource, REGISTRY_MPACK_BUILDNUM, response.getMpackBuildNumber(), requestedIds); - setResourceProperty(resource, REGISTRY_MPACK_URL, response.getMpackUrl(), requestedIds); - setResourceProperty(resource, REGISTRY_MPACK_DOC_URL, response.getMpackDocUrl(), requestedIds); - setResourceProperty(resource, REGISTRY_MPACK_SERVICES, response.getMpackServices(), requestedIds); - String[] stackid = ((String) response.getStackId()).split("-"); - setResourceProperty(resource, REGISTRY_MPACK_STACK_NAME_PROPERTY_ID, stackid[0], requestedIds); - setResourceProperty(resource, REGISTRY_MPACK_STACK_VERSION_PROPERTY_ID, stackid[1], requestedIds); + setResourceProperty(resource, REGISTRY_MPACK_URI, response.getMpackUri(), requestedIds); + setResourceProperty(resource, REGISTRY_MPACK_DOC_URI, response.getMpackDocUri(), requestedIds); + setResourceProperty(resource, REGISTRY_MPACK_LOGO_URI, response.getMpackLogoUri(), requestedIds); + setResourceProperty(resource, REGISTRY_MPACK_DEPENDENCIES, response.getDependencies(), requestedIds); + setResourceProperty(resource, REGISTRY_MPACK_MODULES, response.getModules(), requestedIds); sortedResources.add(resource); } sortedResources.sort(new Comparator<Resource>() { @@ -244,14 +240,15 @@ public class RegistryMpackVersionResourceProvider extends AbstractControllerReso for (RegistryMpackVersion registryMpackVersion : registryMpack.getMpackVersions()) { RegistryMpackVersionResponse response = new RegistryMpackVersionResponse( registry.getRegistryId(), + registryMpack.getMpackId(), registryMpack.getMpackName(), + registryMpack.getMpackDescription(), registryMpackVersion.getMpackVersion(), - registryMpackVersion.getMpackBuildNumber(), - registryMpackVersion.getMpackUrl(), - registryMpackVersion.getMpackDocUrl(), - registryMpackVersion.getMpackServices(), - registryMpackVersion.getCompatibleMpacks(), - registryMpackVersion.getMpackStackId()); + registryMpackVersion.getMpackUri(), + registryMpackVersion.getMpackDocUri(), + registryMpack.getMpackLogoUri(), + registryMpackVersion.getDependencies(), + registryMpackVersion.getModules()); responses.add(response); } } else { @@ -259,14 +256,15 @@ public class RegistryMpackVersionResourceProvider extends AbstractControllerReso if(registryMpackVersion != null) { RegistryMpackVersionResponse response = new RegistryMpackVersionResponse( registry.getRegistryId(), + registryMpack.getMpackId(), registryMpack.getMpackName(), + registryMpack.getMpackDescription(), registryMpackVersion.getMpackVersion(), - registryMpackVersion.getMpackBuildNumber(), - registryMpackVersion.getMpackUrl(), - registryMpackVersion.getMpackDocUrl(), - registryMpackVersion.getMpackServices(), - registryMpackVersion.getCompatibleMpacks(), - registryMpackVersion.getMpackStackId()); + registryMpackVersion.getMpackUri(), + registryMpackVersion.getMpackDocUri(), + registryMpack.getMpackLogoUri(), + registryMpackVersion.getDependencies(), + registryMpackVersion.getModules()); responses.add(response); } } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackGenerator.java b/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackGenerator.java index 6795aef..f274982 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackGenerator.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackGenerator.java @@ -243,7 +243,6 @@ public class MpackGenerator { Mpack mpack = new Mpack(); mpack.setName(dstStackName); mpack.setVersion(vdf.release.version); - mpack.setStackId(dstStackId.getStackId()); mpack.setDescription(dstStackName + " Ambari Management Pack"); Map<String, String> prereqs = new HashMap<>(); prereqs.put("min-ambari-version", "3.0.0.0"); diff --git a/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackManager.java b/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackManager.java index e272817..d77c5e1 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackManager.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackManager.java @@ -121,9 +121,10 @@ public class MpackManager { "UTF-8"); Gson gson = new Gson(); Mpack existingMpack = gson.fromJson(mpackJsonContents, Mpack.class); - existingMpack.setMpackId(mpackEntity.getMpackId()); + existingMpack.setResourceId(mpackEntity.getId()); existingMpack.setMpackUri(mpackEntity.getMpackUri()); - mpackMap.put(mpackEntity.getMpackId(), existingMpack); + existingMpack.setRegistryId(mpackEntity.getRegistryId()); + mpackMap.put(mpackEntity.getId(), existingMpack); } } } @@ -158,7 +159,7 @@ public class MpackManager { public MpackResponse registerMpack(MpackRequest mpackRequest) throws IOException, IllegalArgumentException, ResourceAlreadyExistsException { - Long mpackId; + Long mpackResourceId; String mpackName = ""; String mpackVersion = ""; Mpack mpack = new Mpack(); @@ -170,27 +171,25 @@ public class MpackManager { if (mpackRequest.getRegistryId() != null) { mpackName = mpackRequest.getMpackName(); mpackVersion = mpackRequest.getMpackVersion(); - mpack.setRegistryId(mpackRequest.getRegistryId()); LOG.info("Mpack Registration via Registry :" + mpackName); mpack = downloadMpackMetadata(mpackRequest.getMpackUri()); + mpack.setRegistryId(mpackRequest.getRegistryId()); isValidMetadata = validateMpackInfo(mpackName, mpackVersion, mpack.getName(), mpack.getVersion()); if (isValidMetadata) { mpackTarPath = downloadMpack(mpackRequest.getMpackUri(), mpack.getDefinition()); createMpackDirectory(mpack); mpackDirectory = mpacksStaging + File.separator + mpack.getName() + File.separator + mpack.getVersion(); + } else { + String message = + "Incorrect information : Mismatch in - (" + mpackName + "," + mpack.getName() + ") or (" + mpackVersion + + "," + mpack.getVersion() + ")"; + throw new IllegalArgumentException(message); //Mismatch in information } - else { - String message = - "Incorrect information : Mismatch in - (" + mpackName + "," + mpack.getName() + ") or (" + mpackVersion - + "," + mpack.getVersion() + ")"; - throw new IllegalArgumentException(message); //Mismatch in information - } - } - //Mpack registration using direct download - else { + } else { + // Mpack registration using direct download mpack = downloadMpackMetadata(mpackRequest.getMpackUri()); mpackTarPath = downloadMpack(mpackRequest.getMpackUri(), mpack.getDefinition()); @@ -202,13 +201,13 @@ public class MpackManager { } extractMpackTar(mpack, mpackTarPath, mpackDirectory); mpack.setMpackUri(mpackRequest.getMpackUri()); - mpackId = populateDB(mpack); + mpackResourceId = populateDB(mpack); - if (mpackId != null) { - mpackMap.put(mpackId, mpack); - mpack.setMpackId(mpackId); - if (populateStackDB(mpack)) - return new MpackResponse(mpack); + if (mpackResourceId != null) { + mpackMap.put(mpackResourceId, mpack); + mpack.setResourceId(mpackResourceId); + populateStackDB(mpack); + return new MpackResponse(mpack); } String message = "Mpack :" + mpackRequest.getMpackName() + " version: " + mpackRequest.getMpackVersion() + " already exists in server"; @@ -484,9 +483,8 @@ public class MpackManager { String actualMpackName, String actualMpackVersion) { - String strippedActualMpackVersion = actualMpackVersion.substring(0, actualMpackVersion.lastIndexOf('.')); if (expectedMpackName.equalsIgnoreCase(actualMpackName) && expectedMpackVersion - .equalsIgnoreCase(strippedActualMpackVersion)) { + .equalsIgnoreCase(actualMpackVersion)) { return true; } else { LOG.info("Incorrect information : Mismatch in - (" + expectedMpackName + "," + actualMpackName + ") or (" @@ -530,8 +528,7 @@ public class MpackManager { * @param mpack * @throws IOException */ - protected boolean populateStackDB(Mpack mpack) throws IOException { - + protected void populateStackDB(Mpack mpack) throws IOException, ResourceAlreadyExistsException { String stackName = mpack.getName(); String stackVersion = mpack.getVersion(); StackEntity stackEntity = stackDAO.find(stackName, stackVersion); @@ -541,12 +538,12 @@ public class MpackManager { stackEntity.setStackName(stackName); stackEntity.setStackVersion(stackVersion); - stackEntity.setMpackId(mpack.getMpackId()); + stackEntity.setMpackId(mpack.getResourceId()); stackDAO.create(stackEntity); - return true; } else { - LOG.error("Stack {}-{} already exists in the database", stackName, stackVersion); - return false; + String message = "Stack " + stackName + "-" + stackVersion + " already exists"; + LOG.error(message); + throw new ResourceAlreadyExistsException(message); } } @@ -578,7 +575,7 @@ public class MpackManager { LOG.info("Removing mpack :" + mpackName); - mpackMap.remove(mpackEntity.getMpackId()); + mpackMap.remove(mpackEntity.getId()); FileUtils.deleteDirectory(mpackDirToDelete); if (mpackDirectory.isDirectory()) { diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/MpackDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/MpackDAO.java index 3228130..43e2a7f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/MpackDAO.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/MpackDAO.java @@ -56,19 +56,19 @@ public class MpackDAO { @Transactional public Long create(MpackEntity mpackEntity) { m_entityManagerProvider.get().persist(mpackEntity); - return mpackEntity.getMpackId(); + return mpackEntity.getId(); } /** * Gets an mpack with the specified ID. * - * @param mpackId - * the ID of the alert to retrieve. + * @param id + * the ID of the mpack to retrieve. * @return the mpack or {@code null} if none exists. */ @RequiresSession - public MpackEntity findById(long mpackId) { - return m_entityManagerProvider.get().find(MpackEntity.class, mpackId); + public MpackEntity findById(long id) { + return m_entityManagerProvider.get().find(MpackEntity.class, id); } /** @@ -99,8 +99,8 @@ public class MpackDAO { } @Transactional - public void removeById(Long mpackId) { - m_entityManagerProvider.get().remove(findById(mpackId)); + public void removeById(Long id) { + m_entityManagerProvider.get().remove(findById(id)); } } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/MpackEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/MpackEntity.java index d3f6f28..879d24a 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/MpackEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/MpackEntity.java @@ -41,7 +41,7 @@ import org.slf4j.LoggerFactory; @Entity @TableGenerator(name = "mpack_id_generator", table = "ambari_sequences", pkColumnName = "sequence_name", valueColumnName = "sequence_value", pkColumnValue = "mpack_id_seq", initialValue = 1) @NamedQueries({ - @NamedQuery(name = "MpackEntity.findById", query = "SELECT mpack FROM MpackEntity mpack where mpack.mpackId = :mpackId"), + @NamedQuery(name = "MpackEntity.findById", query = "SELECT mpack FROM MpackEntity mpack where mpack.id = :id"), @NamedQuery(name = "MpackEntity.findAll", query = "SELECT mpack FROM MpackEntity mpack"), @NamedQuery(name = "MpackEntity.findByNameVersion", query = "SELECT mpack FROM MpackEntity mpack where mpack.mpackName = :mpackName and mpack.mpackVersion = :mpackVersion")}) @@ -50,7 +50,7 @@ public class MpackEntity { @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "mpack_id_generator") @Column(name = "id", nullable = false, updatable = false) - private Long mpackId; + private Long id; @Column(name = "registry_id", nullable = true, insertable = true, updatable = false, length = 10) private Long registryId; @@ -64,8 +64,8 @@ public class MpackEntity { @Column(name = "mpack_uri", nullable = false) private String mpackUri; - public Long getMpackId() { - return mpackId; + public Long getId() { + return id; } public Long getRegistryId() { @@ -84,8 +84,8 @@ public class MpackEntity { return mpackUri; } - public void setMpackId(Long mpackId) { - this.mpackId = mpackId; + public void setId(Long id) { + this.id = id; } public void setRegistryId(Long registryId) { @@ -121,7 +121,7 @@ public class MpackEntity { MpackEntity that = (MpackEntity) object; EqualsBuilder equalsBuilder = new EqualsBuilder(); - equalsBuilder.append(mpackId, that.mpackId); + equalsBuilder.append(id, that.id); equalsBuilder.append(mpackName, that.mpackName); equalsBuilder.append(mpackVersion, that.mpackVersion); return equalsBuilder.isEquals(); @@ -130,7 +130,7 @@ public class MpackEntity { /** * Generates a hash for the mpack based on the following criteria: * <ul> - * <li>{@link #mpackId} + * <li>{@link #id} * </ul> * <p/> * <p/> @@ -138,7 +138,7 @@ public class MpackEntity { */ @Override public int hashCode() { - return Objects.hash(mpackId, mpackName, mpackVersion); + return Objects.hash(id, mpackName, mpackVersion); } /** @@ -147,7 +147,7 @@ public class MpackEntity { @Override public String toString() { StringBuilder buffer = new StringBuilder("MpackEntity{"); - buffer.append("mpackId=").append(mpackId); + buffer.append("id=").append(id); if (null != registryId) { buffer.append(", registryId=").append(registryId); } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryAdvisor.java b/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryAdvisor.java index 9d772ec..e524618 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryAdvisor.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryAdvisor.java @@ -34,8 +34,12 @@ import org.apache.ambari.server.registry.RegistryRecommendationResponse.Registry import org.apache.ambari.server.registry.RegistryRecommendationResponse.RegistryRecommendations; import org.apache.ambari.server.registry.RegistryValidationResponse.RegistryValidationResponseBuilder; import org.apache.ambari.server.registry.RegistryValidationResponse.RegistryValidationResult; +import org.apache.ambari.server.utils.MpackVersion; import org.apache.ambari.server.utils.SetUtils; + import org.apache.ambari.server.utils.VersionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -46,9 +50,12 @@ import com.google.inject.Singleton; @Singleton public class RegistryAdvisor { + private final static Logger LOG = LoggerFactory.getLogger(RegistryAdvisor.class); + private AmbariManagementController managementController; private long requestId = 0; + /** * Given list of all possible mpack bundles, check compatibility and return compatible mpack bundles. * @param mpackBundles all possible mpack bundles @@ -76,19 +83,24 @@ public class RegistryAdvisor { } for(MpackEntry mvr: mpackMap.values()) { RegistryMpackVersion rmv = mvr.getRegistryMpackVersion(); - List<RegistryMpackCompatiblity> compatiblities = (List<RegistryMpackCompatiblity>) rmv.getCompatibleMpacks(); - if(compatiblities != null && !compatiblities.isEmpty()) { - for(RegistryMpackCompatiblity compatiblity : compatiblities) { - if(mpackMap.containsKey(compatiblity.getName())) { - String selectedVersion = mpackMap.get(compatiblity.getName()).getMpackVersion(); - String minVersion = compatiblity.getMinVersion(); - String maxVersion = compatiblity.getMaxVersion(); - if(minVersion != null && !minVersion.isEmpty() - && VersionUtils.compareVersions(selectedVersion, minVersion) < 0) { + List<RegistryMpackDependency> dependencies = (List<RegistryMpackDependency>) rmv.getDependencies(); + if(dependencies != null && !dependencies.isEmpty()) { + for(RegistryMpackDependency dependency : dependencies) { + if(mpackMap.containsKey(dependency.getName())) { + String selectedVersion = mpackMap.get(dependency.getName()).getMpackVersion(); + MpackVersion selectedMpackVersion = MpackVersion.parse(selectedVersion); + if(selectedMpackVersion == null) { + LOG.error("Cannot validate compatibility of mpack as the mpack version is not known"); return false; } - if(maxVersion != null && !maxVersion.isEmpty() - && VersionUtils.compareVersions(selectedVersion, maxVersion) >= 0) { + String minVersion = dependency.getMinVersion(); + String maxVersion = dependency.getMaxVersion(); + MpackVersion minMpackVersion = MpackVersion.parse(minVersion, false); + MpackVersion maxMpackVersion = MpackVersion.parse(maxVersion, false); + if(minMpackVersion != null && VersionUtils.compareTo(selectedMpackVersion, minMpackVersion) < 0) { + return false; + } + if(maxMpackVersion != null && VersionUtils.compareTo(selectedMpackVersion, maxMpackVersion) >= 0) { return false; } } @@ -248,7 +260,9 @@ public class RegistryAdvisor { for(Map.Entry<String, MpackEntry> mapEntry : o1Map.entrySet()) { MpackEntry o1Entry = mapEntry.getValue(); MpackEntry o2Entry = o2Map.get(mapEntry.getKey()); - int compareResult = VersionUtils.compareVersions(o1Entry.getMpackVersion(), o2Entry.getMpackVersion()); + MpackVersion v1 = MpackVersion.parse(o1Entry.getMpackVersion()); + MpackVersion v2 = MpackVersion.parse(o2Entry.getMpackVersion()); + int compareResult = VersionUtils.compareTo(v1, v2); if(compareResult > 0) { o1Wins++; } else if(compareResult < 0) { @@ -314,11 +328,15 @@ public class RegistryAdvisor { registryMpackVersions.sort(new Comparator<RegistryMpackVersion>() { @Override public int compare(final RegistryMpackVersion o1, final RegistryMpackVersion o2) { - return -1 * VersionUtils.compareVersions(o1.getMpackVersion(), o2.getMpackVersion()); + MpackVersion v1 = MpackVersion.parse(o1.getMpackVersion()); + MpackVersion v2 = MpackVersion.parse(o2.getMpackVersion()); + return -1 * VersionUtils.compareTo(v1, v2); } }); for(RegistryMpackVersion registryMpackVersion : registryMpackVersions) { - if(VersionUtils.compareVersions(registryMpackVersion.getMpackVersion(), minMpackEntry.getMpackVersion()) > 0) { + MpackVersion version = MpackVersion.parse(registryMpackVersion.getMpackVersion()); + MpackVersion minMpackVersion = MpackVersion.parse(minMpackEntry.getMpackVersion()); + if(VersionUtils.compareTo(version, minMpackVersion) > 0) { MpackEntry mpackEntry = new MpackEntry(selectedMpackName, registryMpackVersion.getMpackVersion()); MpackBundle mpackBundle = new MpackBundle(rank++, Collections.singletonList(mpackEntry)); mpackBundles.add(mpackBundle); @@ -496,7 +514,9 @@ public class RegistryAdvisor { for(Map.Entry<String, MpackEntry> mapEntry : o1Map.entrySet()) { MpackEntry o1Entry = mapEntry.getValue(); MpackEntry o2Entry = o2Map.get(mapEntry.getKey()); - int compareResult = VersionUtils.compareVersions(o1Entry.getMpackVersion(), o2Entry.getMpackVersion()); + MpackVersion v1 = MpackVersion.parse(o1Entry.getMpackVersion()); + MpackVersion v2 = MpackVersion.parse(o2Entry.getMpackVersion()); + int compareResult = VersionUtils.compareTo(v1, v2); if(compareResult > 0) { o1Wins++; } else if(compareResult < 0) { @@ -514,9 +534,10 @@ public class RegistryAdvisor { for(Map.Entry<String, MpackEntry> selectedEntry : selectedMpacksMap.entrySet()) { String selectedKey = selectedEntry.getKey(); MpackEntry selectedMpackEntry = selectedEntry.getValue(); - if (!mpackBundleMap.containsKey(selectedKey) || - !VersionUtils.areVersionsEqual(selectedMpackEntry.getMpackVersion(), - mpackBundleMap.get(selectedKey).getMpackVersion(), true)) { + MpackVersion selectedVersion = MpackVersion.parse(selectedMpackEntry.getMpackVersion()); + MpackVersion bundleMpackVersion = MpackVersion.parse(mpackBundleMap.get(selectedKey).getMpackVersion()); + + if (!mpackBundleMap.containsKey(selectedKey) || !selectedVersion.equals(bundleMpackVersion)) { isMatch = false; } } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpack.java b/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpack.java index d15a146..4ccd8bf 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpack.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpack.java @@ -25,17 +25,18 @@ import org.apache.ambari.server.AmbariException; * Represents a single instance of a software registry */ public interface RegistryMpack { + /** - * Get mpack name + * Get mpack id * @return */ - public String getMpackName(); + public String getMpackId(); /** - * Get mpack display name + * Get mpack name * @return */ - public String getMpackDisplayName(); + public String getMpackName(); /** * Get mpack description @@ -44,10 +45,10 @@ public interface RegistryMpack { public String getMpackDescription(); /** - * Get mpack logo url + * Get mpack logo uri * @return */ - public String getMpackLogoUrl(); + public String getMpackLogoUri(); /** * Get list of mpack versions diff --git a/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackCompatiblity.java b/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackDependency.java similarity index 79% rename from ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackCompatiblity.java rename to ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackDependency.java index 2774e62..c3f2ce2 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackCompatiblity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackDependency.java @@ -20,25 +20,33 @@ package org.apache.ambari.server.registry; import org.codehaus.jackson.annotate.JsonProperty; /** - * Represents a single instance of a software registry + * Represents registry mpack dependency */ -public interface RegistryMpackCompatiblity { +public interface RegistryMpackDependency { + + /** + * Get dependent mpack id + * @return + */ + @JsonProperty("id") + public String getId(); + /** - * Get name + * Get dependent mpack name * @return */ @JsonProperty("name") public String getName(); /** - * Get min version + * Get min version of dependent mpack * @return */ @JsonProperty("minVersion") public String getMinVersion(); /** - * Get max version + * Get max version of dependent mpack * @return */ @JsonProperty("maxVersion") diff --git a/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackService.java b/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackService.java deleted file mode 100644 index 9c3f244..0000000 --- a/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackService.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * 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.registry; - -import org.codehaus.jackson.annotate.JsonProperty; - -/** - * Represents a single instance of a service in a registry mpack - */ -public interface RegistryMpackService { - - /** - * Get name - * @return - */ - @JsonProperty("name") - public String getName(); - - /** - * Get version - * @return - */ - @JsonProperty("version") - public String getVersion(); - -} diff --git a/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackVersion.java b/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackVersion.java index ed7abc2..005d256 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackVersion.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/registry/RegistryMpackVersion.java @@ -19,6 +19,8 @@ package org.apache.ambari.server.registry; import java.util.List; +import org.apache.ambari.server.state.Module; + /** * Represents a single instance of a registry mpack version */ @@ -30,39 +32,22 @@ public interface RegistryMpackVersion { public String getMpackVersion(); /** - * Get mpack build number + * Get mpack uri * @return */ - public String getMpackBuildNumber(); + public String getMpackUri(); /** - * Get mpack url + * Get mpack doc uri * @return */ - public String getMpackUrl(); + public String getMpackDocUri(); /** - * Get mpack doc url + * Get list of mpack dependencies * @return */ - public String getMpackDocUrl(); - + List<? extends RegistryMpackDependency> getDependencies(); - /** - * Get mpack stack id - * @return - */ - public String getMpackStackId(); - - /** - * Get list of services in the mpack version - * @return - */ - public List<? extends RegistryMpackService> getMpackServices(); - - /** - * Get list of compatible mpacks - * @return - */ - public List<? extends RegistryMpackCompatiblity> getCompatibleMpacks(); + List<Module> getModules(); } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpack.java b/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpack.java index d58a29d..decd695 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpack.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpack.java @@ -32,28 +32,30 @@ import com.google.gson.annotations.SerializedName; */ public class JsonRegistryMpack implements RegistryMpack { + @SerializedName("id") + private String id; + @SerializedName("name") private String name; - @SerializedName("displayName") - private String displayName; - @SerializedName("description") private String description; - @SerializedName("logoUrl") - private String logoUrl; + @SerializedName("logoUri") + private String logoUri; - @SerializedName("mpackVersions") + @SerializedName("versions") private ArrayList<JsonRegistryMpackVersion> mpackVersions; @Override - public String getMpackName() { - return name; + public String getMpackId() { + return id; } @Override - public String getMpackDisplayName() {return displayName;} + public String getMpackName() { + return name; + } @Override public String getMpackDescription() { @@ -61,8 +63,8 @@ public class JsonRegistryMpack implements RegistryMpack { } @Override - public String getMpackLogoUrl() { - return logoUrl; + public String getMpackLogoUri() { + return logoUri; } @Override diff --git a/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackCompatibility.java b/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackDependency.java similarity index 80% rename from ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackCompatibility.java rename to ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackDependency.java index 1934b8a..e029d8e 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackCompatibility.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackDependency.java @@ -17,14 +17,17 @@ */ package org.apache.ambari.server.registry.json; -import org.apache.ambari.server.registry.RegistryMpackCompatiblity; +import org.apache.ambari.server.registry.RegistryMpackDependency; import com.google.gson.annotations.SerializedName; /** - * JSON implementation of {@link RegistryMpackCompatiblity} + * JSON implementation of {@link RegistryMpackDependency} */ -public class JsonRegistryMpackCompatibility implements RegistryMpackCompatiblity { +public class JsonRegistryMpackDependency implements RegistryMpackDependency { + + @SerializedName("id") + private String id; @SerializedName("name") private String name; @@ -36,6 +39,11 @@ public class JsonRegistryMpackCompatibility implements RegistryMpackCompatiblity private String maxVersion; @Override + public String getId() { + return id; + } + + @Override public String getName() { return name; } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackService.java b/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackService.java deleted file mode 100644 index 9ae45d5..0000000 --- a/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackService.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * 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.registry.json; - -import org.apache.ambari.server.registry.RegistryMpackService; - -import com.google.gson.annotations.SerializedName; - -/** - * JSON implementation of {@link RegistryMpackService} - */ -public class JsonRegistryMpackService implements RegistryMpackService { - - @SerializedName("name") - private String name; - - @SerializedName("version") - private String version; - - @Override public String getName() { - return name; - } - - @Override public String getVersion() { - return version; - } -} diff --git a/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackVersion.java b/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackVersion.java index 51aa0ca..d946331 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackVersion.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/registry/json/JsonRegistryMpackVersion.java @@ -17,13 +17,21 @@ */ package org.apache.ambari.server.registry.json; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.List; -import org.apache.ambari.server.registry.RegistryMpackCompatiblity; -import org.apache.ambari.server.registry.RegistryMpackService; +import org.apache.ambari.server.registry.RegistryMpackDependency; import org.apache.ambari.server.registry.RegistryMpackVersion; +import org.apache.ambari.server.state.Module; +import org.apache.ambari.server.state.Mpack; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; /** @@ -33,23 +41,16 @@ public class JsonRegistryMpackVersion implements RegistryMpackVersion { @SerializedName("version") private String version; - @SerializedName("buildNumber") - private String buildNumber; + @SerializedName("mpackUri") + private String mpackUri; - @SerializedName("mpackUrl") - private String mpackUrl; + @SerializedName("docUri") + private String docUri; - @SerializedName("docUrl") - private String docUrl; + @SerializedName("dependencies") + private ArrayList<JsonRegistryMpackDependency> dependencies; - @SerializedName("stack-id") - private String stackId; - - @SerializedName("services") - private ArrayList<JsonRegistryMpackService> services; - - @SerializedName("compatibleMpacks") - private ArrayList<JsonRegistryMpackCompatibility> compatibleMpacks; + private Mpack mpack = null; @Override public String getMpackVersion() { @@ -57,32 +58,39 @@ public class JsonRegistryMpackVersion implements RegistryMpackVersion { } @Override - public String getMpackBuildNumber() { - return buildNumber; + public String getMpackUri() { + return mpackUri; } @Override - public String getMpackUrl() { - return mpackUrl; + public String getMpackDocUri() { + return docUri; } @Override - public String getMpackDocUrl() { - return docUrl; + public List<? extends RegistryMpackDependency> getDependencies() { + return dependencies; } - @Override - public List<? extends RegistryMpackService> getMpackServices() { - return services; - } + private final static Logger LOG = LoggerFactory.getLogger(JsonRegistryMpackVersion.class); - @Override - public List<? extends RegistryMpackCompatiblity> getCompatibleMpacks() { - return compatibleMpacks; - } @Override - public String getMpackStackId() { - return stackId; + public List<Module> getModules() { + + if(mpack == null) { + try { + URL url = new URL(mpackUri); + InputStreamReader reader = new InputStreamReader(url.openStream()); + Gson gson = new Gson(); + mpack = gson.fromJson(reader, Mpack.class); + } catch (MalformedURLException e) { + LOG.warn("Failed to get list of modules, malformed mpack uri {}", mpackUri); + } + catch (IOException e) { + LOG.warn("Failed to get list of modules, mpack uri {} cannot be read", mpackUri); + } + } + return mpack == null? null: mpack.getModules(); } } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Mpack.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Mpack.java index 62904f9..76e43d4 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/Mpack.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Mpack.java @@ -27,18 +27,25 @@ import com.google.gson.annotations.SerializedName; */ public class Mpack { - private Long mpackId; + /** + * Mpack DB Id + */ + private Long resourceId; private Long registryId; + /** + * Mpack id as defined in mpack.json + */ + @SerializedName("id") + private String mpackId; + @SerializedName("name") private String name; @SerializedName("version") private String version; - @SerializedName("artifacts-path") - private String artifactsPath; @SerializedName("prerequisites") private Map<String, String> prerequisites; @@ -46,15 +53,6 @@ public class Mpack { @SerializedName("modules") private List<Module> modules; - @SerializedName("modules-path") - private String modulesPath; - - @SerializedName("mpack-path") - private String mpackPath; - - @SerializedName("stack-id") - private String stackId; - @SerializedName("definition") private String definition; @@ -63,12 +61,12 @@ public class Mpack { private String mpackUri; - public Long getMpackId() { - return mpackId; + public Long getResourceId() { + return resourceId; } - public void setMpackId(Long mpackId) { - this.mpackId = mpackId; + public void setResourceId(Long resourceId) { + this.resourceId = resourceId; } public Long getRegistryId() { @@ -87,6 +85,14 @@ public class Mpack { this.mpackUri = mpackUri; } + public String getMpackId() { + return mpackId; + } + + public void setMpackId(String mpackId) { + this.mpackId = mpackId; + } + public String getName() { return name; } @@ -127,37 +133,6 @@ public class Mpack { this.modules = modules; } - public String getStackId() { - return stackId; - } - - public void setStackId(String stackId) { - this.stackId = stackId; - } - - public String getArtifactsPath() { - return artifactsPath; - } - - public void setArtifactsPath(String artifactsPath) { - this.artifactsPath = artifactsPath; - } - - public String getModulesPath() { - return modulesPath; - } - - public void setModulesPath(String modulesPath) { - this.modulesPath = modulesPath; - } - - public String getMpackPath() { - return mpackPath; - } - - public void setMpackPath(String mpackPath) { - this.mpackPath = mpackPath; - } public String getDefinition() { return definition; @@ -174,16 +149,13 @@ public class Mpack { Mpack mpack = (Mpack) o; - if (!mpackId.equals(mpack.mpackId)) return false; + if (!resourceId.equals(mpack.resourceId)) return false; if (registryId != null ? !registryId.equals(mpack.registryId) : mpack.registryId != null) return false; + if (!mpackId.equals(mpack.mpackId)) return false; if (!name.equals(mpack.name)) return false; if (!version.equals(mpack.version)) return false; - if (!artifactsPath.equals(mpack.artifactsPath)) return false; if (!prerequisites.equals(mpack.prerequisites)) return false; if (!modules.equals(mpack.modules)) return false; - if (!modulesPath.equals(mpack.modulesPath)) return false; - if (!mpackPath.equals(mpack.mpackPath)) return false; - if (!stackId.equals(mpack.stackId)) return false; if (!definition.equals(mpack.definition)) return false; if (!description.equals(mpack.description)) return false; return mpackUri.equals(mpack.mpackUri); @@ -191,16 +163,13 @@ public class Mpack { @Override public int hashCode() { - int result = mpackId.hashCode(); + int result = resourceId.hashCode(); result = 31 * result + (registryId != null ? registryId.hashCode() : 0); + result = 31 * result + mpackId.hashCode(); result = 31 * result + name.hashCode(); result = 31 * result + version.hashCode(); - result = 31 * result + artifactsPath.hashCode(); result = 31 * result + prerequisites.hashCode(); result = 31 * result + modules.hashCode(); - result = 31 * result + modulesPath.hashCode(); - result = 31 * result + mpackPath.hashCode(); - result = 31 * result + stackId.hashCode(); result = 31 * result + definition.hashCode(); result = 31 * result + description.hashCode(); result = 31 * result + mpackUri.hashCode(); @@ -210,16 +179,13 @@ public class Mpack { @Override public String toString() { return "Mpack{" + - "mpackId=" + mpackId + + "id=" + resourceId + ", registryId=" + registryId + + ", mpackId='" + mpackId + '\'' + ", name='" + name + '\'' + ", version='" + version + '\'' + - ", artifactsPath='" + artifactsPath + '\'' + ", prerequisites=" + prerequisites + ", modules=" + modules + - ", modulesPath='" + modulesPath + '\'' + - ", mpackPath='" + mpackPath + '\'' + - ", stackId='" + stackId + '\'' + ", definition='" + definition + '\'' + ", description='" + description + '\'' + ", mpackUri='" + mpackUri + '\'' + @@ -227,6 +193,9 @@ public class Mpack { } public void copyFrom(Mpack mpack) { + if (this.resourceId == null) { + this.resourceId = mpack.getResourceId(); + } if (this.name == null) { this.name = mpack.getName(); } @@ -236,9 +205,6 @@ public class Mpack { if (this.version == null) { this.version = mpack.getVersion(); } - if (this.stackId == null) { - this.stackId = mpack.getStackId(); - } if (this.registryId == null) { this.registryId = mpack.getRegistryId(); } @@ -248,18 +214,9 @@ public class Mpack { if (this.modules == null) { this.modules = mpack.getModules(); } - if (this.artifactsPath == null) { - this.artifactsPath = mpack.getArtifactsPath(); - } if (this.prerequisites == null) { this.prerequisites = mpack.getPrerequisites(); } - if (this.modulesPath == null) { - this.modulesPath = mpack.getModulesPath(); - } - if (this.mpackPath == null) { - this.mpackPath = mpack.getMpackPath(); - } if (this.definition == null) { this.definition = mpack.getDefinition(); } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/utils/MpackVersion.java b/ambari-server/src/main/java/org/apache/ambari/server/utils/MpackVersion.java index ad3fdc8..31bb167 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/utils/MpackVersion.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/utils/MpackVersion.java @@ -23,6 +23,9 @@ import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * This class should be used to compare mpack and stack versions. * Base method which should be used is parse/parseStackVersion, depends @@ -38,11 +41,15 @@ public class MpackVersion implements Comparable<MpackVersion> { private final static String VERSION_WITH_HOTFIX_AND_BUILD_PATTERN = "^([0-9]+).([0-9]+).([0-9]+)-h([0-9]+)-b([0-9]+)"; private final static String VERSION_WITH_BUILD_PATTERN = "^([0-9]+).([0-9]+).([0-9]+)-b([0-9]+)"; private final static String LEGACY_STACK_VERSION_PATTERN = "^([0-9]+).([0-9]+).([0-9]+).([0-9]+)-([0-9]+)"; + private final static String FORMAT_VERSION_PATTERN = "^([0-9]+)(\\.)?([0-9]+)?(\\.)?([0-9]+)?(-h)?([0-9]+)?(-b)?([0-9]+)?"; // Patterns for previous RE private final static Pattern PATTERN_WITH_HOTFIX = Pattern.compile(VERSION_WITH_HOTFIX_AND_BUILD_PATTERN); private final static Pattern PATTERN_LEGACY_STACK_VERSION = Pattern.compile(LEGACY_STACK_VERSION_PATTERN); private final static Pattern PATTERN_WITHOUT_HOTFIX = Pattern.compile(VERSION_WITH_BUILD_PATTERN); + private final static Pattern PATTERN_FORMAT_VERSION = Pattern.compile(FORMAT_VERSION_PATTERN); + + private final static Logger LOG = LoggerFactory.getLogger(MpackVersion.class); // Parts of version private int major; @@ -68,20 +75,59 @@ public class MpackVersion implements Comparable<MpackVersion> { * @return MpackVersion instance which contains parsed version * */ public static MpackVersion parse(String mpackVersion) { - Matcher versionMatcher = validateMpackVersion(mpackVersion); - MpackVersion result = null; + return parse(mpackVersion, true); + } + public static MpackVersion parse(String mpackVersion, boolean strict) { + + if(!strict) { + mpackVersion = format(mpackVersion); + } + Matcher versionMatcher = validateMpackVersion(mpackVersion); + if(versionMatcher == null) { + throw new IllegalArgumentException("Wrong format for mpack version"); + } if (versionMatcher.pattern().pattern().equals(VERSION_WITH_BUILD_PATTERN)) { - result = new MpackVersion(Integer.parseInt(versionMatcher.group(1)), Integer.parseInt(versionMatcher.group(2)), + return new MpackVersion(Integer.parseInt(versionMatcher.group(1)), Integer.parseInt(versionMatcher.group(2)), Integer.parseInt(versionMatcher.group(3)), 0, Integer.parseInt(versionMatcher.group(4))); - - } else { - result = new MpackVersion(Integer.parseInt(versionMatcher.group(1)), Integer.parseInt(versionMatcher.group(2)), + } else if (versionMatcher.pattern().pattern().equals(VERSION_WITH_HOTFIX_AND_BUILD_PATTERN)) { + return new MpackVersion(Integer.parseInt(versionMatcher.group(1)), Integer.parseInt(versionMatcher.group(2)), Integer.parseInt(versionMatcher.group(3)), Integer.parseInt(versionMatcher.group(4)), Integer.parseInt(versionMatcher.group(5))); - + } else { + throw new IllegalArgumentException("Wrong format for mpack version"); } + } - return result; + /** + * Method to format an mpack version in {major}.{minor}.{maint}-h{hotfix}-b{build} format + * @param mpackVersion input mpack version string + * @return formatted mpack version string + */ + public static String format(String mpackVersion) { + Matcher m = PATTERN_FORMAT_VERSION.matcher(mpackVersion); + if(m.matches()) { + String majorVersion = m.group(1); + String minorVersion = m.group(3); + String maintVersion = m.group(5); + String hotfixNum = m.group(7); + String buildNum = m.group(9); + if(hotfixNum != null || buildNum != null) { + if(minorVersion == null || maintVersion == null) { + // Both minorVersion and maintVersion should be specified + throw new IllegalArgumentException("Wrong format for mpack version"); + } + } + minorVersion = minorVersion != null? minorVersion: "0"; + maintVersion = maintVersion != null? maintVersion: "0"; + hotfixNum = hotfixNum != null? hotfixNum: "0"; + buildNum = buildNum != null? buildNum: "0"; + String formattedMpackVersion = String.format("%s.%s.%s-h%s-b%s", + majorVersion, minorVersion, maintVersion, hotfixNum, buildNum); + return formattedMpackVersion; + + } else { + throw new IllegalArgumentException("Wrong format for mpack version"); + } } /** @@ -93,10 +139,18 @@ public class MpackVersion implements Comparable<MpackVersion> { * */ public static MpackVersion parseStackVersion(String stackVersion) { Matcher versionMatcher = validateStackVersion(stackVersion); - MpackVersion result = new MpackVersion(Integer.parseInt(versionMatcher.group(1)), Integer.parseInt(versionMatcher.group(2)), - Integer.parseInt(versionMatcher.group(3)), Integer.parseInt(versionMatcher.group(4)), Integer.parseInt(versionMatcher.group(5))); + if(versionMatcher == null) { + throw new IllegalArgumentException("Wrong format for mpack version"); + } - return result; + if(versionMatcher.pattern().pattern().equals(LEGACY_STACK_VERSION_PATTERN)) { + return new MpackVersion(Integer.parseInt(versionMatcher.group(1)), + Integer.parseInt(versionMatcher.group(2)), + Integer.parseInt(versionMatcher.group(3)), Integer.parseInt(versionMatcher.group(4)), + Integer.parseInt(versionMatcher.group(5))); + } else { + throw new IllegalArgumentException("Wrong format for mpack version"); + } } /** @@ -114,12 +168,9 @@ public class MpackVersion implements Comparable<MpackVersion> { String stackVersion = StringUtils.trim(version); - Matcher versionMatcher = PATTERN_WITH_HOTFIX.matcher(stackVersion); + Matcher versionMatcher = PATTERN_LEGACY_STACK_VERSION.matcher(stackVersion); if (!versionMatcher.find()) { - versionMatcher = PATTERN_LEGACY_STACK_VERSION.matcher(stackVersion); - if (!versionMatcher.find()) { - throw new IllegalArgumentException("Wrong format for stack version, should be N.N.N.N-N or N.N.N-hN-bN"); - } + throw new IllegalArgumentException("Wrong format for stack version, should be N.N.N.N-N or N.N.N-hN-bN"); } return versionMatcher; diff --git a/ambari-server/src/main/java/org/apache/ambari/server/utils/VersionUtils.java b/ambari-server/src/main/java/org/apache/ambari/server/utils/VersionUtils.java index 6a3d81c..4d1e302 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/utils/VersionUtils.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/utils/VersionUtils.java @@ -20,7 +20,10 @@ package org.apache.ambari.server.utils; import java.util.ArrayList; import java.util.List; +import javax.annotation.Nullable; + import org.apache.ambari.server.bootstrap.BootStrapImpl; + import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; @@ -253,7 +256,15 @@ public class VersionUtils { compare = v2 - v1; return Integer.compare(compare, 0); - } + /** + * Helper function to compare two comparable versions with null checks + * @param v1 The first version + * @param v2 The second version + * @return 0 if both are equal, <0 if first one is lower, >0 otherwise + */ + public static int compareTo(@Nullable Comparable v1, @Nullable Comparable v2) { + return v1 == null ? (v2 == null ? 0 : -1) : v2 == null ? 1 : v1.compareTo(v2); + } } diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java index 85686e2..4b996e5 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java @@ -2225,7 +2225,7 @@ public class AmbariManagementControllerImplTest { MpackRequest mpackRequest = createNiceMock(MpackRequest.class); RequestStatusResponse response = new RequestStatusResponse(new Long(201)); Mpack mpack = new Mpack(); - mpack.setMpackId((long)100); + mpack.setResourceId((long)100); mpack.setModules(new ArrayList<Module>()); mpack.setPrerequisites(new HashMap<String, String>()); mpack.setRegistryId(new Long(100)); diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/MpackRequestTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/MpackRequestTest.java index 694c499..6c48906 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/MpackRequestTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/MpackRequestTest.java @@ -29,7 +29,7 @@ public class MpackRequestTest { public void testBasicGetAndSet() { MpackRequest mpackRequest = new MpackRequest(1L); - Assert.assertEquals((Long)1L, mpackRequest.getMpackId()); + Assert.assertEquals((Long)1L, mpackRequest.getId()); mpackRequest.setMpackUri("abc.tar.gz"); mpackRequest.setRegistryId(1L); mpackRequest.setMpackVersion("3.0"); diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/MpackResponseTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/MpackResponseTest.java index 9273a04..0b60e10 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/MpackResponseTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/MpackResponseTest.java @@ -32,7 +32,7 @@ public class MpackResponseTest { @Test public void testBasicGetAndSet() { MpackResponse mpackResponse = new MpackResponse(setupMpack()); - Assert.assertEquals((Long)100L, mpackResponse.getMpackId()); + Assert.assertEquals((Long)100L, mpackResponse.getId()); Assert.assertEquals((Long)100L, mpackResponse.getRegistryId()); Assert.assertEquals("3.0",mpackResponse.getMpackVersion()); Assert.assertEquals("abc.tar.gz",mpackResponse.getMpackUri()); @@ -41,7 +41,7 @@ public class MpackResponseTest { } public Mpack setupMpack() { Mpack mpack = new Mpack(); - mpack.setMpackId(100L); + mpack.setResourceId(100L); mpack.setModules(new ArrayList<Module>()); mpack.setPrerequisites(new HashMap<String, String>()); mpack.setRegistryId(100L); diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/RegistryRequestTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/RegistryRequestTest.java index c61cafb..fb10760 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/RegistryRequestTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/RegistryRequestTest.java @@ -28,9 +28,9 @@ public class RegistryRequestTest { @Test public void testBasicGetAndSet() { RegistryRequest registryRequest = - new RegistryRequest((Long) 1L, "hwx", RegistryType.JSON, "abc.tar.gz"); + new RegistryRequest((Long) 1L, "hwx", RegistryType.JSON, "hwx-software-registry.json"); Assert.assertEquals((Long) 1L, registryRequest.getRegistryId()); - Assert.assertEquals("abc.tar.gz", registryRequest.getRegistryUri()); + Assert.assertEquals("hwx-software-registry.json", registryRequest.getRegistryUri()); Assert.assertEquals("hwx", registryRequest.getRegistryName()); Assert.assertEquals(RegistryType.JSON, registryRequest.getRegistryType()); } diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/MpackResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/MpackResourceProviderTest.java index 6faec3a..bb1dbec 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/MpackResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/MpackResourceProviderTest.java @@ -76,14 +76,14 @@ public class MpackResourceProviderTest { Resource.Type type = Resource.Type.Mpack; Resource resourceExpected1 = new ResourceImpl(Resource.Type.Mpack); - resourceExpected1.setProperty(MpackResourceProvider.MPACK_ID, (long)1); + resourceExpected1.setProperty(MpackResourceProvider.MPACK_RESOURCE_ID, (long)1); resourceExpected1.setProperty(MpackResourceProvider.MPACK_NAME, "TestMpack1"); resourceExpected1.setProperty(MpackResourceProvider.MPACK_VERSION, "3.0"); resourceExpected1.setProperty(MpackResourceProvider.MPACK_URI, "abcd.tar.gz"); resourceExpected1.setProperty(MpackResourceProvider.REGISTRY_ID, null); Resource resourceExpected2 = new ResourceImpl(Resource.Type.Mpack); - resourceExpected2.setProperty(MpackResourceProvider.MPACK_ID, (long)2); + resourceExpected2.setProperty(MpackResourceProvider.MPACK_RESOURCE_ID, (long)2); resourceExpected2.setProperty(MpackResourceProvider.MPACK_NAME, "TestMpack2"); resourceExpected2.setProperty(MpackResourceProvider.MPACK_VERSION, "3.0"); resourceExpected2.setProperty(MpackResourceProvider.MPACK_URI, "abc.tar.gz"); @@ -91,14 +91,14 @@ public class MpackResourceProviderTest { List<MpackEntity> entities = new ArrayList<>(); MpackEntity entity = new MpackEntity(); - entity.setMpackId((long) 1); + entity.setId((long) 1); entity.setMpackUri("abcd.tar.gz"); entity.setMpackName("TestMpack1"); entity.setMpackVersion("3.0"); entities.add(entity); entity = new MpackEntity(); - entity.setMpackId((long) 2); + entity.setId((long) 2); entity.setMpackUri("abc.tar.gz"); entity.setMpackName("TestMpack2"); entity.setMpackVersion("3.0"); @@ -124,7 +124,7 @@ public class MpackResourceProviderTest { Assert.assertEquals(2, resources.size()); for (Resource resource : resources) { - Long mpackId = (Long) resource.getPropertyValue(MpackResourceProvider.MPACK_ID); + Long mpackId = (Long) resource.getPropertyValue(MpackResourceProvider.MPACK_RESOURCE_ID); if (mpackId == (long) 1) { Assert.assertEquals(resourceExpected1.getPropertyValue(MpackResourceProvider.MPACK_NAME), (String) resource.getPropertyValue(MpackResourceProvider.MPACK_NAME)); Assert.assertEquals(resourceExpected1.getPropertyValue(MpackResourceProvider.MPACK_VERSION), (String) resource.getPropertyValue(MpackResourceProvider.MPACK_VERSION)); @@ -149,11 +149,11 @@ public class MpackResourceProviderTest { Resource.Type type = Resource.Type.Mpack; Predicate predicate = new PredicateBuilder().property( - MpackResourceProvider.MPACK_ID).equals( + MpackResourceProvider.MPACK_RESOURCE_ID).equals( Long.valueOf(1).toString()).toPredicate(); MpackEntity entity = new MpackEntity(); - entity.setMpackId((long) 1); + entity.setId((long) 1); entity.setMpackUri("abcd.tar.gz"); entity.setMpackName("TestMpack1"); entity.setMpackVersion("3.0"); @@ -168,7 +168,7 @@ public class MpackResourceProviderTest { packletArrayList.add(module); Resource resourceExpected1 = new ResourceImpl(Resource.Type.Mpack); - resourceExpected1.setProperty(MpackResourceProvider.MPACK_ID, (long)1); + resourceExpected1.setProperty(MpackResourceProvider.MPACK_RESOURCE_ID, (long)1); resourceExpected1.setProperty(MpackResourceProvider.MPACK_NAME, "TestMpack1"); resourceExpected1.setProperty(MpackResourceProvider.MPACK_VERSION, "3.0"); resourceExpected1.setProperty(MpackResourceProvider.MPACK_URI, "abcd.tar.gz"); @@ -233,7 +233,7 @@ public class MpackResourceProviderTest { Assert.assertEquals(1,associatedResources.size()); for(Resource r : associatedResources){ - Assert.assertEquals((long)100,r.getPropertyValue(MpackResourceProvider.MPACK_ID)); + Assert.assertEquals((long)100,r.getPropertyValue(MpackResourceProvider.MPACK_RESOURCE_ID)); Assert.assertEquals("testMpack",r.getPropertyValue(MpackResourceProvider.MPACK_NAME)); Assert.assertEquals("3.0",r.getPropertyValue(MpackResourceProvider.MPACK_VERSION)); Assert.assertEquals("../../../../../../../resources/mpacks-v2/abc.tar.gz",r.getPropertyValue(MpackResourceProvider.MPACK_URI)); @@ -250,7 +250,7 @@ public class MpackResourceProviderTest { public Mpack setupMpack() { Mpack mpack = new Mpack(); - mpack.setMpackId((long)100); + mpack.setResourceId((long)100); mpack.setModules(new ArrayList<Module>()); mpack.setPrerequisites(new HashMap<String, String>()); mpack.setRegistryId(new Long(100)); diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/MpackDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/MpackDAOTest.java index 64dae36..cc36b48 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/MpackDAOTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/MpackDAOTest.java @@ -56,7 +56,7 @@ public class MpackDAOTest { // create 2 definitions for (int i = 1; i < 3; i++) { MpackEntity definition = new MpackEntity(); - definition.setMpackId(new Long(100)+i); + definition.setId(new Long(100)+i); definition.setMpackName("testMpack" + i); definition.setRegistryId(Long.valueOf(i)); definition.setMpackVersion("3.0.0.0-12"+i); @@ -70,7 +70,7 @@ public class MpackDAOTest { assertEquals(2, definitions.size()); definitions = m_dao.findByNameVersion("testMpack1","3.0.0.0-121"); assertEquals(1, definitions.size()); - assertEquals(new Long(101),(Long)definitions.get(0).getMpackId()); + assertEquals(new Long(101),(Long)definitions.get(0).getId()); MpackEntity entity = m_dao.findById(new Long(102)); assertEquals(entity.getMpackName(),"testMpack2"); assertEquals(entity.getMpackVersion(),"3.0.0.0-122"); diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/MpackEntityTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/MpackEntityTest.java index 87ac934..d2d2476 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/MpackEntityTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/MpackEntityTest.java @@ -38,12 +38,12 @@ public class MpackEntityTest { Assert.assertEquals(entity1.hashCode(), entity2.hashCode()); Assert.assertTrue(Objects.equals(entity1, entity2)); - entity1.setMpackId(new Long(1)); - entity2.setMpackId(new Long(2)); + entity1.setId(new Long(1)); + entity2.setId(new Long(2)); Assert.assertNotSame(entity1.hashCode(), entity2.hashCode()); Assert.assertFalse(Objects.equals(entity1, entity2)); - entity2.setMpackId(new Long(1)); + entity2.setId(new Long(1)); Assert.assertEquals(entity1.hashCode(), entity2.hashCode()); Assert.assertTrue(Objects.equals(entity1, entity2)); diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/MpackTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/MpackTest.java index 9184ca5..8523508 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/MpackTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/state/MpackTest.java @@ -30,14 +30,14 @@ public class MpackTest { public void testMpacks() { Mpack mpack = new Mpack(); mpack.setName("name"); - mpack.setMpackId((long)100); + mpack.setResourceId((long)100); mpack.setDescription("desc"); mpack.setVersion("3.0"); mpack.setMpackUri("abc.tar.gz"); mpack.setRegistryId(new Long(100)); Assert.assertEquals("name", mpack.getName()); - Assert.assertEquals(new Long(100), mpack.getMpackId()); + Assert.assertEquals(new Long(100), mpack.getResourceId()); Assert.assertEquals("desc", mpack.getDescription()); Assert.assertEquals("abc.tar.gz", mpack.getMpackUri()); Assert.assertEquals(new Long(100), mpack.getRegistryId()); diff --git a/ambari-server/src/test/java/org/apache/ambari/server/utils/TestVersionUtils.java b/ambari-server/src/test/java/org/apache/ambari/server/utils/TestVersionUtils.java index 08c0a06..ebb7278 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/utils/TestVersionUtils.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/utils/TestVersionUtils.java @@ -277,17 +277,41 @@ public class TestVersionUtils { Assert.assertEquals(-1, MpackVersion.parse("1.2.3-h0-b10").compareTo(MpackVersion.parse("2.2.3-b10"))); Assert.assertEquals(-1, MpackVersion.parse("1.2.3-h0-b10").compareTo(MpackVersion.parse("1.2.3-h1-b10"))); Assert.assertEquals(-1, MpackVersion.parse("1.2.3-h0-b10").compareTo(MpackVersion.parse("1.2.3-h0-b11"))); + + Assert.assertEquals(0, MpackVersion.parse("1", false).compareTo(MpackVersion.parse("1.0.0-h0-b0"))); + Assert.assertEquals(0, MpackVersion.parse("1.0", false).compareTo(MpackVersion.parse("1.0.0-h0-b0"))); + Assert.assertEquals(0, MpackVersion.parse("1.0.0", false).compareTo(MpackVersion.parse("1.0.0-h0-b0"))); + Assert.assertEquals(0, MpackVersion.parse("1.0.0-b0", false).compareTo(MpackVersion.parse("1.0.0-h0-b0"))); + Assert.assertEquals(0, MpackVersion.parse("1.0.0-h0-b0", false).compareTo(MpackVersion.parse("1.0.0-h0-b0"))); + + Assert.assertEquals(-1, MpackVersion.parse("1", false).compareTo(MpackVersion.parse("1.0.0-h0-b111"))); + Assert.assertEquals(-1, MpackVersion.parse("1.0", false).compareTo(MpackVersion.parse("1.0.0-h0-b111"))); + Assert.assertEquals(-1, MpackVersion.parse("1.0.0", false).compareTo(MpackVersion.parse("1.0.0-h0-b111"))); + Assert.assertEquals(-1, MpackVersion.parse("1.0.0-b0", false).compareTo(MpackVersion.parse("1.0.0-h0-b111"))); + Assert.assertEquals(-1, MpackVersion.parse("1.0.0-h0-b0", false).compareTo(MpackVersion.parse("1.0.0-h0-b111"))); + + Assert.assertEquals(1, MpackVersion.parse("2", false).compareTo(MpackVersion.parse("1.0.0-h0-b111"))); + Assert.assertEquals(1, MpackVersion.parse("1.1", false).compareTo(MpackVersion.parse("1.0.0-h0-b111"))); + Assert.assertEquals(1, MpackVersion.parse("1.0.1", false).compareTo(MpackVersion.parse("1.0.0-h0-b111"))); } @Test public void testStackVersionWithValidVersions() { Assert.assertEquals(1, MpackVersion.parse("1.2.3-h10-b10").compareTo(MpackVersion.parseStackVersion("1.2.3.4-888"))); - Assert.assertEquals(1, MpackVersion.parseStackVersion("1.2.3-h10-b10").compareTo(MpackVersion.parseStackVersion("1.2.3.4-888"))); + Assert.assertEquals(1, MpackVersion.parse("1.2.4-h1-b1").compareTo(MpackVersion.parseStackVersion("1.2.3.4-888"))); + Assert.assertEquals(1, MpackVersion.parse("1.3.3-h1-b1").compareTo(MpackVersion.parseStackVersion("1.2.3.4-888"))); + Assert.assertEquals(1, MpackVersion.parse("2.2.3-h1-b1").compareTo(MpackVersion.parseStackVersion("1.2.3.4-888"))); + + Assert.assertEquals(0, MpackVersion.parse("1.2.3-h4-b888").compareTo(MpackVersion.parseStackVersion("1.2.3.4-888"))); + Assert.assertEquals(-1, MpackVersion.parse("1.2.3-h10-b10").compareTo(MpackVersion.parseStackVersion("1.2.3.11-888"))); + Assert.assertEquals(-1, MpackVersion.parse("1.2.3-h10-b10").compareTo(MpackVersion.parseStackVersion("1.2.4.1-1"))); + Assert.assertEquals(-1, MpackVersion.parse("1.2.3-h10-b10").compareTo(MpackVersion.parseStackVersion("1.3.3.1-1"))); + Assert.assertEquals(-1, MpackVersion.parse("1.2.3-h10-b10").compareTo(MpackVersion.parseStackVersion("2.2.3.1-1"))); + Assert.assertEquals(1, MpackVersion.parseStackVersion("1.2.3.4-999").compareTo(MpackVersion.parseStackVersion("1.2.3.4-888"))); - Assert.assertEquals(0, MpackVersion.parseStackVersion("1.2.3-h10-b10").compareTo(MpackVersion.parseStackVersion("1.2.3-h10-b10"))); - Assert.assertEquals(0, MpackVersion.parseStackVersion("1.2.3-h10-b10").compareTo(MpackVersion.parseStackVersion("1.2.3.10-10"))); - Assert.assertEquals(-1, MpackVersion.parse("1.2.3-h10-b10").compareTo(MpackVersion.parseStackVersion("2.2.3.4-888"))); + Assert.assertEquals(0, MpackVersion.parseStackVersion("1.2.3.4-999").compareTo(MpackVersion.parseStackVersion("1.2.3.4-999"))); + Assert.assertEquals(-1, MpackVersion.parseStackVersion("1.2.3.1-999").compareTo(MpackVersion.parseStackVersion("1.2.3.4-888"))); } @Test -- To stop receiving notification emails like this one, please contact jlun...@apache.org.