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>
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);