Commit d66bbd44 authored by Sage Weil's avatar Sage Weil

ceph: avoid picking MDS that is not active

Ignore replication or auth frag data if it indicates an MDS that is not
active.  This can happen if the MDS shuts down and the client has stale
data about the namespace distribution across the MDS cluster.  If that's
the case, fall back to directing the request based on the auth cap (which
should always be accurate).
Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent 7e57b81c
...@@ -693,9 +693,11 @@ static int __choose_mds(struct ceph_mds_client *mdsc, ...@@ -693,9 +693,11 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
dout("choose_mds %p %llx.%llx " dout("choose_mds %p %llx.%llx "
"frag %u mds%d (%d/%d)\n", "frag %u mds%d (%d/%d)\n",
inode, ceph_vinop(inode), inode, ceph_vinop(inode),
frag.frag, frag.mds, frag.frag, mds,
(int)r, frag.ndist); (int)r, frag.ndist);
return mds; if (ceph_mdsmap_get_state(mdsc->mdsmap, mds) >=
CEPH_MDS_STATE_ACTIVE)
return mds;
} }
/* since this file/dir wasn't known to be /* since this file/dir wasn't known to be
...@@ -708,7 +710,9 @@ static int __choose_mds(struct ceph_mds_client *mdsc, ...@@ -708,7 +710,9 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
dout("choose_mds %p %llx.%llx " dout("choose_mds %p %llx.%llx "
"frag %u mds%d (auth)\n", "frag %u mds%d (auth)\n",
inode, ceph_vinop(inode), frag.frag, mds); inode, ceph_vinop(inode), frag.frag, mds);
return mds; if (ceph_mdsmap_get_state(mdsc->mdsmap, mds) >=
CEPH_MDS_STATE_ACTIVE)
return mds;
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment