From: Matt Benjamin Date: Wed, 21 Sep 2016 21:18:20 +0000 (-0400) Subject: rgw_file: pre-assign times X-Git-Tag: v11.0.1~115^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F11181%2Fhead;p=ceph.git rgw_file: pre-assign times Set unix timestamps based on RGW values for creation, modification time for buckets, objects in stat requests. Regard any saved value of these in unix attributes as an overlay. Fixes: http://tracker.ceph.com/issues/17367 Signed-off-by: Matt Benjamin --- diff --git a/src/rgw/rgw_file.cc b/src/rgw/rgw_file.cc index b24060b39c84..f9e4fdbee0ab 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -59,6 +59,7 @@ namespace rgw { RGWFileHandle::FLAG_BUCKET); if (get<0>(fhr)) { RGWFileHandle* rgw_fh = get<0>(fhr); + rgw_fh->set_times(req.get_ctime()); /* restore attributes */ auto ux_key = req.get_attr(RGW_ATTR_UNIX_KEY1); auto ux_attrs = req.get_attr(RGW_ATTR_UNIX1); @@ -122,7 +123,7 @@ namespace rgw { if (get<0>(fhr)) { RGWFileHandle* rgw_fh = get<0>(fhr); rgw_fh->set_size(req.get_size()); - rgw_fh->set_mtime(real_clock::to_timespec(req.get_mtime())); + rgw_fh->set_times(req.get_mtime()); /* restore attributes */ auto ux_key = req.get_attr(RGW_ATTR_UNIX_KEY1); auto ux_attrs = req.get_attr(RGW_ATTR_UNIX1); @@ -148,7 +149,7 @@ namespace rgw { if (get<0>(fhr)) { RGWFileHandle* rgw_fh = get<0>(fhr); rgw_fh->set_size(req.get_size()); - rgw_fh->set_mtime(real_clock::to_timespec(req.get_mtime())); + rgw_fh->set_times(req.get_mtime()); /* restore attributes */ auto ux_key = req.get_attr(RGW_ATTR_UNIX_KEY1); auto ux_attrs = req.get_attr(RGW_ATTR_UNIX1); diff --git a/src/rgw/rgw_file.h b/src/rgw/rgw_file.h index 43c27553ab81..4cec6e7d5e95 100644 --- a/src/rgw/rgw_file.h +++ b/src/rgw/rgw_file.h @@ -1812,6 +1812,10 @@ public: return (iter != attrs.end()) ? &(iter->second) : nullptr; } + real_time get_ctime() const { + return bucket.creation_time; + } + virtual bool only_bucket() { return false; } virtual int op_init() { @@ -1844,10 +1848,6 @@ public: return 0; } - real_time get_ctime() const { - return bucket.creation_time; - } - virtual int get_params() { return 0; }