summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-10-01 15:22:05 -0700
committerSage Weil <sage@inktank.com>2013-10-01 17:21:21 -0700
commit20974dc0520c754ea58e4364ac79cbb143b2f577 (patch)
treee1e8b4e352f7053a79c354bc8ec002e590fa2bdc
parenta9e5323586b5a3771a045c335f7b31cc912c7fe7 (diff)
downloadceph-20974dc0520c754ea58e4364ac79cbb143b2f577.tar.gz
rados: make 'tmap dump' gracefully handle non-tmap data
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/tools/rados/rados.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/tools/rados/rados.cc b/src/tools/rados/rados.cc
index fdf7e61d41e..009df5cd0af 100644
--- a/src/tools/rados/rados.cc
+++ b/src/tools/rados/rados.cc
@@ -1813,8 +1813,15 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts,
bufferlist::iterator p = outdata.begin();
bufferlist header;
map<string, bufferlist> kv;
- ::decode(header, p);
- ::decode(kv, p);
+ try {
+ ::decode(header, p);
+ ::decode(kv, p);
+ }
+ catch (buffer::error& e) {
+ cerr << "error decoding tmap " << pool_name << "/" << oid << std::endl;
+ ret = -EINVAL;
+ goto out;
+ }
cout << "header (" << header.length() << " bytes):\n";
header.hexdump(cout);
cout << "\n";