From bbac69ccff8fc3a058111af8ebe85b94893df569 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 31 Jul 2013 12:23:17 -0700 Subject: [PATCH] rgw: only check version if meta object exists Signed-off-by: Yehuda Sadeh Reviewed-by: Josh Durgin --- src/rgw/rgw_bucket.cc | 12 ++++++++---- src/rgw/rgw_user.cc | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index d32af5df601..3cb730b555e 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -1416,7 +1416,8 @@ public: return ret; // are we actually going to perform this put, or is it too old? - if (!check_versions(old_ot.read_version, orig_mtime, + if (ret != -ENOENT && + !check_versions(old_ot.read_version, orig_mtime, objv_tracker.write_version, mtime, sync_type)) { return STATUS_NO_APPLY; } @@ -1559,10 +1560,12 @@ public: time_t orig_mtime; int ret = store->get_bucket_instance_info(NULL, oid, old_bci.info, &orig_mtime, &old_bci.attrs); - if (ret < 0 && ret != -ENOENT) + bool exists = (ret != -ENOENT); + if (ret < 0 && exists) return ret; - if (ret == -ENOENT || old_bci.info.bucket.bucket_id != bci.info.bucket.bucket_id) { + + if (!exists || old_bci.info.bucket.bucket_id != bci.info.bucket.bucket_id) { /* a new bucket, we need to select a new bucket placement for it */ rgw_bucket bucket; ret = store->set_bucket_location_by_rule(bci.info.placement_rule, oid, bucket); @@ -1579,7 +1582,8 @@ public: } // are we actually going to perform this put, or is it too old? - if (!check_versions(old_bci.info.objv_tracker.read_version, orig_mtime, + if (exists && + !check_versions(old_bci.info.objv_tracker.read_version, orig_mtime, objv_tracker.write_version, mtime, sync_type)) { objv_tracker.read_version = old_bci.info.objv_tracker.read_version; return STATUS_NO_APPLY; diff --git a/src/rgw/rgw_user.cc b/src/rgw/rgw_user.cc index 6fcecd4a98d..5e5b5c564bb 100644 --- a/src/rgw/rgw_user.cc +++ b/src/rgw/rgw_user.cc @@ -2308,7 +2308,8 @@ public: return ret; // are we actually going to perform this put, or is it too old? - if (!check_versions(objv_tracker.read_version, orig_mtime, + if (ret != -ENOENT && + !check_versions(objv_tracker.read_version, orig_mtime, objv_tracker.write_version, mtime, sync_mode)) { return STATUS_NO_APPLY; } -- 2.47.3