]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: change ObjectCache::lru from deque back to list
authorCasey Bodley <cbodley@redhat.com>
Wed, 3 Jan 2018 19:34:41 +0000 (14:34 -0500)
committerCasey Bodley <cbodley@redhat.com>
Wed, 3 Jan 2018 19:39:03 +0000 (14:39 -0500)
ObjectCacheEntry stores an lru_iter into this lru, and depends on that
iterator remaining valid as other entries are inserted/erased

Fixes: http://tracker.ceph.com/issues/22560
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_cache.cc
src/rgw/rgw_cache.h

index 43c03ec5ecfca1050caba8342db096a3f2372cf6..779a569625c6c06fb5cb2a171452a46585256d61 100644 (file)
@@ -209,7 +209,7 @@ void ObjectCache::remove(string& name)
 }
 
 void ObjectCache::touch_lru(string& name, ObjectCacheEntry& entry,
-                           std::deque<string>::iterator& lru_iter)
+                           std::list<string>::iterator& lru_iter)
 {
   while (lru_size > (size_t)cct->_conf->rgw_cache_lru_size) {
     auto iter = lru.begin();
@@ -249,7 +249,7 @@ void ObjectCache::touch_lru(string& name, ObjectCacheEntry& entry,
 }
 
 void ObjectCache::remove_lru(string& name,
-                            std::deque<string>::iterator& lru_iter)
+                            std::list<string>::iterator& lru_iter)
 {
   if (lru_iter == lru.end())
     return;
index 880001647af8bc7c80cae2925f85355cb96cfa62..b6066b6b544d83695a4dfb6b24a49a93a7629604 100644 (file)
@@ -128,7 +128,7 @@ WRITE_CLASS_ENCODER(RGWCacheNotifyInfo)
 
 struct ObjectCacheEntry {
   ObjectCacheInfo info;
-  std::deque<string>::iterator lru_iter;
+  std::list<string>::iterator lru_iter;
   uint64_t lru_promotion_ts;
   uint64_t gen;
   std::vector<pair<RGWChainedCache *, string> > chained_entries;
@@ -138,7 +138,7 @@ struct ObjectCacheEntry {
 
 class ObjectCache {
   std::unordered_map<string, ObjectCacheEntry> cache_map;
-  std::deque<string> lru;
+  std::list<string> lru;
   unsigned long lru_size;
   unsigned long lru_counter;
   unsigned long lru_window;
@@ -151,8 +151,8 @@ class ObjectCache {
   ceph::timespan expiry;
 
   void touch_lru(string& name, ObjectCacheEntry& entry,
-                std::deque<string>::iterator& lru_iter);
-  void remove_lru(string& name, std::deque<string>::iterator& lru_iter);
+                std::list<string>::iterator& lru_iter);
+  void remove_lru(string& name, std::list<string>::iterator& lru_iter);
   void invalidate_lru(ObjectCacheEntry& entry);
 
   void do_invalidate_all();