Skip to content

Commit

Permalink
mds: avoid calling rejoin_gather_finish() two times successively
Browse files Browse the repository at this point in the history
If MDCache::rejoin_gather is empty and MDCache::rejoins_pending is true
when MDCache::process_imported_caps() calls maybe_send_pending_rejoins()
Both MDCache::rejoin_send_rejoins() and MDCache::process_imported_caps()
may call rejoin_gather_finish().

Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Fixes: http://tracker.ceph.com/issues/24047
  • Loading branch information
ukernel committed May 9, 2018
1 parent e510e29 commit 0451dae
Showing 1 changed file with 3 additions and 4 deletions.
7 changes: 3 additions & 4 deletions src/mds/MDCache.cc
Expand Up @@ -4213,7 +4213,7 @@ void MDCache::rejoin_send_rejoins()
rejoins_pending = false;

// nothing?
if (mds->is_rejoin() && rejoins.empty()) {
if (mds->is_rejoin() && rejoin_gather.empty()) {
dout(10) << "nothing to rejoin" << dendl;
rejoin_gather_finish();
}
Expand Down Expand Up @@ -5542,11 +5542,10 @@ bool MDCache::process_imported_caps()
} else {
trim_non_auth();

assert(rejoin_gather.count(mds->get_nodeid()));
rejoin_gather.erase(mds->get_nodeid());
assert(!rejoin_ack_gather.count(mds->get_nodeid()));
maybe_send_pending_rejoins();

if (rejoin_gather.empty() && rejoin_ack_gather.count(mds->get_nodeid()))
rejoin_gather_finish();
}
return false;
}
Expand Down

0 comments on commit 0451dae

Please sign in to comment.