#include "svc_zone.h"
#include "svc_notify.h"
-#include "rgw/rgw_zone.h"
-#include "rgw/rgw_tools.h"
+#include "rgw_zone.h"
+#include "rgw_tools.h"
#define dout_subsys ceph_subsys_rgw
int RGWSI_SysObj_Cache::remove(const DoutPrefixProvider *dpp,
- RGWSysObjectCtxBase& obj_ctx,
RGWObjVersionTracker *objv_tracker,
const rgw_raw_obj& obj,
optional_yield y)
ldpp_dout(dpp, 0) << "ERROR: " << __func__ << "(): failed to distribute cache: r=" << r << dendl;
}
- return RGWSI_SysObj_Core::remove(dpp, obj_ctx, objv_tracker, obj, y);
+ return RGWSI_SysObj_Core::remove(dpp, objv_tracker, obj, y);
}
int RGWSI_SysObj_Cache::read(const DoutPrefixProvider *dpp,
- RGWSysObjectCtxBase& obj_ctx,
RGWSI_SysObj_Obj_GetObjState& read_state,
RGWObjVersionTracker *objv_tracker,
const rgw_raw_obj& obj,
bufferlist *obl, off_t ofs, off_t end,
+ ceph::real_time* pmtime, uint64_t* psize,
map<string, bufferlist> *attrs,
bool raw_attrs,
rgw_cache_entry_info *cache_info,
rgw_pool pool;
string oid;
if (ofs != 0) {
- return RGWSI_SysObj_Core::read(dpp, obj_ctx, read_state, objv_tracker,
- obj, obl, ofs, end, attrs, raw_attrs,
+ return RGWSI_SysObj_Core::read(dpp, read_state, objv_tracker, obj, obl,
+ ofs, end, pmtime, psize, attrs, raw_attrs,
cache_info, refresh_version, y);
}
uint32_t flags = (end != 0 ? CACHE_FLAG_DATA : 0);
if (objv_tracker)
flags |= CACHE_FLAG_OBJV;
+ if (pmtime || psize)
+ flags |= CACHE_FLAG_META;
if (attrs)
flags |= CACHE_FLAG_XATTRS;
i.copy_all(*obl);
if (objv_tracker)
objv_tracker->read_version = info.version;
+ if (pmtime) {
+ *pmtime = info.meta.mtime;
+ }
+ if (psize) {
+ *psize = info.meta.size;
+ }
if (attrs) {
if (raw_attrs) {
*attrs = info.xattrs;
if(r == -ENODATA)
return -ENOENT;
+ // if we only ask for one of mtime or size, ask for the other too so we can
+ // satisfy CACHE_FLAG_META
+ uint64_t size = 0;
+ real_time mtime;
+ if (pmtime) {
+ if (!psize) {
+ psize = &size;
+ }
+ } else if (psize) {
+ if (!pmtime) {
+ pmtime = &mtime;
+ }
+ }
+
map<string, bufferlist> unfiltered_attrset;
- r = RGWSI_SysObj_Core::read(dpp, obj_ctx, read_state, objv_tracker,
- obj, obl, ofs, end,
+ r = RGWSI_SysObj_Core::read(dpp, read_state, objv_tracker,
+ obj, obl, ofs, end, pmtime, psize,
(attrs ? &unfiltered_attrset : nullptr),
true, /* cache unfiltered attrs */
cache_info,
if (objv_tracker) {
info.version = objv_tracker->read_version;
}
+ if (pmtime) {
+ info.meta.mtime = *pmtime;
+ }
+ if (psize) {
+ info.meta.size = *psize;
+ }
if (attrs) {
info.xattrs = std::move(unfiltered_attrset);
if (raw_attrs) {
map<string, bufferlist>& attrs,
map<string, bufferlist> *rmattrs,
RGWObjVersionTracker *objv_tracker,
- optional_yield y)
+ bool exclusive, optional_yield y)
{
rgw_pool pool;
string oid;
}
info.status = 0;
info.flags = CACHE_FLAG_MODIFY_XATTRS;
- int ret = RGWSI_SysObj_Core::set_attrs(dpp, obj, attrs, rmattrs, objv_tracker, y);
+ int ret = RGWSI_SysObj_Core::set_attrs(dpp, obj, attrs, rmattrs, objv_tracker, exclusive, y);
string name = normal_name(pool, oid);
if (ret >= 0) {
if (objv_tracker && objv_tracker->read_version.ver) {
return ret;
}
-int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, uint64_t *psize, real_time *pmtime, uint64_t *pepoch,
- map<string, bufferlist> *attrs, bufferlist *first_chunk,
+int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj,
+ uint64_t *psize, real_time *pmtime,
+ map<string, bufferlist> *attrs,
RGWObjVersionTracker *objv_tracker,
optional_yield y)
{
uint64_t size;
real_time mtime;
- uint64_t epoch;
ObjectCacheInfo info;
uint32_t flags = CACHE_FLAG_META | CACHE_FLAG_XATTRS;
size = info.meta.size;
mtime = info.meta.mtime;
- epoch = info.epoch;
if (objv_tracker)
objv_tracker->read_version = info.version;
goto done;
if (r == -ENODATA) {
return -ENOENT;
}
- r = RGWSI_SysObj_Core::raw_stat(dpp, obj, &size, &mtime, &epoch, &info.xattrs,
- first_chunk, objv_tracker, y);
+ r = RGWSI_SysObj_Core::raw_stat(dpp, obj, &size, &mtime, &info.xattrs,
+ objv_tracker, y);
if (r < 0) {
if (r == -ENOENT) {
info.status = r;
return r;
}
info.status = 0;
- info.epoch = epoch;
info.meta.mtime = mtime;
info.meta.size = size;
info.flags = CACHE_FLAG_META | CACHE_FLAG_XATTRS;
*psize = size;
if (pmtime)
*pmtime = mtime;
- if (pepoch)
- *pepoch = epoch;
if (attrs)
*attrs = info.xattrs;
return 0;