rgw_bucket_object_pre_exec(s);
}
+static bool object_is_expired(map<string, bufferlist>& attrs) {
+ map<string, bufferlist>::iterator iter = attrs.find(RGW_ATTR_DELETE_AT);
+ if (iter != attrs.end()) {
+ utime_t delete_at;
+ try {
+ ::decode(delete_at, iter->second);
+ } catch (buffer::error& err) {
+ dout(0) << "ERROR: " << __func__ << ": failed to decode " RGW_ATTR_DELETE_AT " attr" << dendl;
+ return false;
+ }
+
+ if (delete_at <= ceph_clock_now(g_ceph_context)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
void RGWGetObj::execute()
{
utime_t start_time = s->time;
/* Check whether the object has expired. Swift API documentation
* stands that we should return 404 Not Found in such case. */
- attr_iter = attrs.find(RGW_ATTR_DELETE_AT);
- if (need_object_expiration() && attr_iter != attrs.end()) {
- utime_t delete_at;
- try {
- ::decode(delete_at, attr_iter->second);
- } catch (buffer::error& err) {
- ret = -EIO;
- ldout(s->cct, 0) << "ERROR: failed to decode " RGW_ATTR_DELETE_AT " attribute" << dendl;
- goto done_err;
- }
-
- if (delete_at <= ceph_clock_now(g_ceph_context)) {
- ret = -ENOENT;
- goto done_err;
- }
+ if (need_object_expiration() && object_is_expired(attrs)) {
+ ret = -ENOENT;
+ goto done_err;
}
ofs = new_ofs;