]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/rgw/services/svc_sys_obj_cache.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / rgw / services / svc_sys_obj_cache.cc
index e7c595bd2a81f358283a9c756e6dc51c5a0e5ee7..d1b7a3dbb3e730d2d6542c1592e77bc7f3dd2bf7 100644 (file)
@@ -8,8 +8,8 @@
 #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
 
@@ -85,7 +85,6 @@ void RGWSI_SysObj_Cache::normalize_pool_and_obj(const rgw_pool& src_pool, const
 
 
 int RGWSI_SysObj_Cache::remove(const DoutPrefixProvider *dpp, 
-                               RGWSysObjectCtxBase& obj_ctx,
                                RGWObjVersionTracker *objv_tracker,
                                const rgw_raw_obj& obj,
                                optional_yield y)
@@ -104,15 +103,15 @@ int RGWSI_SysObj_Cache::remove(const DoutPrefixProvider *dpp,
     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,
@@ -122,8 +121,8 @@ int RGWSI_SysObj_Cache::read(const DoutPrefixProvider *dpp,
   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);
   }
 
@@ -135,6 +134,8 @@ int RGWSI_SysObj_Cache::read(const DoutPrefixProvider *dpp,
   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;
   
@@ -153,6 +154,12 @@ int RGWSI_SysObj_Cache::read(const DoutPrefixProvider *dpp,
     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;
@@ -165,9 +172,23 @@ int RGWSI_SysObj_Cache::read(const DoutPrefixProvider *dpp,
   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,
@@ -196,6 +217,12 @@ int RGWSI_SysObj_Cache::read(const DoutPrefixProvider *dpp,
   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) {
@@ -248,7 +275,7 @@ int RGWSI_SysObj_Cache::set_attrs(const DoutPrefixProvider *dpp,
                                   map<string, bufferlist>& attrs,
                                   map<string, bufferlist> *rmattrs,
                                   RGWObjVersionTracker *objv_tracker,
-                                  optional_yield y)
+                                  bool exclusive, optional_yield y)
 {
   rgw_pool pool;
   string oid;
@@ -260,7 +287,7 @@ int RGWSI_SysObj_Cache::set_attrs(const DoutPrefixProvider *dpp,
   }
   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) {
@@ -357,8 +384,9 @@ int RGWSI_SysObj_Cache::write_data(const DoutPrefixProvider *dpp,
   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)
 {
@@ -370,7 +398,6 @@ int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_ob
 
   uint64_t size;
   real_time mtime;
-  uint64_t epoch;
 
   ObjectCacheInfo info;
   uint32_t flags = CACHE_FLAG_META | CACHE_FLAG_XATTRS;
@@ -383,7 +410,6 @@ int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_ob
 
     size = info.meta.size;
     mtime = info.meta.mtime;
-    epoch = info.epoch;
     if (objv_tracker)
       objv_tracker->read_version = info.version;
     goto done;
@@ -391,8 +417,8 @@ int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_ob
   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;
@@ -401,7 +427,6 @@ int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_ob
     return r;
   }
   info.status = 0;
-  info.epoch = epoch;
   info.meta.mtime = mtime;
   info.meta.size = size;
   info.flags = CACHE_FLAG_META | CACHE_FLAG_XATTRS;
@@ -415,8 +440,6 @@ done:
     *psize = size;
   if (pmtime)
     *pmtime = mtime;
-  if (pepoch)
-    *pepoch = epoch;
   if (attrs)
     *attrs = info.xattrs;
   return 0;