The internal representation may change, and we've dropped all the users.
Signed-off-by: Sage Weil <sage@newdream.net>
return 0;
}
-static int chunk_set_refs(cls_method_context_t hctx,
- bufferlist *in, bufferlist *out)
-{
- auto in_iter = in->cbegin();
-
- cls_cas_chunk_set_refs_op op;
- try {
- decode(op, in_iter);
- } catch (ceph::buffer::error& err) {
- CLS_LOG(1, "ERROR: cls_cas_chunk_set(): failed to decode entry\n");
- return -EINVAL;
- }
-
- if (!op.refs.size()) {
- return cls_cxx_remove(hctx);
- }
-
- chunk_obj_refcount objr;
- objr.refs = op.refs;
-
- int ret = chunk_set_refcount(hctx, objr);
- if (ret < 0)
- return ret;
-
- return 0;
-}
-
-static int chunk_read_refs(cls_method_context_t hctx,
- bufferlist *in, bufferlist *out)
-{
- chunk_obj_refcount objr;
-
- cls_cas_chunk_read_refs_ret read_ret;
- int ret = chunk_read_refcount(hctx, &objr);
- if (ret < 0)
- return ret;
-
- for (auto &p : objr.refs) {
- read_ret.refs.insert(p);
- }
-
- encode(read_ret, *out);
-
- return 0;
-}
-
static int references_chunk(cls_method_context_t hctx,
bufferlist *in, bufferlist *out)
{
cls_method_handle_t h_chunk_create_or_get_ref;
cls_method_handle_t h_chunk_get_ref;
cls_method_handle_t h_chunk_put_ref;
- cls_method_handle_t h_chunk_set_refs;
- cls_method_handle_t h_chunk_read_refs;
cls_method_handle_t h_references_chunk;
cls_register("cas", &h_class);
CLS_METHOD_RD | CLS_METHOD_WR,
chunk_put_ref,
&h_chunk_put_ref);
- cls_register_cxx_method(h_class, "chunk_set_refs",
- CLS_METHOD_RD | CLS_METHOD_WR,
- chunk_set_refs,
- &h_chunk_set_refs);
- cls_register_cxx_method(h_class, "chunk_read_refs", CLS_METHOD_RD,
- chunk_read_refs,
- &h_chunk_read_refs);
cls_register_cxx_method(h_class, "references_chunk", CLS_METHOD_RD,
references_chunk,
&h_references_chunk);
op.exec("cas", "chunk_put_ref", in);
}
-void cls_cas_chunk_set_refs(
- librados::ObjectWriteOperation& op,
- set<hobject_t>& refs)
-{
- bufferlist in;
- cls_cas_chunk_set_refs_op call;
- call.refs = refs;
- encode(call, in);
- op.exec("cas", "chunk_set_refs", in);
-}
-
-int cls_cas_chunk_read_refs(
- librados::IoCtx& io_ctx,
- string& oid,
- set<hobject_t> *refs)
-{
- bufferlist in, out;
- int r = io_ctx.exec(oid, "cas", "chunk_read_refs", in, out);
- if (r < 0)
- return r;
-
- cls_cas_chunk_read_refs_ret ret;
- try {
- auto iter = out.cbegin();
- decode(ret, iter);
- } catch (ceph::buffer::error& err) {
- return -EIO;
- }
-
- *refs = ret.refs;
-
- return r;
-}
-
int cls_cas_references_chunk(
librados::IoCtx& io_ctx,
const string& oid,
// advanced (used for scrub, repair, etc.)
//
-/// read list of all chunk references
-int cls_cas_chunk_read_refs(
- librados::IoCtx& io_ctx,
- std::string& oid,
- std::set<hobject_t> *refs);
-
-/// force update on chunk references
-void cls_cas_chunk_set_refs(
- librados::ObjectWriteOperation& op,
- std::set<hobject_t>& refs);
-
/// check if a tiered rados object links to a chunk
int cls_cas_references_chunk(
librados::IoCtx& io_ctx,
};
WRITE_CLASS_ENCODER(cls_cas_chunk_put_ref_op)
-
-struct cls_cas_chunk_set_refs_op {
- std::set<hobject_t> refs;
-
- cls_cas_chunk_set_refs_op() {}
-
- void encode(ceph::buffer::list& bl) const {
- ENCODE_START(1, 1, bl);
- encode(refs, bl);
- ENCODE_FINISH(bl);
- }
-
- void decode(ceph::buffer::list::const_iterator& bl) {
- DECODE_START(1, bl);
- decode(refs, bl);
- DECODE_FINISH(bl);
- }
-
- void dump(ceph::Formatter *f) const {
- f->open_array_section("refs");
- for (auto& i : refs) {
- f->dump_object("ref", i);
- }
- f->close_section();
- }
- static void generate_test_instances(std::list<cls_cas_chunk_set_refs_op*>& ls) {
- ls.push_back(new cls_cas_chunk_set_refs_op());
- }
-};
-WRITE_CLASS_ENCODER(cls_cas_chunk_set_refs_op)
-
-
-struct cls_cas_chunk_read_refs_ret {
- std::set<hobject_t> refs;
-
- cls_cas_chunk_read_refs_ret() {}
-
- void encode(ceph::buffer::list& bl) const {
- ENCODE_START(1, 1, bl);
- encode(refs, bl);
- ENCODE_FINISH(bl);
- }
-
- void decode(ceph::buffer::list::const_iterator& bl) {
- DECODE_START(1, bl);
- decode(refs, bl);
- DECODE_FINISH(bl);
- }
-
- void dump(ceph::Formatter *f) const {
- f->open_array_section("refs");
- for (auto& i : refs) {
- f->dump_object("ref", i);
- }
- f->close_section();
- }
- static void generate_test_instances(std::list<cls_cas_chunk_read_refs_ret*>& ls) {
- ls.push_back(new cls_cas_chunk_read_refs_ret());
- }
-};
-WRITE_CLASS_ENCODER(cls_cas_chunk_read_refs_ret)
-
#endif
TYPE(cls_cas_chunk_create_or_get_ref_op)
TYPE(cls_cas_chunk_get_ref_op)
TYPE(cls_cas_chunk_put_ref_op)
-TYPE(cls_cas_chunk_set_refs_op)
-TYPE(cls_cas_chunk_read_refs_ret)
#include "cls/cas/cls_cas_internal.h"
TYPE(chunk_obj_refcount)