void CDir::init_fragment_pins()
{
- if (!replica_map.empty())
+ if (is_replicated())
get(PIN_REPLICATED);
if (state_test(STATE_DIRTY))
get(PIN_DIRTY);
for (list<frag_t>::iterator p = frags.begin(); p != frags.end(); ++p) {
CDir *f = new CDir(inode, *p, cache, is_auth());
f->state_set(state & (MASK_STATE_FRAGMENT_KEPT | STATE_COMPLETE));
- f->replica_map = replica_map;
+ f->get_replicas() = get_replicas();
f->dir_auth = dir_auth;
f->init_fragment_pins();
f->set_version(get_version());
steal_dentry(dir->items.begin()->second);
// merge replica map
- for (compact_map<mds_rank_t,unsigned>::iterator p = dir->replicas_begin();
- p != dir->replicas_end();
- ++p) {
- unsigned cur = replica_map[p->first];
- if (p->second > cur)
- replica_map[p->first] = p->second;
+ for (const auto &p : dir->get_replicas()) {
+ unsigned cur = get_replicas()[p.first];
+ if (p.second > cur)
+ get_replicas()[p.first] = p.second;
}
// merge version
::encode(pop_auth_subtree, bl);
::encode(dir_rep_by, bl);
- ::encode(replica_map, bl);
+ ::encode(get_replicas(), bl);
get(PIN_TEMPEXPORTING);
}
pop_auth_subtree_nested.add(now, cache->decayrate, pop_auth_subtree);
::decode(dir_rep_by, blp);
- ::decode(replica_map, blp);
- if (!replica_map.empty()) get(PIN_REPLICATED);
+ ::decode(get_replicas(), blp);
+ if (is_replicated()) get(PIN_REPLICATED);
replica_nonce = 0; // no longer defined
return effective_size > fast_limit;
}
+MEMPOOL_DEFINE_OBJECT_FACTORY(CDir, co_dir, mds_co);