X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fcls%2Fcephfs%2Fcls_cephfs_client.cc;fp=src%2Fceph%2Fsrc%2Fcls%2Fcephfs%2Fcls_cephfs_client.cc;h=0000000000000000000000000000000000000000;hb=7da45d65be36d36b880cc55c5036e96c24b53f00;hp=b039242731f067de1d382f7e3bb58f8fa0af79e5;hpb=691462d09d0987b47e112d6ee8740375df3c51b2;p=stor4nfv.git diff --git a/src/ceph/src/cls/cephfs/cls_cephfs_client.cc b/src/ceph/src/cls/cephfs/cls_cephfs_client.cc deleted file mode 100644 index b039242..0000000 --- a/src/ceph/src/cls/cephfs/cls_cephfs_client.cc +++ /dev/null @@ -1,176 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab -/* - * Ceph - scalable distributed file system - * - * Copyright (C) 2015 Red Hat - * - * This is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software - * Foundation. See file COPYING. - * - */ - - -#include "cls_cephfs_client.h" -#include "include/rados/librados.hpp" -#include "mds/CInode.h" - -#define XATTR_CEILING "scan_ceiling" -#define XATTR_MAX_MTIME "scan_max_mtime" -#define XATTR_MAX_SIZE "scan_max_size" - -int ClsCephFSClient::accumulate_inode_metadata( - librados::IoCtx &ctx, - inodeno_t inode_no, - const uint64_t obj_index, - const uint64_t obj_size, - const time_t mtime) -{ - AccumulateArgs args( - obj_index, - obj_size, - mtime, - XATTR_CEILING, - XATTR_MAX_MTIME, - XATTR_MAX_SIZE); - - // Generate 0th object name, where we will accumulate sizes/mtimes - object_t zeroth_object = InodeStore::get_object_name(inode_no, frag_t(), ""); - - // Construct a librados operation invoking our class method - librados::ObjectReadOperation op; - bufferlist inbl; - args.encode(inbl); - op.exec("cephfs", "accumulate_inode_metadata", inbl); - - // Execute op - bufferlist outbl; - return ctx.operate(zeroth_object.name, &op, &outbl); -} - -int ClsCephFSClient::delete_inode_accumulate_result( - librados::IoCtx &ctx, - const std::string &oid) -{ - librados::ObjectWriteOperation op; - - // Remove xattrs from object - // - op.rmxattr(XATTR_CEILING); - op.rmxattr(XATTR_MAX_SIZE); - op.rmxattr(XATTR_MAX_MTIME); - - return (ctx.operate(oid, &op)); -} - -int ClsCephFSClient::fetch_inode_accumulate_result( - librados::IoCtx &ctx, - const std::string &oid, - inode_backtrace_t *backtrace, - file_layout_t *layout, - AccumulateResult *result) -{ - assert(backtrace != NULL); - assert(result != NULL); - - librados::ObjectReadOperation op; - - int scan_ceiling_r = 0; - bufferlist scan_ceiling_bl; - op.getxattr(XATTR_CEILING, &scan_ceiling_bl, &scan_ceiling_r); - - int scan_max_size_r = 0; - bufferlist scan_max_size_bl; - op.getxattr(XATTR_MAX_SIZE, &scan_max_size_bl, &scan_max_size_r); - - int scan_max_mtime_r = 0; - bufferlist scan_max_mtime_bl; - op.getxattr(XATTR_MAX_MTIME, &scan_max_mtime_bl, &scan_max_mtime_r); - - int parent_r = 0; - bufferlist parent_bl; - op.getxattr("parent", &parent_bl, &parent_r); - op.set_op_flags2(librados::OP_FAILOK); - - int layout_r = 0; - bufferlist layout_bl; - op.getxattr("layout", &layout_bl, &layout_r); - op.set_op_flags2(librados::OP_FAILOK); - - bufferlist op_bl; - int r = ctx.operate(oid, &op, &op_bl); - if (r < 0) { - return r; - } - - // Load scan_ceiling - try { - bufferlist::iterator scan_ceiling_bl_iter = scan_ceiling_bl.begin(); - ObjCeiling ceiling; - ceiling.decode(scan_ceiling_bl_iter); - result->ceiling_obj_index = ceiling.id; - result->ceiling_obj_size = ceiling.size; - } catch (const buffer::error &err) { - //dout(4) << "Invalid size attr on '" << oid << "'" << dendl; - return -EINVAL; - } - - // Load scan_max_size - try { - bufferlist::iterator scan_max_size_bl_iter = scan_max_size_bl.begin(); - ::decode(result->max_obj_size, scan_max_size_bl_iter); - } catch (const buffer::error &err) { - //dout(4) << "Invalid size attr on '" << oid << "'" << dendl; - return -EINVAL; - } - - // Load scan_max_mtime - try { - bufferlist::iterator scan_max_mtime_bl_iter = scan_max_mtime_bl.begin(); - ::decode(result->max_mtime, scan_max_mtime_bl_iter); - } catch (const buffer::error &err) { - //dout(4) << "Invalid size attr on '" << oid << "'" << dendl; - return -EINVAL; - } - - // Deserialize backtrace - if (parent_bl.length()) { - try { - bufferlist::iterator q = parent_bl.begin(); - backtrace->decode(q); - } catch (buffer::error &e) { - //dout(4) << "Corrupt backtrace on '" << oid << "': " << e << dendl; - return -EINVAL; - } - } - - // Deserialize layout - if (layout_bl.length()) { - try { - bufferlist::iterator q = layout_bl.begin(); - ::decode(*layout, q); - } catch (buffer::error &e) { - return -EINVAL; - } - } - - return 0; -} - -void ClsCephFSClient::build_tag_filter( - const std::string &scrub_tag, - bufferlist *out_bl) -{ - assert(out_bl != NULL); - - // Leading part of bl is un-versioned string naming the filter - ::encode(std::string("cephfs.inode_tag"), *out_bl); - - // Filter-specific part of the bl: in our case this is a versioned structure - InodeTagFilterArgs args; - args.scrub_tag = scrub_tag; - args.encode(*out_bl); -} -