From 989736968b4ca5ca63d87ad22da8c7ede48df1ba Mon Sep 17 00:00:00 2001 From: John Spray Date: Thu, 19 Mar 2015 15:30:15 +0000 Subject: [PATCH] mds: handle encoding errors on MDSTable load Signed-off-by: John Spray --- src/mds/MDSTable.cc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/mds/MDSTable.cc b/src/mds/MDSTable.cc index 5471ab53fc41e..bf630f9e91948 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); -- 2.39.5