#define XATTR_CEILING "scan_ceiling"
#define XATTR_MAX_MTIME "scan_max_mtime"
#define XATTR_MAX_SIZE "scan_max_size"
+#define XATTR_POOL_ID "scan_pool_id"
int ClsCephFSClient::accumulate_inode_metadata(
librados::IoCtx &ctx,
inodeno_t inode_no,
const uint64_t obj_index,
const uint64_t obj_size,
+ const int64_t obj_pool_id,
const time_t mtime)
{
AccumulateArgs args(
object_t zeroth_object = InodeStore::get_object_name(inode_no, frag_t(), "");
// Construct a librados operation invoking our class method
- librados::ObjectReadOperation op;
+ librados::ObjectWriteOperation op;
bufferlist inbl;
args.encode(inbl);
op.exec("cephfs", "accumulate_inode_metadata", inbl);
+ if (obj_pool_id != -1) {
+ bufferlist bl;
+ encode(obj_pool_id, bl);
+ op.setxattr(XATTR_POOL_ID, bl);
+ }
+
// Execute op
- bufferlist outbl;
- return ctx.operate(zeroth_object.name, &op, &outbl);
+ return ctx.operate(zeroth_object.name, &op);
}
int ClsCephFSClient::delete_inode_accumulate_result(
op.rmxattr(XATTR_CEILING);
op.rmxattr(XATTR_MAX_SIZE);
op.rmxattr(XATTR_MAX_MTIME);
+ op.rmxattr(XATTR_POOL_ID);
+ op.set_op_flags2(librados::OP_FAILOK);
return (ctx.operate(oid, &op));
}
bufferlist scan_max_mtime_bl;
op.getxattr(XATTR_MAX_MTIME, &scan_max_mtime_bl, &scan_max_mtime_r);
+ int scan_pool_id_r = 0;
+ bufferlist scan_pool_id_bl;
+ op.getxattr(XATTR_POOL_ID, &scan_pool_id_bl, &scan_pool_id_r);
+ op.set_op_flags2(librados::OP_FAILOK);
+
int parent_r = 0;
bufferlist parent_bl;
op.getxattr("parent", &parent_bl, &parent_r);
result->ceiling_obj_index = ceiling.id;
result->ceiling_obj_size = ceiling.size;
} catch (const ceph::buffer::error &err) {
- //dout(4) << "Invalid size attr on '" << oid << "'" << dendl;
+ //dout(4) << "Invalid ceiling attr on '" << oid << "'" << dendl;
return -EINVAL;
}
return -EINVAL;
}
+ // Load scan_pool_id
+ if (scan_pool_id_bl.length()) {
+ try {
+ auto scan_pool_id_bl_iter = scan_pool_id_bl.cbegin();
+ decode(result->obj_pool_id, scan_pool_id_bl_iter);
+ } catch (const ceph::buffer::error &err) {
+ //dout(4) << "Invalid pool_id attr on '" << oid << "'" << dendl;
+ return -EINVAL;
+ }
+ }
+
// Load scan_max_mtime
try {
auto scan_max_mtime_bl_iter = scan_max_mtime_bl.cbegin();
decode(result->max_mtime, scan_max_mtime_bl_iter);
} catch (const ceph::buffer::error &err) {
- //dout(4) << "Invalid size attr on '" << oid << "'" << dendl;
+ //dout(4) << "Invalid mtime attr on '" << oid << "'" << dendl;
return -EINVAL;
}