1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab ft=cpp
5 #include "svc_meta_be.h"
9 #define dout_subsys ceph_subsys_rgw
13 RGWSI_MetaBackend::Context::~Context() {} // needed, even though destructor is pure virtual
14 RGWSI_MetaBackend::Module::~Module() {} // ditto
15 RGWSI_MetaBackend::PutParams::~PutParams() {} // ...
16 RGWSI_MetaBackend::GetParams::~GetParams() {} // ...
17 RGWSI_MetaBackend::RemoveParams::~RemoveParams() {} // ...
19 int RGWSI_MetaBackend::pre_modify(const DoutPrefixProvider
*dpp
,
20 RGWSI_MetaBackend::Context
*ctx
,
22 RGWMetadataLogData
& log_data
,
23 RGWObjVersionTracker
*objv_tracker
,
24 RGWMDLogStatus op_type
,
27 /* if write version has not been set, and there's a read version, set it so that we can
31 objv_tracker
->read_version
.ver
&& !objv_tracker
->write_version
.ver
) {
32 objv_tracker
->write_version
= objv_tracker
->read_version
;
33 objv_tracker
->write_version
.ver
++;
39 int RGWSI_MetaBackend::post_modify(const DoutPrefixProvider
*dpp
,
40 RGWSI_MetaBackend::Context
*ctx
,
42 RGWMetadataLogData
& log_data
,
43 RGWObjVersionTracker
*objv_tracker
, int ret
,
49 int RGWSI_MetaBackend::prepare_mutate(RGWSI_MetaBackend::Context
*ctx
,
51 const real_time
& mtime
,
52 RGWObjVersionTracker
*objv_tracker
,
54 const DoutPrefixProvider
*dpp
)
58 int ret
= call_with_get_params(&orig_mtime
, [&](GetParams
& params
) {
59 return get_entry(ctx
, key
, params
, objv_tracker
, y
, dpp
);
61 if (ret
< 0 && ret
!= -ENOENT
) {
65 if (objv_tracker
->write_version
.tag
.empty()) {
66 if (objv_tracker
->read_version
.tag
.empty()) {
67 objv_tracker
->generate_new_write_ver(cct
);
69 objv_tracker
->write_version
= objv_tracker
->read_version
;
70 objv_tracker
->write_version
.ver
++;
76 int RGWSI_MetaBackend::do_mutate(RGWSI_MetaBackend::Context
*ctx
,
78 const ceph::real_time
& mtime
,
79 RGWObjVersionTracker
*objv_tracker
,
80 RGWMDLogStatus op_type
,
82 std::function
<int()> f
,
84 const DoutPrefixProvider
*dpp
)
88 if (generic_prepare
) {
89 ret
= prepare_mutate(ctx
, key
, mtime
, objv_tracker
, y
, dpp
);
91 ret
== STATUS_NO_APPLY
) {
96 RGWMetadataLogData log_data
;
97 ret
= pre_modify(dpp
, ctx
, key
, log_data
, objv_tracker
, op_type
, y
);
104 /* cascading ret into post_modify() */
106 ret
= post_modify(dpp
, ctx
, key
, log_data
, objv_tracker
, ret
, y
);
113 int RGWSI_MetaBackend::get(Context
*ctx
,
116 RGWObjVersionTracker
*objv_tracker
,
118 const DoutPrefixProvider
*dpp
,
121 return get_entry(ctx
, key
, params
, objv_tracker
, y
, dpp
, get_raw_attrs
);
124 int RGWSI_MetaBackend::put(Context
*ctx
,
127 RGWObjVersionTracker
*objv_tracker
,
129 const DoutPrefixProvider
*dpp
)
131 std::function
<int()> f
= [&]() {
132 return put_entry(dpp
, ctx
, key
, params
, objv_tracker
, y
);
135 return do_mutate(ctx
, key
, params
.mtime
, objv_tracker
,
143 int RGWSI_MetaBackend::remove(Context
*ctx
,
145 RemoveParams
& params
,
146 RGWObjVersionTracker
*objv_tracker
,
148 const DoutPrefixProvider
*dpp
)
150 std::function
<int()> f
= [&]() {
151 return remove_entry(dpp
, ctx
, key
, params
, objv_tracker
, y
);
154 return do_mutate(ctx
, key
, params
.mtime
, objv_tracker
,
162 int RGWSI_MetaBackend::mutate(Context
*ctx
,
163 const std::string
& key
,
164 MutateParams
& params
,
165 RGWObjVersionTracker
*objv_tracker
,
167 std::function
<int()> f
,
168 const DoutPrefixProvider
*dpp
)
170 return do_mutate(ctx
, key
, params
.mtime
, objv_tracker
,
177 int RGWSI_MetaBackend_Handler::call(std::optional
<RGWSI_MetaBackend_CtxParams
> bectx_params
,
178 std::function
<int(Op
*)> f
)
180 return be
->call(bectx_params
, [&](RGWSI_MetaBackend::Context
*ctx
) {
187 RGWSI_MetaBackend_Handler::Op_ManagedCtx::Op_ManagedCtx(RGWSI_MetaBackend_Handler
*handler
) : Op(handler
->be
, handler
->be
->alloc_ctx())