From d55a6579e3f25c5e1a655362bdf03fedf8c49ba2 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 6 Jan 2011 11:09:01 -0800 Subject: [PATCH] osd, rados: pgls filter cleanups --- src/osd/ReplicatedPG.cc | 16 ++++------------ src/rados.cc | 12 +++++++++--- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 7e7ba916fd094..204d52c5871e1 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -145,22 +145,14 @@ void ReplicatedPG::wait_for_degraded_object(const sobject_t& soid, Message *m) bool PGLSParentFilter::filter(bufferlist& xattr_data, bufferlist& outdata) { bufferlist::iterator iter = xattr_data.begin(); - __u8 v; - generic_dout(0) << "PGLSParentFilter::filter" << dendl; + inode_backtrace_t bt; - ::decode(v, iter); - generic_dout(0) << "v=" << (int)v << dendl; - if (v < 3) - return false; + generic_dout(0) << "PGLSParentFilter::filter" << dendl; - vector ancestors; - inodeno_t ino; - ::decode(ino, iter); - ::decode(ancestors, iter); - generic_dout(0) << "ino=" << ino << dendl; + ::decode(bt, iter); vector::iterator vi; - for (vi = ancestors.begin(); vi != ancestors.end(); ++vi) { + for (vi = bt.ancestors.begin(); vi != bt.ancestors.end(); ++vi) { generic_dout(0) << "vi->dirino=" << vi->dirino << " parent_ino=" << parent_ino << dendl; if ( vi->dirino == parent_ino) { ::encode(*vi, outdata); diff --git a/src/rados.cc b/src/rados.cc index 3e57d0bc654c5..a5c2ad0ffdcf1 100644 --- a/src/rados.cc +++ b/src/rados.cc @@ -238,22 +238,28 @@ int main(int argc, const char **argv) if (filter) { char *flt_str = strdup(filter); char *type = strtok(flt_str, " "); - char *xattr = strtok(NULL, " "); + if (!type) { + cerr << "filter type was not specified" << std::endl; + goto out; + } + char *xattr = NULL; + if (strcmp(type, "parent") != 0) + xattr = strtok(NULL, " "); char *val = strtok(NULL, " "); - if (!type || !xattr || !val) { + if (!val) { cerr << "filter was not specified correctly" << std::endl; goto out; } bufferlist bl; ::encode(type, bl); - ::encode(xattr, bl); if (strcmp(type, "parent") == 0) { inodeno_t int_val = strtoll(val, NULL, 0); ::encode(int_val, bl); filter_parent = true; } else if (strcmp(type, "plain") == 0) { + ::encode(xattr, bl); ::encode(val, bl); } else { cerr << "unknown filter type" << std::endl; -- 2.39.5