adding back in the decr
This commit is contained in:
parent
7c7206d7ca
commit
7dd7c53be0
@ -209,6 +209,19 @@ class MemcacheRing(object):
|
|||||||
except Exception, e:
|
except Exception, e:
|
||||||
self._exception_occurred(server, 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):
|
def delete(self, key):
|
||||||
"""
|
"""
|
||||||
Deletes a key/value pair from memcache.
|
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
|
max_sleep_m = self.max_sleep_time_seconds * self.clock_accuracy
|
||||||
if max_sleep_m - need_to_sleep_m <= self.clock_accuracy * 0.01:
|
if max_sleep_m - need_to_sleep_m <= self.clock_accuracy * 0.01:
|
||||||
# treat as no-op decrement time
|
# 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" %
|
raise MaxSleepTimeHit("Max Sleep Time Exceeded: %s" %
|
||||||
need_to_sleep_m)
|
need_to_sleep_m)
|
||||||
|
|
||||||
|
@ -41,6 +41,9 @@ class FakeMemcache(object):
|
|||||||
self.store[key] = 0
|
self.store[key] = 0
|
||||||
return int(self.store[key])
|
return int(self.store[key])
|
||||||
|
|
||||||
|
def decr(self, key, delta=1, timeout=0):
|
||||||
|
return self.incr(key, delta=-delta, timeout=timeout)
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def soft_lock(self, key, timeout=0, retries=5):
|
def soft_lock(self, key, timeout=0, retries=5):
|
||||||
yield True
|
yield True
|
||||||
|
@ -167,6 +167,19 @@ class TestMemcached(unittest.TestCase):
|
|||||||
memcache_client.incr('some_key', delta=-15)
|
memcache_client.incr('some_key', delta=-15)
|
||||||
self.assertEquals(memcache_client.get('some_key'), '0')
|
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):
|
def test_retry(self):
|
||||||
logging.getLogger().addHandler(NullLoggingHandler())
|
logging.getLogger().addHandler(NullLoggingHandler())
|
||||||
memcache_client = memcached.MemcacheRing(['1.2.3.4:11211', '1.2.3.5:11211'])
|
memcache_client = memcached.MemcacheRing(['1.2.3.4:11211', '1.2.3.5:11211'])
|
||||||
|
Loading…
Reference in New Issue
Block a user