You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/03/29 04:07:09 UTC

stratos git commit: Updating mock iaas api to create the mock iaas service instance on demand

Repository: stratos
Updated Branches:
  refs/heads/master 094b5fb6a -> 230f5f342


Updating mock iaas api to create the mock iaas service instance on demand


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

Branch: refs/heads/master
Commit: 230f5f342cb0604c38854238eaae6eb419cf800b
Parents: 094b5fb
Author: Imesh Gunaratne <im...@apache.org>
Authored: Sun Mar 29 07:34:59 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Sun Mar 29 07:34:59 2015 +0530

----------------------------------------------------------------------
 .../stratos/mock/iaas/api/MockIaasApi.java      | 54 ++++++++++++--------
 1 file changed, 34 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/230f5f34/components/org.apache.stratos.mock.iaas.api/src/main/java/org/apache/stratos/mock/iaas/api/MockIaasApi.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.mock.iaas.api/src/main/java/org/apache/stratos/mock/iaas/api/MockIaasApi.java b/components/org.apache.stratos.mock.iaas.api/src/main/java/org/apache/stratos/mock/iaas/api/MockIaasApi.java
index 9ffac45..8b7d4dc 100644
--- a/components/org.apache.stratos.mock.iaas.api/src/main/java/org/apache/stratos/mock/iaas/api/MockIaasApi.java
+++ b/components/org.apache.stratos.mock.iaas.api/src/main/java/org/apache/stratos/mock/iaas/api/MockIaasApi.java
@@ -47,18 +47,6 @@ public class MockIaasApi {
     private MockIaasService mockIaasService;
 
     public MockIaasApi() {
-        try {
-            try {
-                mockIaasService = (MockIaasService) PrivilegedCarbonContext.getThreadLocalCarbonContext().
-                        getOSGiService(MockIaasService.class);
-            } catch (NullPointerException ignore) {
-                // Above carbon context method throws a NPE if service is not registered
-            }
-        } catch (Exception e) {
-            String message = "Could not initialize Mock IaaS API";
-            log.error(message, e);
-            throw new RuntimeException(message, e);
-        }
     }
 
     @POST
@@ -71,7 +59,7 @@ public class MockIaasApi {
             validateMockIaasService();
 
             log.info(String.format("Starting mock instance: [member-id] %s", mockInstanceContext.getMemberId()));
-            MockInstanceMetadata mockInstanceMetadata = mockIaasService.startInstance(mockInstanceContext);
+            MockInstanceMetadata mockInstanceMetadata = getMockIaasService().startInstance(mockInstanceContext);
             log.info(String.format("Mock instance started successfully: [member-id] %s [instance-id] %s",
                     mockInstanceContext.getMemberId(), mockInstanceContext.getInstanceId()));
             return Response.ok(mockInstanceMetadata).build();
@@ -92,7 +80,7 @@ public class MockIaasApi {
 
             log.debug(String.format("Get mock instances"));
 
-            List<MockInstanceMetadata> mockInstanceMetadataList = mockIaasService.getInstances();
+            List<MockInstanceMetadata> mockInstanceMetadataList = getMockIaasService().getInstances();
             MockInstanceMetadata[] mockInstanceMetadataArray = mockInstanceMetadataList.toArray(
                     new MockInstanceMetadata[mockInstanceMetadataList.size()]);
             return Response.ok(mockInstanceMetadataArray).build();
@@ -113,7 +101,7 @@ public class MockIaasApi {
 
             log.debug(String.format("Get mock instance: [instance-id] %s", instanceId));
 
-            MockInstanceMetadata mockInstanceMetadata = mockIaasService.getInstance(instanceId);
+            MockInstanceMetadata mockInstanceMetadata = getMockIaasService().getInstance(instanceId);
             if(mockInstanceMetadata == null) {
                 return Response.status(Response.Status.NOT_FOUND).build();
             }
@@ -137,11 +125,11 @@ public class MockIaasApi {
 
             log.info(String.format("Allocating ip addresses: [instance-id] %s", instanceId));
 
-            MockInstanceMetadata mockInstanceMetadata = mockIaasService.getInstance(instanceId);
+            MockInstanceMetadata mockInstanceMetadata = getMockIaasService().getInstance(instanceId);
             if(mockInstanceMetadata == null) {
                 return Response.status(Response.Status.NOT_FOUND).build();
             }
-            mockInstanceMetadata = mockIaasService.allocateIpAddress(instanceId);
+            mockInstanceMetadata = getMockIaasService().allocateIpAddress(instanceId);
             log.info(String.format("IP addresses allocated: [instance-id] %s [default-private-ip] %s " +
                     "[default-public-ip] %s", instanceId, mockInstanceMetadata.getDefaultPrivateIp(),
                     mockInstanceMetadata.getDefaultPublicIp()));
@@ -161,7 +149,7 @@ public class MockIaasApi {
             validateMockIaasService();
 
             log.info(String.format("Terminating mock instance: [instance-id] %s", instanceId));
-            mockIaasService.terminateInstance(instanceId);
+            getMockIaasService().terminateInstance(instanceId);
             log.info(String.format("Mock instance terminated successfully: [instance-id] %s", instanceId));
             return Response.ok().build();
         } catch (Exception e) {
@@ -172,11 +160,37 @@ public class MockIaasApi {
     }
 
     /**
+     * Get mock iaas service instance
+     * @return
+     */
+    private MockIaasService getMockIaasService() {
+        if(mockIaasService == null) {
+            synchronized (MockIaasApi.class) {
+                if(mockIaasService == null) {
+                    try {
+                        try {
+                            mockIaasService = (MockIaasService) PrivilegedCarbonContext.getThreadLocalCarbonContext().
+                                    getOSGiService(MockIaasService.class);
+                        } catch (NullPointerException ignore) {
+                            // Above carbon context method throws a NPE if service is not registered
+                        }
+                    } catch (Exception e) {
+                        String message = "Could not initialize Mock IaaS API";
+                        log.error(message, e);
+                        throw new RuntimeException(message, e);
+                    }
+                }
+            }
+        }
+        return mockIaasService;
+    }
+
+    /**
      * Validate mock iaas service.
      */
     private void validateMockIaasService() {
-        if(mockIaasService == null) {
-            throw new RuntimeException(String.format("Mock IaaS is disabled, please check %s file",
+        if(getMockIaasService() == null) {
+            throw new RuntimeException(String.format("Mock IaaS may have been disabled, please check %s file",
                     MockIaasConfig.MOCK_IAAS_CONFIG_FILE_NAME));
         }
     }