10117: OrderedDict preserves insertion order, so use inode as key instead of cache_pr...
authorPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 21 Sep 2016 19:51:34 +0000 (15:51 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 21 Sep 2016 20:09:54 +0000 (16:09 -0400)
apps/workbench/Gemfile.lock
services/api/db/structure.sql
services/fuse/arvados_fuse/__init__.py
services/fuse/arvados_fuse/fresh.py

index a8431a7dfd373d0357053df0e06df901498ca0ca..9d04708f3be586503cca37a9996201ced3ea40df 100644 (file)
@@ -318,6 +318,3 @@ DEPENDENCIES
   therubyracer
   uglifier (>= 1.0.3)
   wiselinks
-
-BUNDLED WITH
-   1.12.1
index 1c7363dcaf909241d8d805b1e8aec750376304ba..5f80fb2c707dc1b5a72162b5a16db88508b3a1c1 100644 (file)
@@ -2680,8 +2680,6 @@ INSERT INTO schema_migrations (version) VALUES ('20160506175108');
 
 INSERT INTO schema_migrations (version) VALUES ('20160509143250');
 
-INSERT INTO schema_migrations (version) VALUES ('20160808151459');
-
 INSERT INTO schema_migrations (version) VALUES ('20160808151559');
 
 INSERT INTO schema_migrations (version) VALUES ('20160819195557');
index ba7095925db10f4b0441006c0165eaf0c1a96666..9ef6fa244ce6f3a919fc1458d7b3a44016c96cf7 100644 (file)
@@ -134,7 +134,6 @@ class InodeCache(object):
     def __init__(self, cap, min_entries=4):
         self._entries = collections.OrderedDict()
         self._by_uuid = {}
-        self._counter = itertools.count(0)
         self.cap = cap
         self._total = 0
         self.min_entries = min_entries
@@ -153,7 +152,7 @@ class InodeCache(object):
                 return False
             obj.clear()
         self._total -= obj.cache_size
-        del self._entries[obj.cache_priority]
+        del self._entries[obj.inode]
         if obj.cache_uuid:
             self._by_uuid[obj.cache_uuid].remove(obj)
             if not self._by_uuid[obj.cache_uuid]:
@@ -165,16 +164,15 @@ class InodeCache(object):
 
     def cap_cache(self):
         if self._total > self.cap:
-            for key in list(self._entries.keys()):
+            for ent in self._entries.values():
                 if self._total < self.cap or len(self._entries) < self.min_entries:
                     break
-                self._remove(self._entries[key], True)
+                self._remove(ent, True)
 
     def manage(self, obj):
         if obj.persisted():
-            obj.cache_priority = next(self._counter)
             obj.cache_size = obj.objsize()
-            self._entries[obj.cache_priority] = obj
+            self._entries[obj.inode] = obj
             obj.cache_uuid = obj.uuid()
             if obj.cache_uuid:
                 if obj.cache_uuid not in self._by_uuid:
@@ -185,17 +183,15 @@ class InodeCache(object):
             self._total += obj.objsize()
             _logger.debug("InodeCache touched inode %i (size %i) (uuid %s) total now %i", obj.inode, obj.objsize(), obj.cache_uuid, self._total)
             self.cap_cache()
-        else:
-            obj.cache_priority = None
 
     def touch(self, obj):
         if obj.persisted():
-            if obj.cache_priority in self._entries:
+            if obj.inode in self._entries:
                 self._remove(obj, False)
             self.manage(obj)
 
     def unmanage(self, obj):
-        if obj.persisted() and obj.cache_priority in self._entries:
+        if obj.persisted() and obj.inode in self._entries:
             self._remove(obj, True)
 
     def find_by_uuid(self, uuid):
index 532f110940c56a4e3a106ec6877162e7146a87f6..43f53c9b1d390b95b208fa6a737315fe40e8db5f 100644 (file)
@@ -64,7 +64,6 @@ class FreshBase(object):
         self.use_count = 0
         self.ref_count = 0
         self.dead = False
-        self.cache_priority = None
         self.cache_size = 0
         self.cache_uuid = None
         self.allow_attr_cache = True