mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 16:44:10 +08:00
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: Sage Weil <sage@newdream.net>
This commit is contained in:
parent
7e57b81c76
commit
d66bbd441c
@ -693,9 +693,11 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
|
||||
dout("choose_mds %p %llx.%llx "
|
||||
"frag %u mds%d (%d/%d)\n",
|
||||
inode, ceph_vinop(inode),
|
||||
frag.frag, frag.mds,
|
||||
frag.frag, mds,
|
||||
(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
|
||||
@ -708,7 +710,9 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
|
||||
dout("choose_mds %p %llx.%llx "
|
||||
"frag %u mds%d (auth)\n",
|
||||
inode, ceph_vinop(inode), frag.frag, mds);
|
||||
return mds;
|
||||
if (ceph_mdsmap_get_state(mdsc->mdsmap, mds) >=
|
||||
CEPH_MDS_STATE_ACTIVE)
|
||||
return mds;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user