]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: go back to compact_map for replicas
authorPatrick Donnelly <pdonnell@redhat.com>
Tue, 12 Sep 2017 21:29:49 +0000 (14:29 -0700)
committerPatrick Donnelly <pdonnell@redhat.com>
Tue, 12 Sep 2017 22:46:23 +0000 (15:46 -0700)
Zheng observed that an alloc_ptr doesn't really work in this case since any
call to get_replicas() will cause the map to be allocated, nullifying the
benefit. Use a compact_map until a better solution can be written. (This means
that the map will be allocated outside the mempool.)

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/mds/MDSCacheObject.h

index 845a4a92f0325ba7f1b14b2fe9eb20af59517562..96493d4dd8cf78e54c1a4b1d7e9011e0e0465c4d 100644 (file)
@@ -253,8 +253,8 @@ protected:
   // replication (across mds cluster)
  protected:
   unsigned             replica_nonce; // [replica] defined on replica
-  typedef mempool::mds_co::map<mds_rank_t,unsigned> replica_map_type;
-  alloc_ptr<replica_map_type> replica_map;   // [auth] mds -> nonce
+  typedef compact_map<mds_rank_t,unsigned> replica_map_type;
+  replica_map_type replica_map;   // [auth] mds -> nonce
 
  public:
   bool is_replicated() const { return !get_replicas().empty(); }
@@ -281,16 +281,14 @@ protected:
     get_replicas().erase(mds);
     if (get_replicas().empty()) {
       put(PIN_REPLICATED);
-      replica_map.reset();
     }
   }
   void clear_replica_map() {
     if (!get_replicas().empty())
       put(PIN_REPLICATED);
-    replica_map.reset();
   }
-  replica_map_type& get_replicas() { return *replica_map; }
-  const replica_map_type& get_replicas() const { return *replica_map; }
+  replica_map_type& get_replicas() { return replica_map; }
+  const replica_map_type& get_replicas() const { return replica_map; }
   void list_replicas(std::set<mds_rank_t>& ls) const {
     for (const auto &p : get_replicas()) {
       ls.insert(p.first);