From f63f6df47995536291887e1bf025d728f03b4a10 Mon Sep 17 00:00:00 2001 From: Dinithi Date: Fri, 15 May 2015 16:52:59 +0530 Subject: [PATCH 1/4] Status code changed to 200 in updateServiceGroup --- .../org/apache/stratos/rest/endpoint/api/StratosApiV41.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java index 18068f8678..b1450f488a 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java @@ -485,7 +485,7 @@ public Response updateServiceGroup( StratosApiV41Utils.updateServiceGroup(cartridgeGroup); URI url = uriInfo.getAbsolutePathBuilder().path(cartridgeGroup.getName()).build(); - return Response.created(url).entity(new ResponseMessageBean(ResponseMessageBean.SUCCESS, + return Response.ok(url).entity(new ResponseMessageBean(ResponseMessageBean.SUCCESS, String.format("Cartridge group updated successfully: [cartridge-group] %s", cartridgeGroup.getName()))).build(); From 7070f1cd7f8ee0f2f7fa384f814209f39fa88698 Mon Sep 17 00:00:00 2001 From: reka Date: Mon, 18 May 2015 11:21:18 +0530 Subject: [PATCH 2/4] fixing load balancing ip type default issue --- .../cloud/controller/util/CloudControllerUtil.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java index 212ebeb81e..8906eec66d 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java @@ -148,6 +148,15 @@ public static void extractIaaSProvidersFromCartridge(Cartridge config) { } } } + + //Setting load balancing type + config.setLoadBalancingIPType(getLoadBalancingIPTypeStringFromEnum(LoadBalancingIPType.Private)); + if (StringUtils.isNotBlank(config.getLoadBalancingIPType())) { + if (config.getLoadBalancingIPType().equals("public")) { + config.setLoadBalancingIPType( + getLoadBalancingIPTypeStringFromEnum(LoadBalancingIPType.Public)); + } + } } public static void sleep(long time) { From e08a6b28201daedf22557188ff63951636f49544 Mon Sep 17 00:00:00 2001 From: Udara Liyanage Date: Mon, 18 May 2015 11:29:19 +0530 Subject: [PATCH 3/4] add DELETE applications/{app_id}/properties/{property_name} --- .../metadata/service/api/MetadataApi.java | 37 ++++++++--- .../service/registry/CarbonRegistry.java | 62 ++++++++++--------- .../metadata/service/registry/DataStore.java | 8 ++- 3 files changed, 70 insertions(+), 37 deletions(-) diff --git a/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/api/MetadataApi.java b/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/api/MetadataApi.java index 38002baa4e..dea5ebaf45 100644 --- a/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/api/MetadataApi.java +++ b/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/api/MetadataApi.java @@ -225,14 +225,32 @@ public Response deleteApplicationProperties(@PathParam("application_id") String throws RestAPIException { try { - boolean deleted = registry.deleteApplication(applicationId); + boolean deleted = registry.deleteApplicationProperties(applicationId); if (!deleted) { log.warn(String.format( - "Either no metadata is associated with given appId %s Or resources could not be deleted", + "No metadata is associated with given appId %s", applicationId)); } } catch (RegistryException e) { - String msg = "Resource attached with appId could not be deleted"; + String msg = "Resource attached with appId could not be deleted [application-id] " + applicationId; + log.error(msg, e); + throw new RestAPIException(msg, e); + } + return Response.ok().build(); + } + + @DELETE + @Path("applications/{application_id}/properties/{property_name}") + @Produces("application/json") + @Consumes("application/json") + public Response deleteApplicationProperty(@PathParam("application_id") String applicationId, @PathParam("property_name") String propertyName) + throws RestAPIException { + + try { + boolean deleted = registry.removePropertyFromApplication(applicationId, propertyName); + + } catch (RegistryException e) { + String msg = String.format("[application-id] %s [property-name] deletion failed ", applicationId, propertyName); log.error(msg, e); throw new RestAPIException(msg, e); } @@ -243,14 +261,19 @@ public Response deleteApplicationProperties(@PathParam("application_id") String @Path("applications/{application_id}/properties/{property_name}/value/{value}") @Produces("application/json") @Consumes("application/json") - public Response deleteApplicationPropertValue(@PathParam("application_id") String applicationId, @PathParam("property_name") String propertyName, - @PathParam("value") String propertyValue ) + public Response deleteApplicationPropertyValue(@PathParam("application_id") String applicationId, @PathParam("property_name") String propertyName, + @PathParam("value") String propertyValue) throws RestAPIException { try { - registry.removePropertyFromApplication(applicationId, propertyName, propertyValue); + boolean deleted = registry.removePropertyValueFromApplication(applicationId, propertyName, propertyValue); + if (!deleted) { + log.warn(String.format( + "No metadata is associated with given [application-id] %s", + applicationId)); + } } catch (RegistryException e) { - String msg = "Resource value deletion failed "; + String msg = String.format("[application-id] %s [property-name] %s [value] %s deletion failed" + applicationId, propertyName, propertyValue); log.error(msg, e); throw new RestAPIException(msg, e); } diff --git a/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/CarbonRegistry.java b/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/CarbonRegistry.java index ae28fd2160..f7eb0143c3 100644 --- a/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/CarbonRegistry.java +++ b/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/CarbonRegistry.java @@ -174,11 +174,10 @@ private boolean propertyValueExist(Resource nodeResource, String key, String val } - public boolean removePropertyFromApplication(String applicationId, String propertyName, String valueToRemove) throws RegistryException { + public boolean removePropertyValueFromApplication(String applicationId, String propertyName, String valueToRemove) throws RegistryException { Registry registry = getRegistry(); String resourcePath = mainResource + applicationId; - try { PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID); ctx.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); @@ -191,18 +190,11 @@ public boolean removePropertyFromApplication(String applicationId, String proper log.warn(String.format("Registry [resource] %s not found ", resourcePath)); return false; } - nodeResource.removePropertyValue(propertyName, valueToRemove); registry.put(resourcePath, nodeResource); registry.commitTransaction(); log.info(String.format("Application %s property %s value %s is removed from metadata ", applicationId, propertyName, valueToRemove)); - } catch (Exception e) { - String msg = "Failed to persist properties in registry: " + resourcePath; - registry.rollbackTransaction(); - log.error(msg, e); - throw new RegistryException(msg, e); - } return true; } @@ -219,12 +211,10 @@ public void addPropertyToCluster(String applicationId, String clusterId, Propert Registry registry = getRegistry(); String resourcePath = mainResource + applicationId + "/" + clusterId; - try { PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID); ctx.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); - registry.beginTransaction(); Resource nodeResource = null; if (registry.resourceExists(resourcePath)) { nodeResource = registry.get(resourcePath); @@ -238,17 +228,8 @@ public void addPropertyToCluster(String applicationId, String clusterId, Propert nodeResource.setProperty(property.getKey(), Arrays.asList(property.getValues())); registry.put(resourcePath, nodeResource); - registry.commitTransaction(); - log.info(String.format("Registry property is persisted: [resource-path] %s [Property Name] %s [Property Values] %s", resourcePath, property.getKey(), Arrays.asList(property.getValues()))); - - } catch (Exception e) { - String msg = "Failed to persist properties in registry: " + resourcePath; - registry.rollbackTransaction(); - log.error(msg, e); - throw new RegistryException(msg, e); - } } private UserRegistry getRegistry() throws RegistryException { @@ -262,7 +243,7 @@ private UserRegistry getRegistry() throws RegistryException { * @return True if resource exist and able to delete, else false. * @throws RegistryException */ - public boolean deleteApplication(String applicationId) throws RegistryException { + public boolean deleteApplicationProperties(String applicationId) throws RegistryException { if (StringUtils.isBlank(applicationId)) { throw new IllegalArgumentException("Application ID can not be null"); } @@ -271,22 +252,47 @@ public boolean deleteApplication(String applicationId) throws RegistryException ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID); ctx.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); - Registry registry = null; + Registry registry; String resourcePath = mainResource + applicationId; - try { + registry = getRegistry(); registry.beginTransaction(); if (registry.resourceExists(resourcePath)) { registry.delete(resourcePath); registry.commitTransaction(); - log.info(String.format("Application removed from registry %s", applicationId)); + log.info(String.format("Application [application-id ] properties removed from registry %s", applicationId)); return true; } - } catch (RegistryException e) { - registry.rollbackTransaction(); - log.error("Could not remove registry resource: [resource-path] " + resourcePath); - } + return false; } + public boolean removePropertyFromApplication(String applicationId, String propertyName) throws org.wso2.carbon.registry.api.RegistryException { + Registry registry = getRegistry(); + String resourcePath = mainResource + applicationId; + + PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID); + ctx.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + + Resource nodeResource; + if (registry.resourceExists(resourcePath)) { + nodeResource = registry.get(resourcePath); + if(nodeResource.getProperty(propertyName) == null) { + log.info(String.format("[application-id] %s does not have a property [property-name] %s ", applicationId, propertyName)); + return false; + }else{ + nodeResource.removeProperty(propertyName); + registry.put(resourcePath, nodeResource); + } + + }else { + log.error("Registry resource not not found at " + resourcePath); + return false; + } + + log.info(String.format("Application [application-id] %s property [property-name] %s removed from Registry ", applicationId, propertyName)); + return true; + } + } diff --git a/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/DataStore.java b/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/DataStore.java index dbdd6dfe96..c11a2b95b1 100644 --- a/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/DataStore.java +++ b/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/DataStore.java @@ -38,7 +38,11 @@ public List getClusterProperties(String applicationName, String cluste public void addPropertyToCluster(String applicationId, String clusterId, Property property) throws RegistryException; - public boolean deleteApplication(String applicationId) throws RegistryException; + public boolean deleteApplicationProperties(String applicationId) throws RegistryException; + + public boolean removePropertyFromApplication(String applicationId, String propertyName) throws RegistryException; + + public boolean removePropertyValueFromApplication(String applicationId, String propertyName, String valueToRemove) throws RegistryException; + - public boolean removePropertyFromApplication(String applicationId, String propertyName, String valueToRemove) throws RegistryException; } From 2207751a72388929105c83eb73c94be069847054 Mon Sep 17 00:00:00 2001 From: Dinithi Date: Mon, 18 May 2015 17:11:17 +0530 Subject: [PATCH 4/4] Display proper response messages in the CLI commands --- .../autoscaler/util/AutoscalerUtil.java | 5 +- .../org/apache/stratos/cli/RestClient.java | 48 ++++++++----------- .../impl/CloudControllerServiceImpl.java | 4 +- 3 files changed, 23 insertions(+), 34 deletions(-) diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java index b62d7c1fb4..ce71418e15 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java @@ -660,9 +660,8 @@ public static void validateApplicationPolicy(ApplicationPolicy applicationPolicy // network partitions should be added already if (null == CloudControllerServiceClient.getInstance(). getNetworkPartition(networkPartitionId)) { - String msg = String.format("Invalid Application Policy. " - + "Cause -> Network partition not found for network-partition-id : %s", - networkPartitionId); + String msg = String.format("Network partition not found : [network-partition-id] %s in " + + "[application-policy-id] %s", networkPartitionId,applicationPolicy.getId()); log.error(msg); throw new InvalidApplicationPolicyException(msg); } diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestClient.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestClient.java index 66fe9cbcb5..faf8bd6345 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestClient.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestClient.java @@ -31,12 +31,15 @@ import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.stratos.cli.utils.CliUtils; +import org.apache.stratos.common.beans.ResponseMessageBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.lang.reflect.Type; +import static org.apache.stratos.cli.utils.CliUtils.getHttpResponseString; + /** * This class has three types of methods * 1. doPost, doPut, doGet, doDelete @@ -164,14 +167,8 @@ public HttpResponse doPut(DefaultHttpClient httpClient, String resourcePath, Str public void deployEntity(String serviceEndpoint, String entityBody, String entityName) { try { - int responseCode = executePost(serviceEndpoint, entityBody); - if (responseCode == 201 || responseCode == 200) { - System.out.println(String.format("Successfully added %s", entityName)); - } else if (responseCode == 500) { - System.out.println("Internal server error occurred"); - } else if (responseCode == 409) { - System.out.println(String.format("Specified %s already exists",entityName)); - } + String responseMessage = executePost(serviceEndpoint, entityBody); + System.out.println(responseMessage); } catch (Exception e) { String message = String.format("Error in adding %s", entityName); System.out.println(message); @@ -198,14 +195,8 @@ public void undeployEntity(String serviceEndpoint, String entityName, String ent public void updateEntity(String serviceEndpoint, String entityBody, String entityName) { try { - int responseCode = executePut(serviceEndpoint, entityBody); - if (responseCode == 404) { - System.out.println(String.format("%s not found", StringUtils.capitalize(entityName))); - } else if (responseCode == 500) { - System.out.println("Internal server error occurred"); - } else if (responseCode >= 200 && responseCode < 300) { - System.out.println(String.format("Successfully updated %s", entityName)); - } + String responseMessage = executePut(serviceEndpoint, entityBody); + System.out.println(responseMessage); } catch (Exception e) { String message = String.format("Error in updating %s", entityName); System.out.println(message); @@ -275,16 +266,16 @@ public Object listEntity(String serviceEndpoint, Type type, String entityName) { } } - private int executePost(String serviceEndpoint, String postBody) throws IOException { + private String executePost(String serviceEndpoint, String postBody) throws IOException { DefaultHttpClient httpClient = new DefaultHttpClient(); try { HttpResponse response = doPost(httpClient, getBaseURL() + serviceEndpoint, postBody); + String result = getHttpResponseString(response); + + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + return gson.fromJson(result, ResponseMessageBean.class).getMessage(); - int responseCode = response.getStatusLine().getStatusCode(); - if (responseCode < 200 || responseCode >= 300) { - CliUtils.printError(response); - } - return responseCode; } finally { httpClient.getConnectionManager().shutdown(); } @@ -327,23 +318,22 @@ private String executeGet(String serviceEndpoint) throws Exception { CliUtils.printError(response); return null; } else { - return CliUtils.getHttpResponseString(response); + return getHttpResponseString(response); } } finally { httpClient.getConnectionManager().shutdown(); } } - private int executePut(String serviceEndpoint, String postBody) throws IOException { + private String executePut(String serviceEndpoint, String postBody) throws IOException { DefaultHttpClient httpClient = new DefaultHttpClient(); try { HttpResponse response = doPut(httpClient, getBaseURL() + serviceEndpoint, postBody); + String result = getHttpResponseString(response); - int responseCode = response.getStatusLine().getStatusCode(); - if (responseCode < 200 || responseCode >= 300) { - CliUtils.printError(response); - } - return responseCode; + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + return gson.fromJson(result, ResponseMessageBean.class).getMessage(); } finally { httpClient.getConnectionManager().shutdown(); } diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java index daa4d2b430..f7b44cb17f 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java @@ -1466,7 +1466,7 @@ public boolean removeNetworkPartition(String networkPartitionId) throws NetworkP handleNullObject(networkPartitionId, "Network Partition ID is null"); if (cloudControllerContext.getNetworkPartition(networkPartitionId) == null) { - String message = "Network partition not exists: [network-partiton-id] " + networkPartitionId; + String message = "Network partition not found: [network-partition-id] " + networkPartitionId; log.error(message); throw new NetworkPartitionNotExistsException(message); } @@ -1498,7 +1498,7 @@ public boolean updateNetworkPartition(NetworkPartition networkPartition) throws String networkPartitionID = networkPartition.getId(); if (cloudControllerContext.getNetworkPartition(networkPartitionID) == null) { - String message = "Network partition not exists: [network-partition-id] " + networkPartitionID; + String message = "Network partition not found: [network-partition-id] " + networkPartitionID; log.error(message); throw new NetworkPartitionNotExistsException(message); }