From 449363653ed576ba6ab1f745749cfc9150ed9249 Mon Sep 17 00:00:00 2001 From: David Goetz Date: Wed, 24 Apr 2013 12:46:13 -0700 Subject: [PATCH] Container info memcache change broke ratelimiting. Change-Id: I6379db52a75ed40080dd220f7fa72bcaffd0953c --- swift/common/middleware/ratelimit.py | 2 +- test/unit/common/middleware/test_ratelimit.py | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/swift/common/middleware/ratelimit.py b/swift/common/middleware/ratelimit.py index 11a6f1dbb1..1ca08e5aa4 100644 --- a/swift/common/middleware/ratelimit.py +++ b/swift/common/middleware/ratelimit.py @@ -121,7 +121,7 @@ class RateLimitMiddleware(object): container_info = self.memcache_client.get(memcache_key) if isinstance(container_info, dict): container_size = container_info.get( - 'count', container_info.get('container_size', 0)) + 'object_count', container_info.get('container_size', 0)) container_rate = self.get_container_maxrate(container_size) if container_rate: keys.append(("ratelimit/%s/%s" % (account_name, diff --git a/test/unit/common/middleware/test_ratelimit.py b/test/unit/common/middleware/test_ratelimit.py index 9f3c4442d6..9a2263008f 100644 --- a/test/unit/common/middleware/test_ratelimit.py +++ b/test/unit/common/middleware/test_ratelimit.py @@ -21,7 +21,8 @@ from threading import Thread from test.unit import FakeLogger from swift.common.middleware import ratelimit -from swift.proxy.controllers.base import get_container_memcache_key +from swift.proxy.controllers.base import get_container_memcache_key, \ + headers_to_container_info from swift.common.memcached import MemcacheConnectionError from swift.common.swob import Request @@ -184,7 +185,7 @@ class TestRateLimit(unittest.TestCase): 'container_ratelimit_3': 200} fake_memcache = FakeMemcache() fake_memcache.store[get_container_memcache_key('a', 'c')] = \ - {'count': 5} + {'object_count': '5'} the_app = ratelimit.RateLimitMiddleware(None, conf_dict, logger=FakeLogger()) the_app.memcache_client = fake_memcache @@ -199,6 +200,10 @@ class TestRateLimit(unittest.TestCase): self.assertEquals(len(the_app.get_ratelimitable_key_tuples( 'PUT', 'a', 'c', 'o')), 1) + def test_memcached_container_info_dict(self): + mdict = headers_to_container_info({'x-container-object-count': '45'}) + self.assertEquals(mdict['object_count'], '45') + def test_ratelimit_old_memcache_format(self): current_rate = 13 conf_dict = {'account_ratelimit': current_rate,