summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2013-01-27 15:16:19 +0800
committerYan, Zheng <zheng.z.yan@intel.com>2013-01-29 10:17:37 +0800
commitabc4c78550946a5640c0c8ea912e990557718521 (patch)
tree2a2c3f48e4703762e41c124ec1997a51ff8abf1f
parente69e7e5d0eae6581049d22c07ea3cda773c80f13 (diff)
downloadceph-abc4c78550946a5640c0c8ea912e990557718521.tar.gz
mds: allow handling slave request in the clientreplay stage
replaying a client request may need to create slave request and the slave MDS can be also in the clientreplay stage. Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
-rw-r--r--src/mds/Server.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/mds/Server.cc b/src/mds/Server.cc
index 9d08c202c67..04bcba71229 100644
--- a/src/mds/Server.cc
+++ b/src/mds/Server.cc
@@ -101,6 +101,10 @@ void Server::dispatch(Message *m)
(m->get_type() == CEPH_MSG_CLIENT_REQUEST &&
((MClientRequest*)m)->is_replay()))) {
// replaying!
+ } else if (mds->is_clientreplay() && m->get_type() == MSG_MDS_SLAVE_REQUEST &&
+ (((MMDSSlaveRequest*)m)->is_reply() ||
+ !mds->mdsmap->is_active(m->get_source().num()))) {
+ // slave reply or the master is also in the clientreplay stage
} else {
dout(3) << "not active yet, waiting" << dendl;
mds->wait_for_active(new C_MDS_RetryMessage(mds, m));