You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2015/06/19 14:57:59 UTC

[2/5] stratos git commit: Fix Exception handling in addCartridgeGroup methos

Fix Exception handling in addCartridgeGroup methos


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/90dc63ea
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/90dc63ea
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/90dc63ea

Branch: refs/heads/master
Commit: 90dc63ea0ff829b35bce8ea05e24e7927ed45d80
Parents: a6f6251
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Fri Jun 19 17:25:26 2015 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Fri Jun 19 17:26:05 2015 +0530

----------------------------------------------------------------------
 .../rest/endpoint/api/StratosApiV41.java        |  22 ++-
 .../rest/endpoint/api/StratosApiV41Utils.java   | 145 +++++++++----------
 .../exception/InvalidCartridgeException.java    |  70 +++++++++
 3 files changed, 151 insertions(+), 86 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/90dc63ea/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
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 89af1a4..9fd893d 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
@@ -467,7 +467,7 @@ public class StratosApiV41 extends AbstractApi {
     public Response addCartridgeGroup(
             CartridgeGroupBean cartridgeGroupBean) throws RestAPIException {
         try {
-            StratosApiV41Utils.addServiceGroup(cartridgeGroupBean);
+            StratosApiV41Utils.addCartridgeGroup(cartridgeGroupBean);
             URI url = uriInfo.getAbsolutePathBuilder().path(cartridgeGroupBean.getName()).build();
 
             return Response.created(url).entity(new ResponseMessageBean(ResponseMessageBean.SUCCESS,
@@ -476,17 +476,15 @@ public class StratosApiV41 extends AbstractApi {
         } catch (InvalidCartridgeGroupDefinitionException e) {
             return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean(
                     ResponseMessageBean.ERROR, e.getMessage())).build();
-        } catch (RestAPIException e) {
-            if (e.getCause().getMessage().contains("already exists")) {
-                return Response.status(Response.Status.CONFLICT).entity(new ResponseMessageBean(
-                        ResponseMessageBean.ERROR, "Cartridge group not found")).build();
-            } else if (e.getCause().getMessage().contains("Invalid Service Group") || e.getCause().getMessage()
-                    .contains("Required cartridges not found")) {
-                return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean(
-                        ResponseMessageBean.ERROR, e.getCause().getMessage())).build();
-            } else {
-                throw e;
-            }
+        } catch (ServiceGroupDefinitionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean(
+                    ResponseMessageBean.ERROR, e.getMessage())).build();
+        } catch (AutoscalerServiceInvalidServiceGroupExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean(
+                    ResponseMessageBean.ERROR, e.getFaultMessage().getInvalidServiceGroupException().getMessage())).build();
+        } catch (CloudControllerServiceCartridgeNotFoundExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean(
+                    ResponseMessageBean.ERROR, e.getMessage())).build();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/90dc63ea/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index 72ad2b1..05e824a 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -924,102 +924,98 @@ public class StratosApiV41Utils {
      * @throws InvalidCartridgeGroupDefinitionException
      * @throws RestAPIException
      */
-    public static void addServiceGroup(CartridgeGroupBean serviceGroupDefinition)
-            throws InvalidCartridgeGroupDefinitionException, RestAPIException {
-        try {
-            if (serviceGroupDefinition == null) {
-                throw new RuntimeException("Cartridge group definition is null");
-            }
+    public static void addCartridgeGroup(CartridgeGroupBean serviceGroupDefinition)
+            throws InvalidCartridgeGroupDefinitionException, ServiceGroupDefinitionException, RestAPIException,
+            CloudControllerServiceCartridgeNotFoundExceptionException,
+            AutoscalerServiceInvalidServiceGroupExceptionException {
 
-            List<String> cartridgeTypes = new ArrayList<String>();
-            String[] cartridgeNames = null;
-            List<String> groupNames;
-            String[] cartridgeGroupNames;
+        if (serviceGroupDefinition == null) {
+            throw new RuntimeException("Cartridge group definition is null");
+        }
 
-            if (log.isDebugEnabled()) {
-                log.debug("Checking cartridges in cartridge group " + serviceGroupDefinition.getName());
-            }
+        List<String> cartridgeTypes = new ArrayList<String>();
+        String[] cartridgeNames = null;
+        List<String> groupNames;
+        String[] cartridgeGroupNames;
 
-            findCartridgesInGroupBean(serviceGroupDefinition, cartridgeTypes);
+        if (log.isDebugEnabled()) {
+            log.debug("Checking cartridges in cartridge group " + serviceGroupDefinition.getName());
+        }
 
-            //validate the group definition to check if cartridges duplicate in any groups defined
-            validateCartridgeDuplicationInGroupDefinition(serviceGroupDefinition);
+        findCartridgesInGroupBean(serviceGroupDefinition, cartridgeTypes);
 
-            //validate the group definition to check if groups duplicate in any groups and
-            //validate the group definition to check for cyclic group behaviour
-            validateGroupDuplicationInGroupDefinition(serviceGroupDefinition);
+        //validate the group definition to check if cartridges duplicate in any groups defined
+        validateCartridgeDuplicationInGroupDefinition(serviceGroupDefinition);
 
-            CloudControllerServiceClient ccServiceClient = getCloudControllerServiceClient();
+        //validate the group definition to check if groups duplicate in any groups and
+        //validate the group definition to check for cyclic group behaviour
+        validateGroupDuplicationInGroupDefinition(serviceGroupDefinition);
 
-            cartridgeNames = new String[cartridgeTypes.size()];
-            int j = 0;
-            for (String cartridgeType : cartridgeTypes) {
-                try {
-                    if (ccServiceClient.getCartridge(cartridgeType) == null) {
-                        // cartridge is not deployed, can't continue
-                        log.error("Invalid cartridge found in cartridge group " + cartridgeType);
-                        throw new RestAPIException("No Cartridge Definition found with type " + cartridgeType);
-                    } else {
-                        cartridgeNames[j] = cartridgeType;
-                        j++;
-                    }
-                } catch (RemoteException e) {
-                    String message = "Could not add the cartridge group: " + serviceGroupDefinition.getName();
-                    log.error(message, e);
-                    throw new RestAPIException(message, e);
-                } catch (CloudControllerServiceCartridgeNotFoundExceptionException e) {
-                    String message = "Required cartridges not found";
-                    log.error(message, e);
-                    throw new RestAPIException(message, e);
+        CloudControllerServiceClient ccServiceClient = getCloudControllerServiceClient();
+
+        cartridgeNames = new String[cartridgeTypes.size()];
+        int j = 0;
+        for (String cartridgeType : cartridgeTypes) {
+            try {
+                if (ccServiceClient.getCartridge(cartridgeType) == null) {
+                    // cartridge is not deployed, can't continue
+                    log.error("Invalid cartridge found in cartridge group " + cartridgeType);
+                    throw new InvalidCartridgeException();
+                } else {
+                    cartridgeNames[j] = cartridgeType;
+                    j++;
                 }
+            } catch (RemoteException e) {
+                String message = "Could not add the cartridge group: " + serviceGroupDefinition.getName();
+                log.error(message, e);
+                throw new RestAPIException(message, e);
             }
+        }
 
 
-            // if any sub groups are specified in the group, they should be already deployed
-            if (serviceGroupDefinition.getGroups() != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("checking subGroups in cartridge group " + serviceGroupDefinition.getName());
-                }
+        // if any sub groups are specified in the group, they should be already deployed
+        if (serviceGroupDefinition.getGroups() != null) {
+            if (log.isDebugEnabled()) {
+                log.debug("checking subGroups in cartridge group " + serviceGroupDefinition.getName());
+            }
 
-                List<CartridgeGroupBean> groupDefinitions = serviceGroupDefinition.getGroups();
-                groupNames = new ArrayList<String>();
-                cartridgeGroupNames = new String[groupDefinitions.size()];
-                int i = 0;
-                for (CartridgeGroupBean groupList : groupDefinitions) {
-                    groupNames.add(groupList.getName());
-                    cartridgeGroupNames[i] = groupList.getName();
-                    i++;
-                }
+            List<CartridgeGroupBean> groupDefinitions = serviceGroupDefinition.getGroups();
+            groupNames = new ArrayList<String>();
+            cartridgeGroupNames = new String[groupDefinitions.size()];
+            int i = 0;
+            for (CartridgeGroupBean groupList : groupDefinitions) {
+                groupNames.add(groupList.getName());
+                cartridgeGroupNames[i] = groupList.getName();
+                i++;
+            }
 
-                Set<String> duplicates = findDuplicates(groupNames);
-                if (duplicates.size() > 0) {
+            Set<String> duplicates = findDuplicates(groupNames);
+            if (duplicates.size() > 0) {
 
-                    StringBuilder duplicatesOutput = new StringBuilder();
-                    for (String dup : duplicates) {
-                        duplicatesOutput.append(dup).append(" ");
-                    }
-                    if (log.isDebugEnabled()) {
-                        log.debug("duplicate sub-groups defined: " + duplicatesOutput.toString());
-                    }
-                    throw new RestAPIException("Invalid cartridge group definition, duplicate sub-groups defined:" +
-                            duplicatesOutput.toString());
+                StringBuilder duplicatesOutput = new StringBuilder();
+                for (String dup : duplicates) {
+                    duplicatesOutput.append(dup).append(" ");
+                }
+                if (log.isDebugEnabled()) {
+                    log.debug("duplicate sub-groups defined: " + duplicatesOutput.toString());
                 }
+                throw new InvalidCartridgeGroupDefinitionException("Invalid cartridge group definition, duplicate " +
+                        "sub-groups defined:" + duplicatesOutput.toString());
             }
+        }
 
-            ServiceGroup serviceGroup = ObjectConverter.convertServiceGroupDefinitionToASStubServiceGroup(
-                    serviceGroupDefinition);
+        ServiceGroup serviceGroup = ObjectConverter.convertServiceGroupDefinitionToASStubServiceGroup(
+                serviceGroupDefinition);
 
-            AutoscalerServiceClient asServiceClient = getAutoscalerServiceClient();
+        AutoscalerServiceClient asServiceClient = getAutoscalerServiceClient();
+        try {
             asServiceClient.addServiceGroup(serviceGroup);
-
             // Add cartridge group elements to SM cache - done after service group has been added
             StratosManagerServiceClient smServiceClient = getStratosManagerServiceClient();
             smServiceClient.addUsedCartridgesInCartridgeGroups(serviceGroupDefinition.getName(), cartridgeNames);
-        } catch (InvalidCartridgeGroupDefinitionException e) {
-            throw e;
-        } catch (Exception e) {
-            // TODO: InvalidServiceGroupException is not received, only AxisFault. Need to fix get the custom exception
-            String message = "Could not add cartridge group";
+        } catch (RemoteException e) {
+
+            String message = "Could not add the cartridge group: " + serviceGroupDefinition.getName();
             log.error(message, e);
             throw new RestAPIException(message, e);
         }
@@ -1580,6 +1576,7 @@ public class StratosApiV41Utils {
      * This method validates cartridges in groups
      * Deployment policy should not defined in cartridge if group has a deployment policy
      * If group does not have a DP, then cartridge should have one
+     *
      * @param cartridgeReferenceBeans - Cartridges in a group
      * @throws RestAPIException
      */

http://git-wip-us.apache.org/repos/asf/stratos/blob/90dc63ea/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/exception/InvalidCartridgeException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/exception/InvalidCartridgeException.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/exception/InvalidCartridgeException.java
new file mode 100644
index 0000000..d9de154
--- /dev/null
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/exception/InvalidCartridgeException.java
@@ -0,0 +1,70 @@
+/*
+ * 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.rest.endpoint.exception;
+
+import javax.ws.rs.core.Response;
+
+public class InvalidCartridgeException extends RestAPIException {
+
+    private static final long serialVersionUID = 1L;
+
+    private String message;
+    private Response.Status httpStatusCode;
+
+    public InvalidCartridgeException() {
+        super();
+    }
+
+    public InvalidCartridgeException(String message, Throwable cause) {
+        super(message, cause);
+        this.message = message;
+    }
+
+    public InvalidCartridgeException(Response.Status httpStatusCode, String message, Throwable cause) {
+        super(message, cause);
+        this.message = message;
+        this.httpStatusCode = httpStatusCode;
+    }
+
+    public InvalidCartridgeException(String message) {
+        super(message);
+        this.message = message;
+    }
+
+    public InvalidCartridgeException(Response.Status httpStatusCode, String message) {
+        super(message);
+        this.message = message;
+        this.httpStatusCode = httpStatusCode;
+    }
+
+    public InvalidCartridgeException(Throwable cause) {
+        super(cause);
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public Response.Status getHTTPStatusCode() {
+        return httpStatusCode;
+    }
+
+
+}