Просмотр исходного кода

Inline documentation for bucket op rate limit

Ehsan Chiniforooshan 7 лет назад
Родитель
Сommit
7bbe4e5681

+ 7 - 3
cloudbridge/cloud/providers/gce/resources.py

@@ -966,9 +966,10 @@ class GCEInstance(BaseInstance):
         """
         Get the name of the key pair associated with this instance.
         """
-        for kp in self._provider.security.key_pairs:
-            return kp.name
-        return None
+        try:
+            return next(self._provider.security.key_pairs)
+        except StopIteration:
+            return None
 
     @property
     def inet_gateway(self):
@@ -2152,6 +2153,9 @@ class GCSBucket(BaseBucket):
              .buckets()
              .delete(bucket=self.name)
              .execute())
+        # GCS has a rate limit of 1 operation per 2 seconds for bucket
+        # creation/deletion: https://cloud.google.com/storage/quotas.  Throttle
+        # here to avoid future failures.
         time.sleep(2)
 
     def create_object(self, name):

+ 3 - 0
cloudbridge/cloud/providers/gce/services.py

@@ -1252,6 +1252,9 @@ class GCSBucketService(BaseBucketService):
                             .execute())
             if 'error' in response:
                 return None
+            # GCS has a rate limit of 1 operation per 2 seconds for bucket
+            # creation/deletion: https://cloud.google.com/storage/quotas.
+            # Throttle here to avoid future failures.
             time.sleep(2)
             return GCSBucket(self.provider, response)
         except googleapiclient.errors.HttpError as http_error:

+ 15 - 9
test/test_network_service.py

@@ -6,6 +6,7 @@ from test.helpers import standard_interface_tests as sit
 from cloudbridge.cloud.base.resources import BaseNetwork
 from cloudbridge.cloud.interfaces.resources import FloatingIP
 from cloudbridge.cloud.interfaces.resources import Network
+from cloudbridge.cloud.interfaces.resources import RouterState
 from cloudbridge.cloud.interfaces.resources import Subnet
 
 
@@ -70,6 +71,10 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
                     "Network ID %s should be specified in the subnet's network"
                     " id %s." % (net.id, sn.network_id))
 
+                self.assertEqual(
+                    cidr, sn.cidr_block,
+                    "Should be exact cidr block that was requested")
+
                 self.assertTrue(
                     BaseNetwork.cidr_blocks_overlap(cidr, sn.cidr_block),
                     "Subnet's CIDR %s should overlap the specified one %s." % (
@@ -169,15 +174,16 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
             # Check basic router properties
             sit.check_standard_behaviour(
                 self, self.provider.networking.routers, router)
-#            self.assertEqual(
-#                router.state, RouterState.DETACHED,
-#                "Router {0} state {1} should be {2}.".format(
-#                    router.id, router.state, RouterState.DETACHED))
-#
-#             self.assertFalse(
-#                 router.network_id,
-#                 "Router {0} should not be assoc. with a network {1}".format(
-#                     router.id, router.network_id))
+            if (self.provider.PROVIDER_ID != 'gce'):
+                self.assertEqual(
+                    router.state, RouterState.DETACHED,
+                    "Router {0} state {1} should be {2}.".format(
+                        router.id, router.state, RouterState.DETACHED))
+
+                self.assertFalse(
+                    router.network_id,
+                    "Router {0} should not be assoc. with network {1}".format(
+                            router.id, router.network_id))
 
             router.attach_subnet(sn)
             gteway = net.gateways.get_or_create_inet_gateway(name)