]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- [bug] Changed LRUCache, used by the mapper
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 28 Jan 2012 02:05:17 +0000 (21:05 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 28 Jan 2012 02:05:17 +0000 (21:05 -0500)
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]

CHANGES
lib/sqlalchemy/util/_collections.py

diff --git a/CHANGES b/CHANGES
index bab93885c3586218e353cb4a4e7c323a491f35bd..35c61afd4039d693821e9e5627cd09e347ba2092 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -119,6 +119,15 @@ CHANGES
     list of oracle "connection lost" errors
     [ticket:2388]
 
+- core
+  - [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]
+
 - Py3K
   - [bug] Fixed inappropriate usage of util.py3k
     flag and renamed it to util.py3k_warning, since 
index 1b8decf59f1cd3045be978fa84a2437e06838195..1c407324ce288a1acf26a863eb26d2ce2206c673 100644 (file)
@@ -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: