Cover instance creation logic with try catch block for catching all the exceptions
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/2a9f21d8 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/2a9f21d8 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/2a9f21d8 Branch: refs/heads/master Commit: 2a9f21d8fcb4f568ebb702e957f6e46a21f5578f Parents: 080614c Author: Lahiru Sandaruwan <[email protected]> Authored: Tue May 19 14:11:26 2015 +0530 Committer: Lahiru Sandaruwan <[email protected]> Committed: Tue May 19 15:30:57 2015 +0530 ---------------------------------------------------------------------- .../monitor/component/ApplicationMonitor.java | 121 ++++++++++--------- 1 file changed, 64 insertions(+), 57 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2a9f21d8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java index 2d5ef12..122a6a7 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java @@ -399,74 +399,81 @@ public class ApplicationMonitor extends ParentComponentMonitor { */ private boolean createInstanceAndStartDependency(Application application) throws TopologyInConsistentException, PolicyValidationException { + boolean initialStartup = true; - List<String> instanceIds = new ArrayList<String>(); - String instanceId; + try { + List<String> instanceIds = new ArrayList<String>(); + String instanceId; - ApplicationPolicy applicationPolicy = PolicyManager.getInstance(). - getApplicationPolicy(application.getApplicationPolicyId()); - if (applicationPolicy == null) { - String msg = String.format("Application policy not found in registry or " + - "in-memory [application-id] %s", appId); - log.error(msg); - throw new RuntimeException(msg); - } + ApplicationPolicy applicationPolicy = PolicyManager.getInstance(). + getApplicationPolicy(application.getApplicationPolicyId()); + if (applicationPolicy == null) { + String msg = String.format("Application policy not found in registry or " + + "in-memory [application-id] %s", appId); + log.error(msg); + throw new RuntimeException(msg); + } - NetworkPartitionAlgorithmContext algorithmContext = AutoscalerContext.getInstance(). - getNetworkPartitionAlgorithmContext(appId); - if (algorithmContext == null) { - String msg = String.format("Network partition algorithm context not found " + - "in registry or in-memory [application-id] %s", appId); - log.error(msg); - throw new RuntimeException(msg); - } + NetworkPartitionAlgorithmContext algorithmContext = AutoscalerContext.getInstance(). + getNetworkPartitionAlgorithmContext(appId); + if (algorithmContext == null) { + String msg = String.format("Network partition algorithm context not found " + + "in registry or in-memory [application-id] %s", appId); + log.error(msg); + throw new RuntimeException(msg); + } - String networkPartitionAlgorithmName = applicationPolicy.getAlgorithm(); - if (log.isDebugEnabled()) { - String msg = String.format("Network partition algorithm is %s [application-id] %s", - networkPartitionAlgorithmName, appId); - log.debug(msg); - } + String networkPartitionAlgorithmName = applicationPolicy.getAlgorithm(); + if (log.isDebugEnabled()) { + String msg = String.format("Network partition algorithm is %s [application-id] %s", + networkPartitionAlgorithmName, appId); + log.debug(msg); + } - NetworkPartitionAlgorithm algorithm = getNetworkPartitionAlgorithm( - networkPartitionAlgorithmName); - if (algorithm == null) { - String msg = String.format("Couldn't create network partition algorithm " + - "[application-id] %s", appId); - log.error(msg); - throw new RuntimeException(msg); - } + NetworkPartitionAlgorithm algorithm = getNetworkPartitionAlgorithm( + networkPartitionAlgorithmName); + if (algorithm == null) { + String msg = String.format("Couldn't create network partition algorithm " + + "[application-id] %s", appId); + log.error(msg); + throw new RuntimeException(msg); + } - List<String> nextNetworkPartitions = algorithm.getNextNetworkPartitions(algorithmContext); - if (nextNetworkPartitions == null || nextNetworkPartitions.isEmpty()) { - String msg = String.format("No network partitions available for application bursting " + - "[application-id] %s", appId); - log.warn(msg); - return false; - } + List<String> nextNetworkPartitions = algorithm.getNextNetworkPartitions(algorithmContext); + if (nextNetworkPartitions == null || nextNetworkPartitions.isEmpty()) { + String msg = String.format("No network partitions available for application bursting " + + "[application-id] %s", appId); + log.warn(msg); + return false; + } - for (String networkPartitionIds : nextNetworkPartitions) { - ApplicationLevelNetworkPartitionContext context = - new ApplicationLevelNetworkPartitionContext(networkPartitionIds); - //If application instances found in the ApplicationsTopology, - // then have to add them first before creating new one - ApplicationInstance appInstance = (ApplicationInstance) application. - getInstanceByNetworkPartitionId(context.getId()); - if (appInstance != null) { - //use the existing instance in the Topology to create the data - instanceId = handleApplicationInstanceCreation(application, context, appInstance); - initialStartup = false; - } else { - //create new app instance as it doesn't exist in the Topology - instanceId = handleApplicationInstanceCreation(application, context, null); + for (String networkPartitionIds : nextNetworkPartitions) { + ApplicationLevelNetworkPartitionContext context = + new ApplicationLevelNetworkPartitionContext(networkPartitionIds); + //If application instances found in the ApplicationsTopology, + // then have to add them first before creating new one + ApplicationInstance appInstance = (ApplicationInstance) application. + getInstanceByNetworkPartitionId(context.getId()); + if (appInstance != null) { + //use the existing instance in the Topology to create the data + instanceId = handleApplicationInstanceCreation(application, context, appInstance); + initialStartup = false; + } else { + //create new app instance as it doesn't exist in the Topology + instanceId = handleApplicationInstanceCreation(application, context, null); + } + instanceIds.add(instanceId); + log.info("Application instance has been added for the [network partition] " + + networkPartitionIds + " [appInstanceId] " + instanceId); } - instanceIds.add(instanceId); - log.info("Application instance has been added for the [network partition] " + - networkPartitionIds + " [appInstanceId] " + instanceId); + + startDependency(application, instanceIds); + + } catch (Exception e){ + log.error(String.format("Application instance creation failed [applcaition-id] %s", appId), e); } - startDependency(application, instanceIds); return initialStartup; }
