summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-01-27 21:05:17 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2012-01-27 21:05:17 -0500
commit07130c7a8b5c58e744c27c7b1baabeda7034f05b (patch)
tree6d9573aa19a0113ca62f502e62934b4cdc3e8b4d /lib/sqlalchemy
parentd706a661709a2c963f8adde53959c5fc42f26d58 (diff)
downloadsqlalchemy-07130c7a8b5c58e744c27c7b1baabeda7034f05b.tar.gz
- [bug] Changed LRUCache, used by the mapper
to cache INSERT/UPDATE/DELETE statements, to use an incrementing counter instead of a timestamp to track entries, for greater reliability versus using time.time(), which can cause test failures on some platforms. [ticket:2379]
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/util/_collections.py13
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/sqlalchemy/util/_collections.py b/lib/sqlalchemy/util/_collections.py
index 1b8decf59..1c407324c 100644
--- a/lib/sqlalchemy/util/_collections.py
+++ b/lib/sqlalchemy/util/_collections.py
@@ -769,10 +769,15 @@ class LRUCache(dict):
def __init__(self, capacity=100, threshold=.5):
self.capacity = capacity
self.threshold = threshold
+ self._counter = 0
+
+ def _inc_counter(self):
+ self._counter += 1
+ return self._counter
def __getitem__(self, key):
item = dict.__getitem__(self, key)
- item[2] = time_func()
+ item[2] = self._inc_counter()
return item[1]
def values(self):
@@ -788,7 +793,7 @@ class LRUCache(dict):
def __setitem__(self, key, value):
item = dict.get(self, key)
if item is None:
- item = [key, value, time_func()]
+ item = [key, value, self._inc_counter()]
dict.__setitem__(self, key, item)
else:
item[1] = value
@@ -796,10 +801,10 @@ class LRUCache(dict):
def _manage_size(self):
while len(self) > self.capacity + self.capacity * self.threshold:
- bytime = sorted(dict.values(self),
+ by_counter = sorted(dict.values(self),
key=operator.itemgetter(2),
reverse=True)
- for item in bytime[self.capacity:]:
+ for item in by_counter[self.capacity:]:
try:
del self[item[0]]
except KeyError: