Repository: brooklyn-server
Updated Branches:
  refs/heads/master 3d8675e24 -> eb9795c13


DefaultNetworkCreator now waits for subnet to be created


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/6d40d632
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/6d40d632
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/6d40d632

Branch: refs/heads/master
Commit: 6d40d632cd9a49f0ab792af3714d87dfa4597ca1
Parents: a11fd42
Author: graeme.miller <[email protected]>
Authored: Tue Jul 4 09:25:12 2017 +0100
Committer: graeme.miller <[email protected]>
Committed: Tue Jul 4 11:34:58 2017 +0100

----------------------------------------------------------------------
 .../creator/DefaultAzureArmNetworkCreator.java  | 23 ++++++++++++++++++++
 .../DefaultAzureArmNetworkCreatorTest.java      | 16 ++++++++------
 2 files changed, 32 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d40d632/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreator.java
----------------------------------------------------------------------
diff --git 
a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreator.java
 
b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreator.java
index d08bd03..6028280 100644
--- 
a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreator.java
+++ 
b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreator.java
@@ -45,6 +45,8 @@ import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.config.ConfigBag;
+import org.apache.brooklyn.util.time.CountdownTimer;
+import org.apache.brooklyn.util.time.Duration;
 
 public class DefaultAzureArmNetworkCreator {
 
@@ -54,6 +56,9 @@ public class DefaultAzureArmNetworkCreator {
     private static final String DEFAULT_NETWORK_NAME_PREFIX = 
"brooklyn-default-network";
     private static final String DEFAULT_SUBNET_NAME_PREFIX = 
"brooklyn-default-subnet";
 
+    private static final String PROVISIONING_STATE_UPDATING = "Updating";
+    private static final String PROVISIONING_STATE_SUCCEEDED = "Succeeded";
+
     private static final String DEFAULT_VNET_ADDRESS_PREFIX = "10.1.0.0/16";
     private static final String DEFAULT_SUBNET_ADDRESS_PREFIX = "10.1.0.0/24";
 
@@ -131,6 +136,24 @@ public class DefaultAzureArmNetworkCreator {
         //Get created subnet
         Subnet createdSubnet = api.getSubnetApi(resourceGroupName, 
vnetName).get(subnetName);
 
+        //Wait until subnet is created
+        CountdownTimer timeout = 
CountdownTimer.newInstanceStarted(Duration.minutes(new Integer(20)));
+        while 
(PROVISIONING_STATE_UPDATING.equals(createdSubnet.properties().provisioningState()))
 {
+            if (timeout.isExpired()) {
+                throw new IllegalStateException("Creating subnet " + 
subnetName + " stuck in the updating state, aborting.");
+            }
+            LOG.debug("Created subnet {} is still in updating state, waiting 
for it to complete", createdSubnet);
+            Duration.sleep(Duration.ONE_SECOND);
+            createdSubnet = api.getSubnetApi(resourceGroupName, 
vnetName).get(subnetName);
+        }
+
+        String lastProvisioningState = 
createdSubnet.properties().provisioningState();
+        if (!lastProvisioningState.equals(PROVISIONING_STATE_SUCCEEDED)) {
+            LOG.debug("Created subnet {} in wrong state, expected state {} but 
found {}", new Object[] {subnetName, PROVISIONING_STATE_SUCCEEDED, 
lastProvisioningState});
+            throw new IllegalStateException("Created subnet " + subnetName + " 
in wrong state, expected state " + PROVISIONING_STATE_SUCCEEDED +
+                    " but found " + lastProvisioningState );
+        }
+
         //Add config
         updateTemplateOptions(config, createdSubnet);
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d40d632/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreatorTest.java
 
b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreatorTest.java
index 48d6024..542e4ab 100644
--- 
a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreatorTest.java
+++ 
b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreatorTest.java
@@ -24,6 +24,7 @@ import static 
org.apache.brooklyn.location.jclouds.api.JcloudsLocationConfigPubl
 import static 
org.apache.brooklyn.location.jclouds.networking.creator.DefaultAzureArmNetworkCreator.AZURE_ARM_DEFAULT_NETWORK_ENABLED;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.atLeast;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -63,7 +64,7 @@ public class DefaultAzureArmNetworkCreatorTest {
     @Mock VirtualNetwork virtualNetwork;
 
     @Mock ResourceGroup resourceGroup;
-    @Mock Subnet subnet;
+    @Mock(answer = org.mockito.Answers.RETURNS_DEEP_STUBS) Subnet subnet;
 
     final String TEST_LOCATION = "test-loc";
     final String TEST_RESOURCE_GROUP = "brooklyn-default-resource-group-" + 
TEST_LOCATION;
@@ -128,16 +129,17 @@ public class DefaultAzureArmNetworkCreatorTest {
 
         //Setup mocks
         
when(subnetApi.get(TEST_SUBNET_NAME)).thenReturn(null).thenReturn(subnet); 
//null first time, subnet next
-
         when(resourceGroupApi.get(TEST_RESOURCE_GROUP)).thenReturn(null);
+        
when(subnet.properties().provisioningState()).thenReturn("Updating").thenReturn("Succeeded");
+
 
 
         //Test
         
DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService,
 configBag);
 
         //verify calls made
-        verify(subnetApi, times(2)).get(TEST_SUBNET_NAME);
         verify(subnet).id();
+        verify(subnetApi, atLeast(2)).get(TEST_SUBNET_NAME);
 
         verify(resourceGroupApi).get(TEST_RESOURCE_GROUP);
         verify(resourceGroupApi).create(eq(TEST_RESOURCE_GROUP), 
eq(TEST_LOCATION), any());
@@ -162,13 +164,13 @@ public class DefaultAzureArmNetworkCreatorTest {
         //Setup mocks
         
when(subnetApi.get(TEST_SUBNET_NAME)).thenReturn(null).thenReturn(subnet); 
//null first time, subnet next
         
when(resourceGroupApi.get(TEST_RESOURCE_GROUP)).thenReturn(resourceGroup);
-
+        
when(subnet.properties().provisioningState()).thenReturn("Updating").thenReturn("Succeeded");
 
         //Test
         
DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService,
 configBag);
 
         //verify
-        verify(subnetApi, times(2)).get(TEST_SUBNET_NAME);
+        verify(subnetApi, atLeast(2)).get(TEST_SUBNET_NAME);
         verify(subnet).id();
 
         verify(resourceGroupApi).get(TEST_RESOURCE_GROUP);
@@ -195,14 +197,14 @@ public class DefaultAzureArmNetworkCreatorTest {
         
when(subnetApi.get(TEST_SUBNET_NAME)).thenReturn(null).thenReturn(subnet); 
//null first time, subnet next
         
when(virtualNetworkApi.get(TEST_NETWORK_NAME)).thenReturn(virtualNetwork);
         
when(resourceGroupApi.get(TEST_RESOURCE_GROUP)).thenReturn(resourceGroup);
-
+        
when(subnet.properties().provisioningState()).thenReturn("Updating").thenReturn("Succeeded");
 
         //Test
         
DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService,
 configBag);
 
         //verify
-        verify(subnetApi, times(2)).get(TEST_SUBNET_NAME);
         verify(subnetApi).createOrUpdate(eq(TEST_SUBNET_NAME), any());
+        verify(subnetApi, atLeast(2)).get(TEST_SUBNET_NAME);
         verify(subnet).id();
 
         verify(resourceGroupApi).get(TEST_RESOURCE_GROUP);

Reply via email to