]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: handle encoding errors on MDSTable load
authorJohn Spray <john.spray@redhat.com>
Thu, 19 Mar 2015 15:30:15 +0000 (15:30 +0000)
committerJohn Spray <john.spray@redhat.com>
Mon, 23 Mar 2015 18:19:17 +0000 (18:19 +0000)
Signed-off-by: John Spray <john.spray@redhat.com>
src/mds/MDSTable.cc

index 5471ab53fc41ea6b3f090e80d38f1a64760145ef..bf630f9e919480c9e29854ccf7b0bbb82118e87f 100644 (file)
@@ -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);