]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: drop osdmap pool name cache
authorSage Weil <sage@redhat.com>
Sun, 20 Jul 2014 17:36:44 +0000 (10:36 -0700)
committerJohn Spray <john.spray@redhat.com>
Mon, 25 Aug 2014 00:34:01 +0000 (01:34 +0100)
We now have a rwlock for Objecter; no more need for a separate cache here.

Signed-off-by: Sage Weil <sage@redhat.com>
src/librados/RadosClient.cc
src/librados/RadosClient.h

index aa4af4d24456a7d21173e303b17583e00255c09c..964521f787ca7be439bb1f9967c885a72fc5624c 100644 (file)
@@ -74,10 +74,7 @@ librados::RadosClient::RadosClient(CephContext *cct_)
     messenger(NULL),
     instance_id(0),
     objecter(NULL),
-    osdmap_epoch(0),
-    pool_cache_epoch(0),
     lock("librados::RadosClient::lock"),
-    pool_cache_rwl("librados::RadosClient::pool_cache_rwl"),
     timer(cct, lock),
     refcnt(1),
     log_last_version(0), log_cb(NULL), log_cb_arg(NULL),
@@ -88,39 +85,9 @@ librados::RadosClient::RadosClient(CephContext *cct_)
 
 int64_t librados::RadosClient::lookup_pool(const char *name)
 {
-  pool_cache_rwl.get_read();
-  if (pool_cache_epoch && pool_cache_epoch == osdmap_epoch) {
-    map<string, int64_t>::iterator iter = pool_cache.find(name);
-    if (iter != pool_cache.end()) {
-      uint64_t val = iter->second;
-      pool_cache_rwl.unlock();
-      return val;
-    }
-  }
-
-  pool_cache_rwl.unlock();
-
-  lock.Lock();
-
-  int r = wait_for_osdmap();
-  if (r < 0) {
-    lock.Unlock();
-    return r;
-  }
-  int64_t ret = osdmap.lookup_pg_pool_name(name);
-  pool_cache_rwl.get_write();
-  lock.Unlock();
-  if (ret < 0) {
-    pool_cache_rwl.unlock();
-    return -ENOENT;
-  }
-
-  if (pool_cache_epoch != osdmap_epoch) {
-    pool_cache.clear();
-    pool_cache_epoch = osdmap_epoch;
-  }
-  pool_cache[name] = ret;
-  pool_cache_rwl.unlock();
+  const OSDMap *osdmap = objecter->get_osdmap_read();
+  int64_t ret = osdmap->lookup_pg_pool_name(name);
+  objecter->put_osdmap_read();
   return ret;
 }
 
@@ -384,9 +351,6 @@ bool librados::RadosClient::_dispatch(Message *m)
   // OSD
   case CEPH_MSG_OSD_MAP:
     lock.Lock();
-    pool_cache_rwl.get_write();
-    osdmap_epoch = osdmap.get_epoch();
-    pool_cache_rwl.unlock();
     cond.Signal();
     lock.Unlock();
     break;
index e608ced8d8e3096b01b23898e49205f4c48fc360..793feb7ab977eff32f2e6c147141e78110c3e841 100755 (executable)
@@ -63,13 +63,7 @@ private:
 
   Objecter *objecter;
 
-  map<string, int64_t> pool_cache;
-
-  epoch_t osdmap_epoch;
-  epoch_t pool_cache_epoch;
-
   Mutex lock;
-  RWLock pool_cache_rwl;
   Cond cond;
   SafeTimer timer;
   int refcnt;