This is an automated email from the ASF dual-hosted git repository. mradhakrishnan pushed a commit to branch AMBARI-24711 in repository https://gitbox.apache.org/repos/asf/ambari.git
commit a77b2f93bc260e1513cd247079c6bcec70ed0382 Author: jayush <[email protected]> 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 ++--- .../ambari/server/controller/MpackRequest.java | 24 ++--- .../ambari/server/controller/MpackResponse.java | 75 +++++++------ .../controller/internal/MpackResourceProvider.java | 51 +++++---- .../apache/ambari/server/mpack/MpackManager.java | 61 +++++------ .../org/apache/ambari/server/orm/dao/MpackDAO.java | 14 +-- .../ambari/server/orm/entities/MpackEntity.java | 20 ++-- .../java/org/apache/ambari/server/state/Mpack.java | 117 +++++++-------------- .../apache/ambari/server/utils/MpackVersion.java | 83 ++++++++++++--- .../apache/ambari/server/utils/VersionUtils.java | 13 ++- .../AmbariManagementControllerImplTest.java | 2 +- .../ambari/server/controller/MpackRequestTest.java | 4 +- .../server/controller/MpackResponseTest.java | 8 +- .../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 +++++- 19 files changed, 309 insertions(+), 255 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 c9560ab..3875135 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 @@ -86,7 +86,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 c69ed01..4694841 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 @@ -79,7 +79,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, @@ -129,13 +129,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) @@ -151,14 +151,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({ @@ -172,19 +172,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/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 7d44c76..bc1e47d 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 @@ -28,86 +28,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.mpackVersion = mpack.getVersion(); - this.mpackUri = mpack.getMpacksUri(); this.mpackName = mpack.getName(); + this.mpackVersion = mpack.getVersion(); + this.mpackUri = mpack.getMpackUri(); 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; } @@ -120,7 +127,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/internal/MpackResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MpackResourceProvider.java index 3771258..3169eda 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); @@ -145,11 +147,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); @@ -199,22 +202,23 @@ 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)); } - //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; - } + @Override public Set<Resource> getResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, @@ -231,11 +235,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); } @@ -251,11 +256,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); @@ -265,21 +271,22 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider { return results; } - if (propertyMap.containsKey(MPACK_ID)) { - Object objMpackId = propertyMap.get(MPACK_ID); - if(objMpackId != null) + 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); } @@ -307,8 +314,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/mpack/MpackManager.java b/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackManager.java index 29b59b3..123b587 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 @@ -126,9 +126,10 @@ public class MpackManager { "UTF-8"); Gson gson = new Gson(); Mpack existingMpack = gson.fromJson(mpackJsonContents, Mpack.class); - existingMpack.setMpackId(mpackEntity.getMpackId()); - existingMpack.setMpacksUri(mpackEntity.getMpackUri()); - mpackMap.put(mpackEntity.getMpackId(), existingMpack); + existingMpack.setResourceId(mpackEntity.getId()); + existingMpack.setMpackUri(mpackEntity.getMpackUri()); + existingMpack.setRegistryId(mpackEntity.getRegistryId()); + mpackMap.put(mpackEntity.getId(), existingMpack); } } } @@ -163,7 +164,7 @@ public class MpackManager { public MpackResponse registerMpack(MpackRequest mpackRequest) throws IOException, IllegalArgumentException, ResourceAlreadyExistsException { - Long mpackId; + Long mpackResourceId; String mpackName = ""; String mpackVersion = ""; mpack = new Mpack(); @@ -175,27 +176,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 = mpackStaging + 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()); @@ -208,13 +207,14 @@ public class MpackManager { } } extractMpackTar(mpack, mpackTarPath, mpackDirectory); - mpackId = populateDB(mpack); - - if (mpackId != null) { - mpackMap.put(mpackId, mpack); - mpack.setMpackId(mpackId); - if (populateStackDB(mpack)) - return new MpackResponse(mpack); + mpack.setMpackUri(mpackRequest.getMpackUri()); + mpackResourceId = populateDB(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"; @@ -476,9 +476,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 (" @@ -504,7 +503,7 @@ public class MpackManager { MpackEntity mpackEntity = new MpackEntity(); mpackEntity.setMpackName(mpackName); mpackEntity.setMpackVersion(mpackVersion); - mpackEntity.setMpackUri(mpack.getMpacksUri()); + mpackEntity.setMpackUri(mpack.getMpackUri()); mpackEntity.setRegistryId(mpack.getRegistryId()); Long mpackId = mpackDAO.create(mpackEntity); return mpackId; @@ -520,7 +519,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); @@ -529,14 +528,12 @@ public class MpackManager { stackEntity = new StackEntity(); 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); } } @@ -568,7 +565,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 fb4e101..d0068c2 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 @@ -53,19 +53,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); } /** @@ -96,8 +96,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 ed5aa6e..d555f91 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 @@ -40,7 +40,7 @@ import java.util.Objects; @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")}) @@ -49,7 +49,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; @@ -63,8 +63,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() { @@ -83,8 +83,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) { @@ -120,7 +120,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(); @@ -129,7 +129,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/> @@ -137,7 +137,7 @@ public class MpackEntity { */ @Override public int hashCode() { - return Objects.hash(mpackId, mpackName, mpackVersion); + return Objects.hash(id, mpackName, mpackVersion); } /** @@ -146,7 +146,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/state/Mpack.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Mpack.java index 1bdd394..233cd95 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 java.util.List; */ 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 HashMap<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() { @@ -79,12 +77,20 @@ public class Mpack { this.registryId = registryId; } - public String getMpacksUri() { + public String getMpackUri() { return mpackUri; } - public void setMpacksUri(String mpacksUri) { - this.mpackUri = mpacksUri; + public void setMpackUri(String mpackUri) { + this.mpackUri = mpackUri; + } + + public String getMpackId() { + return mpackId; + } + + public void setMpackId(String mpackId) { + this.mpackId = mpackId; } public String getName() { @@ -127,39 +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; } @@ -175,16 +148,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); @@ -192,16 +162,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(); @@ -211,16 +178,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 + '\'' + @@ -228,15 +192,17 @@ public class Mpack { } public void copyFrom(Mpack mpack) { - if (this.name == null) + if (this.resourceId == null) { + this.resourceId = mpack.getResourceId(); + } + if (this.name == null) { this.name = mpack.getName(); if (this.mpackId == null) this.mpackId = mpack.getMpackId(); if (this.version == null) this.version = mpack.getVersion(); - if (this.stackId == null) { - this.stackId = mpack.getStackId(); - if (this.registryId == null) + } + if (this.registryId == null) { this.registryId = mpack.getRegistryId(); if (this.description == null) this.description = mpack.getDescription(); @@ -244,18 +210,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 f30e030..1e06d18 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 @@ -2452,7 +2452,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 e858e54..630fb15 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 @@ -28,8 +28,8 @@ public class MpackRequestTest { @Test public void testBasicGetAndSet() { MpackRequest mpackRequest = - new MpackRequest(new Long(1)); - Assert.assertEquals("1", mpackRequest.getMpackId()); + new MpackRequest(1L); + Assert.assertEquals((Long)1L, mpackRequest.getId()); mpackRequest.setMpackUri("abc.tar.gz"); mpackRequest.setRegistryId(new Long(1)); 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 22bcce7..3ef98c6 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 @@ -36,8 +36,8 @@ public class MpackResponseTest { @Test public void testBasicGetAndSet() { MpackResponse mpackResponse = new MpackResponse(setupMpack()); - Assert.assertEquals(new Long(100), mpackResponse.getMpackId()); - Assert.assertEquals("100",mpackResponse.getRegistryId()); + 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()); Assert.assertEquals("testMpack", mpackResponse.getMpackName()); @@ -46,12 +46,12 @@ 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); mpack.setVersion("3.0"); - mpack.setMpacksUri("abc.tar.gz"); + mpack.setMpackUri("abc.tar.gz"); mpack.setDescription("Test mpack"); mpack.setName("testMpack"); 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 f3b5aad..f453684 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 @@ -90,14 +90,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"); @@ -105,14 +105,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"); @@ -138,7 +138,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)); @@ -163,11 +163,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"); @@ -182,7 +182,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"); @@ -248,7 +248,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)); @@ -266,7 +266,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 7b45815..f589fe8 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 @@ -53,7 +53,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); @@ -67,7 +67,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 7948111..4677837 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 c561a7a..e478968 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.setMpacksUri("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.getMpacksUri()); 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
