diff options
author | John Spray <john.spray@redhat.com> | 2017-03-15 23:16:55 +0100 |
---|---|---|
committer | John Spray <john.spray@redhat.com> | 2017-03-17 12:51:15 +0100 |
commit | d98c56bc29219ab2e5bb64b3fdb584c11a061d4f (patch) | |
tree | 0f92a4833138f5f4b4c2ef2351ec1d22421caa48 /src/mds/RecoveryQueue.cc | |
parent | Merge pull request #14012 from optimistyzy/0317_2 (diff) | |
download | ceph-d98c56bc29219ab2e5bb64b3fdb584c11a061d4f.tar.xz ceph-d98c56bc29219ab2e5bb64b3fdb584c11a061d4f.zip |
mds: don't assert on read errors in RecoveryQueue
On reflection, an error here is much more likely to
be some kind of system/config error than it is
to be something wrong with a particular file's objects,
so do a rank-wide damaged() instead of inventing
a whole new type in DamageTable just for this.
Fixes: http://tracker.ceph.com/issues/19282
Signed-off-by: John Spray <john.spray@redhat.com>
Diffstat (limited to 'src/mds/RecoveryQueue.cc')
-rw-r--r-- | src/mds/RecoveryQueue.cc | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/mds/RecoveryQueue.cc b/src/mds/RecoveryQueue.cc index bd8fe0dd88d..aca08bbffe0 100644 --- a/src/mds/RecoveryQueue.cc +++ b/src/mds/RecoveryQueue.cc @@ -162,8 +162,16 @@ void RecoveryQueue::_recovered(CInode *in, int r, uint64_t size, utime_t mtime) if (r == -EBLACKLISTED) { mds->respawn(); return; + } else { + // Something wrong on the OSD side trying to recover the size + // of this inode. In principle we could record this as a piece + // of per-inode damage, but it's actually more likely that + // this indicates something wrong with the MDS (like maybe + // it has the wrong auth caps?) + mds->clog->error() << " OSD read error while recovering size for inode 0x" + << std::hex << in->ino() << std::dec; + mds->damaged(); } - assert(0 == "unexpected error from osd during recovery"); } file_recovering.erase(in); |