mirror of
https://github.com/ceph/ceph
synced 2024-12-16 16:39:21 +00:00
mds: go back to compact_map for replicas
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>
This commit is contained in:
parent
e035b64fcb
commit
5d67b5cc57
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user