Updated Branches: refs/heads/master e03ac9844 -> a1dbda1ed
service deployment, undeployment and Rest api support Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/a1dbda1e Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/a1dbda1e Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/a1dbda1e Branch: refs/heads/master Commit: a1dbda1ed0c7f61235b2011597187936a330acb7 Parents: e03ac98 Author: Isuru <[email protected]> Authored: Fri Jan 10 13:15:33 2014 +0530 Committer: Isuru <[email protected]> Committed: Fri Jan 10 13:15:33 2014 +0530 ---------------------------------------------------------------------- .../stratos/manager/deploy/service/Service.java | 19 ++++- .../service/ServiceDeploymentManager.java | 79 ++++++++++++++++---- .../service/multitenant/MultiTenantService.java | 5 -- .../multitenant/lb/MultiTenantLBService.java | 5 -- .../ServiceAlreadyDeployedException.java | 49 ++++++++++++ .../rest/endpoint/services/ServiceUtils.java | 28 ++++++- .../rest/endpoint/services/StratosAdmin.java | 14 +++- 7 files changed, 169 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a1dbda1e/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java index 2dc29bc..fdac49f 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java @@ -19,7 +19,10 @@ package org.apache.stratos.manager.deploy.service; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.pojo.Property; +import org.apache.stratos.manager.client.CloudControllerServiceClient; import org.apache.stratos.manager.exception.ADCException; import org.apache.stratos.manager.exception.UnregisteredCartridgeException; import org.apache.stratos.manager.payload.BasicPayloadData; @@ -33,6 +36,8 @@ import java.io.Serializable; public abstract class Service implements Serializable { + private static Log log = LogFactory.getLog(Service.class); + private String type; private String autoscalingPolicyName; private String deploymentPolicyName; @@ -89,7 +94,19 @@ public abstract class Service implements Serializable { setPayloadData(payloadData); } - public abstract void undeploy (String clusterId) throws ADCException; + public void undeploy () throws ADCException { + + try { + CloudControllerServiceClient.getServiceClient().unregisterService(clusterId); + + } catch (Exception e) { + String errorMsg = "Error in unregistering service cluster with domain " + clusterId; + log.error(errorMsg); + throw new ADCException(errorMsg, e); + } + + log.info("Unregistered service with domain " + clusterId); + } public String getType() { return type; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a1dbda1e/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java index 195b0cf..7d3b7fb 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java @@ -28,12 +28,13 @@ import org.apache.stratos.cloud.controller.pojo.Properties; import org.apache.stratos.cloud.controller.pojo.Property; import org.apache.stratos.manager.client.AutoscalerServiceClient; import org.apache.stratos.manager.client.CloudControllerServiceClient; -import org.apache.stratos.manager.deploy.service.multitenant.lb.MultiTenantLBService; import org.apache.stratos.manager.deploy.service.multitenant.MultiTenantService; +import org.apache.stratos.manager.deploy.service.multitenant.lb.MultiTenantLBService; import org.apache.stratos.manager.exception.ADCException; +import org.apache.stratos.manager.exception.PersistenceManagerException; +import org.apache.stratos.manager.exception.ServiceAlreadyDeployedException; import org.apache.stratos.manager.exception.UnregisteredCartridgeException; -import org.apache.stratos.manager.manager.CartridgeSubscriptionManager; -import org.apache.stratos.manager.utils.PersistenceManager; +import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager; import org.apache.stratos.messaging.util.Constants; import java.util.ArrayList; @@ -42,11 +43,29 @@ import java.util.List; public class ServiceDeploymentManager { private static Log log = LogFactory.getLog(ServiceDeploymentManager.class); - private CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager(); public Service deployService (String type, String autoscalingPolicyName, String deploymentPolicyName, int tenantId, String tenantRange, String tenantDomain, String userName) - throws ADCException, UnregisteredCartridgeException { + throws ADCException, UnregisteredCartridgeException, ServiceAlreadyDeployedException { + + //check if already we have a Multitenant service deployed for the same type + DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager(); + + Service deployedService; + try { + deployedService = dataInsertionAndRetrievalManager.getService(type); + + } catch (PersistenceManagerException e) { + String errorMsg = "Error in checking if Service is available is PersistenceManager"; + log.error(errorMsg, e); + throw new ADCException(errorMsg, e); + } + + if (deployedService != null) { + String errorMsg = "There is an already deployed Service for type " + type; + log.error(errorMsg); + throw new ServiceAlreadyDeployedException(errorMsg, type); + } //get deployed Cartridge Definition information CartridgeInfo cartridgeInfo; @@ -283,25 +302,57 @@ public class ServiceDeploymentManager { service.deploy(); //persist Service - try { + /*try { PersistenceManager.persistService(service); } catch (Exception e) { String message = "Error getting info for " + type; log.error(message, e); throw new ADCException(message, e); + }*/ + + try { + dataInsertionAndRetrievalManager.persistService(service); + + } catch (PersistenceManagerException e) { + String errorMsg = "Error in persisting Service in PersistenceManager"; + log.error(errorMsg, e); + throw new ADCException(errorMsg, e); } + return service; } - public void undeployService (String clusterId) { + public void undeployService (String type) throws ADCException { - //TODO: - } - - private void configureLBDeployment() { - - - + DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager(); + + Service service; + try { + service = dataInsertionAndRetrievalManager.getService(type); + + } catch (PersistenceManagerException e) { + String errorMsg = "Error in checking if Service is available is PersistenceManager"; + log.error(errorMsg, e); + throw new ADCException(errorMsg, e); + } + + if (service == null) { + String errorMsg = "No service found for type " + type; + log.error(errorMsg); + throw new ADCException(errorMsg); + } + + // if service is found, undeploy + service.undeploy(); + + try { + dataInsertionAndRetrievalManager.removeService(type); + + } catch (PersistenceManagerException e) { + String errorMsg = "Error in removing Service from PersistenceManager"; + log.error(errorMsg, e); + throw new ADCException(errorMsg, e); + } } /*private void subscribeToLb(String cartridgeType, String lbAlias, http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a1dbda1e/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/MultiTenantService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/MultiTenantService.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/MultiTenantService.java index 65cbbb0..8dee8b6 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/MultiTenantService.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/MultiTenantService.java @@ -47,9 +47,4 @@ public class MultiTenantService extends Service { getPayloadData().getCompletePayloadData(), getTenantRange(), getHostName(), getAutoscalingPolicyName(), getDeploymentPolicyName(), null); } - - @Override - public void undeploy(String clusterId) throws ADCException { - - } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a1dbda1e/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java index 34b140c..07bb6f1 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java @@ -46,9 +46,4 @@ public class MultiTenantLBService extends Service { getPayloadData().getCompletePayloadData(), getTenantRange(), getHostName(), getAutoscalingPolicyName(), getDeploymentPolicyName(), null); } - - @Override - public void undeploy(String clusterId) throws ADCException { - //To change body of implemented methods use File | Settings | File Templates. - } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a1dbda1e/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/ServiceAlreadyDeployedException.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/ServiceAlreadyDeployedException.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/ServiceAlreadyDeployedException.java new file mode 100644 index 0000000..1e8fcff --- /dev/null +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/ServiceAlreadyDeployedException.java @@ -0,0 +1,49 @@ +/* + * 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.stratos.manager.exception; + +public class ServiceAlreadyDeployedException extends Exception { + + private static final long serialVersionUID = 1L; + + private final String message; + + private final String type; + + public ServiceAlreadyDeployedException (String message, String type, Throwable cause) { + super(message, cause); + this.message = message; + this.type = type; + } + + public ServiceAlreadyDeployedException (String message, String type) { + super(message); + this.message = message; + this.type = type; + } + + public String getMessage() { + return message; + } + + public String getType() { + return type; + } +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a1dbda1e/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java index c895029..2dcc03d 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java @@ -905,9 +905,17 @@ public class ServiceUtils { } } - static void unsubscribe(String alias, String tenantDomain) throws ADCException, NotSubscribedException { + static void unsubscribe(String alias, String tenantDomain) throws RestAPIException { - cartridgeSubsciptionManager.unsubscribeFromCartridge(tenantDomain, alias); + try { + cartridgeSubsciptionManager.unsubscribeFromCartridge(tenantDomain, alias); + + } catch (ADCException e) { + throw new RestAPIException(e); + + } catch (NotSubscribedException e) { + throw new RestAPIException(e); + } } /** @@ -920,13 +928,25 @@ public class ServiceUtils { * */ static void deployService (String cartridgeType, String alias, String autoscalingPolicy, String deploymentPolicy, - String tenantDomain, String tenantUsername, int tenantId, String clusterDomain, String clusterSubdomain, String tenantRange) { + String tenantDomain, String tenantUsername, int tenantId, String clusterDomain, String clusterSubdomain, String tenantRange) throws RestAPIException { log.info("Deploying service.."); try { serviceDeploymentManager.deployService(cartridgeType, autoscalingPolicy, deploymentPolicy, tenantId, tenantRange, tenantDomain, tenantUsername); + } catch (Exception e) { - e.printStackTrace(); + throw new RestAPIException(e); } } + static void undeployService (String serviceType) throws RestAPIException { + + try { + serviceDeploymentManager.undeployService(serviceType); + + } catch (Exception e) { + throw new RestAPIException(e); + } + + + } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a1dbda1e/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java index ba7ed9b..dd114cc 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java @@ -329,7 +329,7 @@ public class StratosAdmin extends AbstractAdmin { @Path("/cartridge/unsubscribe") @Consumes("application/json") @AuthorizationAction("/permission/protected/manage/monitor/tenants") - public void unsubscribe(String alias){ + public void unsubscribe(String alias) throws RestAPIException { try { ServiceUtils.unsubscribe(alias, getTenantDomain()); } catch (Exception exception) { @@ -689,6 +689,18 @@ public class StratosAdmin extends AbstractAdmin { serviceDefinitionBean.getTenantRange()); } + @DELETE + @Path("/service/definition/{serviceType}") + @Produces("application/json") + @Consumes("application/json") + @AuthorizationAction("/permission/protected/manage/monitor/tenants") + @SuperTenantService(true) + public void unDeployService (@PathParam("serviceType") String serviceType) + throws RestAPIException { + + ServiceUtils.undeployService(serviceType); + } + private List<TenantInfoBean> getAllTenants() throws Exception { TenantManager tenantManager = ServiceHolder.getTenantManager();
