From e5e87e141b6397677df73eb041e16db1d4ca40fe Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Wed, 5 Apr 2017 10:58:53 +0200 Subject: [PATCH] fix: use a monotonic clock in memory storage That should be more robust against system time update, e.g. ntp or leap seconds. --- token_bucket/storage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/token_bucket/storage.py b/token_bucket/storage.py index 07cf7fa..9a93093 100644 --- a/token_bucket/storage.py +++ b/token_bucket/storage.py @@ -96,7 +96,7 @@ def replenish(self, key, rate, capacity): tokens_in_bucket, last_replenished_at = self._buckets[key] - now = time.time() + now = time.monotonic() # NOTE(kgriffs): This will detect many, but not all, # manifestations of the race condition. If a later @@ -123,7 +123,7 @@ def replenish(self, key, rate, capacity): ] except KeyError: - self._buckets[key] = [capacity, time.time()] + self._buckets[key] = [capacity, time.monotonic()] def consume(self, key, num_tokens): """Attempt to take one or more tokens from a bucket.