From: John Spray Date: Thu, 19 Mar 2015 15:30:15 +0000 (+0000) Subject: mds: handle encoding errors on MDSTable load X-Git-Tag: v9.0.0~113^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=989736968b4ca5ca63d87ad22da8c7ede48df1ba;p=ceph.git mds: handle encoding errors on MDSTable load Signed-off-by: John Spray --- diff --git a/src/mds/MDSTable.cc b/src/mds/MDSTable.cc index 5471ab53fc41..bf630f9e9194 100644 --- a/src/mds/MDSTable.cc +++ b/src/mds/MDSTable.cc @@ -172,10 +172,18 @@ void MDSTable::load_2(int r, bufferlist& bl, Context *onfinish) dout(10) << "load_2 got " << bl.length() << " bytes" << dendl; bufferlist::iterator p = bl.begin(); - ::decode(version, p); - projected_version = committed_version = version; - dout(10) << "load_2 loaded v" << version << dendl; - decode_state(p); + + try { + ::decode(version, p); + projected_version = committed_version = version; + dout(10) << "load_2 loaded v" << version << dendl; + decode_state(p); + } catch (buffer::error &e) { + mds->clog->error() << "error decoding table object '" << get_object_name() + << "': " << e.what(); + mds->damaged(); + assert(r >= 0); // Should be unreachable because damaged() calls respawn() + } if (onfinish) { onfinish->complete(0);