summaryrefslogtreecommitdiffstats
path: root/src/mds/RecoveryQueue.cc
diff options
context:
space:
mode:
authorJohn Spray <john.spray@redhat.com>2017-03-15 23:16:55 +0100
committerJohn Spray <john.spray@redhat.com>2017-03-17 12:51:15 +0100
commitd98c56bc29219ab2e5bb64b3fdb584c11a061d4f (patch)
tree0f92a4833138f5f4b4c2ef2351ec1d22421caa48 /src/mds/RecoveryQueue.cc
parentMerge pull request #14012 from optimistyzy/0317_2 (diff)
downloadceph-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.cc10
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);