]> git.proxmox.com Git - ceph.git/blame - ceph/src/cls/version/cls_version_client.cc
bump version to 18.2.4-pve3
[ceph.git] / ceph / src / cls / version / cls_version_client.cc
CommitLineData
f67539c2
TL
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
7c673cae
FG
4#include <errno.h>
5
31f18b77 6#include "cls/version/cls_version_client.h"
7c673cae
FG
7#include "include/rados/librados.hpp"
8
9
10using namespace librados;
11
12
13void cls_version_set(librados::ObjectWriteOperation& op, obj_version& objv)
14{
15 bufferlist in;
16 cls_version_set_op call;
17 call.objv = objv;
11fdf7f2 18 encode(call, in);
7c673cae
FG
19 op.exec("version", "set", in);
20}
21
22void cls_version_inc(librados::ObjectWriteOperation& op)
23{
24 bufferlist in;
25 cls_version_inc_op call;
11fdf7f2 26 encode(call, in);
7c673cae
FG
27 op.exec("version", "inc", in);
28}
29
30void cls_version_inc(librados::ObjectWriteOperation& op, obj_version& objv, VersionCond cond)
31{
32 bufferlist in;
33 cls_version_inc_op call;
34 call.objv = objv;
f67539c2 35
7c673cae
FG
36 obj_version_cond c;
37 c.cond = cond;
38 c.ver = objv;
39
40 call.conds.push_back(c);
41
11fdf7f2 42 encode(call, in);
7c673cae
FG
43 op.exec("version", "inc_conds", in);
44}
45
46void cls_version_check(librados::ObjectOperation& op, obj_version& objv, VersionCond cond)
47{
48 bufferlist in;
49 cls_version_check_op call;
50 call.objv = objv;
51
52 obj_version_cond c;
53 c.cond = cond;
54 c.ver = objv;
55
56 call.conds.push_back(c);
57
11fdf7f2 58 encode(call, in);
7c673cae
FG
59 op.exec("version", "check_conds", in);
60}
61
62class VersionReadCtx : public ObjectOperationCompletion {
63 obj_version *objv;
64public:
65 explicit VersionReadCtx(obj_version *_objv) : objv(_objv) {}
66 void handle_completion(int r, bufferlist& outbl) override {
67 if (r >= 0) {
68 cls_version_read_ret ret;
69 try {
11fdf7f2
TL
70 auto iter = outbl.cbegin();
71 decode(ret, iter);
7c673cae 72 *objv = ret.objv;
f67539c2 73 } catch (ceph::buffer::error& err) {
7c673cae
FG
74 // nothing we can do about it atm
75 }
76 }
77 }
78};
79
80void cls_version_read(librados::ObjectReadOperation& op, obj_version *objv)
81{
82 bufferlist inbl;
83 op.exec("version", "read", inbl, new VersionReadCtx(objv));
84}
85
f67539c2 86int cls_version_read(librados::IoCtx& io_ctx, std::string& oid, obj_version *ver)
7c673cae
FG
87{
88 bufferlist in, out;
89 int r = io_ctx.exec(oid, "version", "read", in, out);
90 if (r < 0)
91 return r;
92
93 cls_version_read_ret ret;
94 try {
11fdf7f2
TL
95 auto iter = out.cbegin();
96 decode(ret, iter);
f67539c2 97 } catch (ceph::buffer::error& err) {
7c673cae
FG
98 return -EIO;
99 }
100
101 *ver = ret.objv;
102
103 return r;
104}