]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Fix ratelimiting
authorSeif Lotfy <s.lotfy@telekom.de>
Fri, 9 Aug 2013 13:37:38 +0000 (13:37 +0000)
committerSeif Lotfy <s.lotfy@telekom.de>
Fri, 9 Aug 2013 21:18:11 +0000 (21:18 +0000)
Current master does now respect ratelimiting, since parsing of the
api-paste.ini was faulty. api-paste.ini limited user limiting by
setting a line as follows:
user:<user-id>:(GET, *, ".*", 4, minute) which was passed to the
Limiter as kwargs with "user" as a key. Thus multiple user limiting
was not possible as well as extracting the id of the user was bound
to fail, since we checked on the key with startswith("user:")

An example config in the api-paste.ini has to look as follows:
limits = (POST, "*", .*, 10, MINUTE)
limits.<user-id1>:(GET, "*", .*, 4, minute)
limits.<user-id2>:(GET, "*", .*, 2, minute)

Fixes bug: 1206976

Change-Id: I4adbe3dbe3a0bd607d6e675f230b0442b08ec791

cinder/api/v1/limits.py
cinder/api/v2/limits.py
cinder/tests/api/v1/test_limits.py
cinder/tests/api/v2/test_limits.py

index b8a0ad848d8a3edf7b51248d567e9f47f3ec7cc8..f108b1b1599166be3a374d091537cabf014697bf 100644 (file)
@@ -292,8 +292,8 @@ class Limiter(object):
 
         # Pick up any per-user limit information
         for key, value in kwargs.items():
-            if key.startswith('user:'):
-                username = key[5:]
+            if key.startswith('limits.'):
+                username = key[7:]
                 self.levels[username] = self.parse_limits(value)
 
     def get_limits(self, username=None):
index b8a0ad848d8a3edf7b51248d567e9f47f3ec7cc8..f108b1b1599166be3a374d091537cabf014697bf 100644 (file)
@@ -292,8 +292,8 @@ class Limiter(object):
 
         # Pick up any per-user limit information
         for key, value in kwargs.items():
-            if key.startswith('user:'):
-                username = key[5:]
+            if key.startswith('limits.'):
+                username = key[7:]
                 self.levels[username] = self.parse_limits(value)
 
     def get_limits(self, username=None):
index 873f747ec7aa53344b0d0abdeb44e2bbf387a244..816ba08da1ac1c698814cd803625c1e0946d3014 100644 (file)
@@ -406,7 +406,7 @@ class LimiterTest(BaseLimitTestSuite):
     def setUp(self):
         """Run before each test."""
         super(LimiterTest, self).setUp()
-        userlimits = {'user:user3': ''}
+        userlimits = {'limits.user3': ''}
         self.limiter = limits.Limiter(TEST_LIMITS, **userlimits)
 
     def _check(self, num, verb, url, username=None):
index ec7c152fb8356067b46958012d3bb99c02b20c23..9b58d51de346dc4e431ac66bc7ff192c740b470f 100644 (file)
@@ -406,7 +406,7 @@ class LimiterTest(BaseLimitTestSuite):
     def setUp(self):
         """Run before each test."""
         super(LimiterTest, self).setUp()
-        userlimits = {'user:user3': ''}
+        userlimits = {'limits.user3': ''}
         self.limiter = limits.Limiter(TEST_LIMITS, **userlimits)
 
     def _check(self, num, verb, url, username=None):