dout(10) << "logged_master_update " << reqid << dendl;
assert(uncommitted_masters.count(reqid));
uncommitted_masters[reqid].safe = true;
- if (pending_masters.count(reqid)) {
- pending_masters.erase(reqid);
+ auto p = pending_masters.find(reqid);
+ if (p != pending_masters.end()) {
+ pending_masters.erase(p);
if (pending_masters.empty())
process_delayed_resolve();
}
<< resolve_ack_gather << ")" << dendl;
return;
}
- if (!need_resolve_rollback.empty()) {
+ if (!resolve_need_rollback.empty()) {
dout(10) << "send_resolves still waiting for rollback to commit on ("
- << need_resolve_rollback << ")" << dendl;
+ << resolve_need_rollback << ")" << dendl;
return;
}
send_subtree_resolves();
resolves_pending = false;
}
+void MDCache::maybe_finish_slave_resolve() {
+ if (resolve_ack_gather.empty() && resolve_need_rollback.empty()) {
+ send_subtree_resolves();
+ process_delayed_resolve();
+ }
+}
+
void MDCache::handle_mds_failure(mds_rank_t who)
{
dout(7) << "handle_mds_failure mds." << who << dendl;
return;
}
- if (!resolve_ack_gather.empty() || !need_resolve_rollback.empty()) {
+ if (!resolve_ack_gather.empty() || !resolve_need_rollback.empty()) {
dout(10) << "delay processing subtree resolve" << dendl;
delayed_resolve[from] = m;
return;
void MDCache::maybe_resolve_finish()
{
assert(resolve_ack_gather.empty());
- assert(need_resolve_rollback.empty());
+ assert(resolve_need_rollback.empty());
if (!resolve_gather.empty()) {
dout(10) << "maybe_resolve_finish still waiting for resolves ("
}
}
- if (!ambiguous_slave_updates.count(from))
+ if (!ambiguous_slave_updates.count(from)) {
resolve_ack_gather.erase(from);
- if (resolve_ack_gather.empty() && need_resolve_rollback.empty()) {
- send_subtree_resolves();
- process_delayed_resolve();
+ maybe_finish_slave_resolve();
}
ack->put();
}
void MDCache::finish_rollback(metareqid_t reqid) {
- assert(need_resolve_rollback.count(reqid));
+ auto p = resolve_need_rollback.find(reqid);
+ assert(p != resolve_need_rollback.end());
if (mds->is_resolve())
- finish_uncommitted_slave_update(reqid, need_resolve_rollback[reqid]);
- need_resolve_rollback.erase(reqid);
- if (resolve_ack_gather.empty() && need_resolve_rollback.empty()) {
- send_subtree_resolves();
- process_delayed_resolve();
- }
+ finish_uncommitted_slave_update(reqid, p->second);
+ resolve_need_rollback.erase(p);
+ maybe_finish_slave_resolve();
}
void MDCache::disambiguate_other_imports()
bool resolves_pending;
set<mds_rank_t> resolve_gather; // nodes i need resolves from
set<mds_rank_t> resolve_ack_gather; // nodes i need a resolve_ack from
- map<metareqid_t, mds_rank_t> need_resolve_rollback; // rollbacks i'm writing to the journal
+ map<metareqid_t, mds_rank_t> resolve_need_rollback; // rollbacks i'm writing to the journal
map<mds_rank_t, MMDSResolve*> delayed_resolve;
void handle_resolve(MMDSResolve *m);
void add_uncommitted_slave_update(metareqid_t reqid, mds_rank_t master, MDSlaveUpdate*);
void finish_uncommitted_slave_update(metareqid_t reqid, mds_rank_t master);
MDSlaveUpdate* get_uncommitted_slave_update(metareqid_t reqid, mds_rank_t master);
+
+ void send_slave_resolves();
+ void send_subtree_resolves();
+ void maybe_finish_slave_resolve();
+
public:
void recalc_auth_bits(bool replay);
void remove_inode_recursive(CInode *in);
}
void add_rollback(metareqid_t reqid, mds_rank_t master) {
- need_resolve_rollback[reqid] = master;
+ resolve_need_rollback[reqid] = master;
}
void finish_rollback(metareqid_t reqid);
void finish_ambiguous_import(dirfrag_t dirino);
void resolve_start(MDSInternalContext *resolve_done_);
void send_resolves();
- void send_slave_resolves();
- void send_subtree_resolves();
void maybe_send_pending_resolves() {
if (resolves_pending)
send_subtree_resolves();