adding back in the decr
This commit is contained in:
parent
7c7206d7ca
commit
7dd7c53be0
@ -209,6 +209,19 @@ class MemcacheRing(object):
|
||||
except Exception, e:
|
||||
self._exception_occurred(server, e)
|
||||
|
||||
def decr(self, key, delta=1, timeout=0):
|
||||
"""
|
||||
Decrements a key which has a numeric value by delta. Calls incr with
|
||||
-delta.
|
||||
|
||||
:param key: key
|
||||
:param delta: amount to subtract to the value of key (or set the
|
||||
value to 0 if the key is not found) will be cast to
|
||||
an int
|
||||
:param timeout: ttl in memcache
|
||||
"""
|
||||
self.incr(key, delta=-delta, timeout=timeout)
|
||||
|
||||
def delete(self, key):
|
||||
"""
|
||||
Deletes a key/value pair from memcache.
|
||||
|
@ -148,7 +148,7 @@ class RateLimitMiddleware(object):
|
||||
max_sleep_m = self.max_sleep_time_seconds * self.clock_accuracy
|
||||
if max_sleep_m - need_to_sleep_m <= self.clock_accuracy * 0.01:
|
||||
# treat as no-op decrement time
|
||||
self.memcache_client.incr(key, delta=-time_per_request_m)
|
||||
self.memcache_client.decr(key, delta=time_per_request_m)
|
||||
raise MaxSleepTimeHit("Max Sleep Time Exceeded: %s" %
|
||||
need_to_sleep_m)
|
||||
|
||||
|
@ -41,6 +41,9 @@ class FakeMemcache(object):
|
||||
self.store[key] = 0
|
||||
return int(self.store[key])
|
||||
|
||||
def decr(self, key, delta=1, timeout=0):
|
||||
return self.incr(key, delta=-delta, timeout=timeout)
|
||||
|
||||
@contextmanager
|
||||
def soft_lock(self, key, timeout=0, retries=5):
|
||||
yield True
|
||||
|
@ -167,6 +167,19 @@ class TestMemcached(unittest.TestCase):
|
||||
memcache_client.incr('some_key', delta=-15)
|
||||
self.assertEquals(memcache_client.get('some_key'), '0')
|
||||
|
||||
def test_decr(self):
|
||||
memcache_client = memcached.MemcacheRing(['1.2.3.4:11211'])
|
||||
mock = MockMemcached()
|
||||
memcache_client._client_cache['1.2.3.4:11211'] = [(mock, mock)] * 2
|
||||
memcache_client.decr('some_key', delta=5)
|
||||
self.assertEquals(memcache_client.get('some_key'), '0')
|
||||
memcache_client.incr('some_key', delta=15)
|
||||
self.assertEquals(memcache_client.get('some_key'), '15')
|
||||
memcache_client.decr('some_key', delta=4)
|
||||
self.assertEquals(memcache_client.get('some_key'), '11')
|
||||
memcache_client.decr('some_key', delta=15)
|
||||
self.assertEquals(memcache_client.get('some_key'), '0')
|
||||
|
||||
def test_retry(self):
|
||||
logging.getLogger().addHandler(NullLoggingHandler())
|
||||
memcache_client = memcached.MemcacheRing(['1.2.3.4:11211', '1.2.3.5:11211'])
|
||||
|
Loading…
Reference in New Issue
Block a user