From 00f7dd2f77732ecaea48abe915a4f1d38351a441 Mon Sep 17 00:00:00 2001 From: Prasad Krishnan Date: Fri, 20 Mar 2020 20:01:35 +0000 Subject: [PATCH] RGW:Multisite: Convert is_mpu_obj into an enum SourceObjType Signed-off-by: Prasad Krishnan (cherry picked from commit fa5422597837032d97f9afceff8b5a22fad0cda7) --- qa/suites/rgw/multisite/overrides.yaml | 1 + src/rgw/rgw_etag_verifier.h | 6 ++++++ src/rgw/rgw_rados.cc | 17 +++++++++-------- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/qa/suites/rgw/multisite/overrides.yaml b/qa/suites/rgw/multisite/overrides.yaml index 11b0232fd3ce1..a04bae9ab58a4 100644 --- a/qa/suites/rgw/multisite/overrides.yaml +++ b/qa/suites/rgw/multisite/overrides.yaml @@ -10,5 +10,6 @@ overrides: rgw curl low speed time: 300 rgw md log max shards: 4 rgw data log num shards: 4 + rgw sync obj etag verify: true rgw: compression type: random diff --git a/src/rgw/rgw_etag_verifier.h b/src/rgw/rgw_etag_verifier.h index b55f277ed5b23..560d54805af52 100644 --- a/src/rgw/rgw_etag_verifier.h +++ b/src/rgw/rgw_etag_verifier.h @@ -18,6 +18,12 @@ #include "rgw_putobj.h" #include "rgw_op.h" +enum SourceObjType { + OBJ_TYPE_UNINIT, /* Object type is not initialised yet */ + OBJ_TYPE_ATOMIC, + OBJ_TYPE_MPU, /* Object at source was created through MPU */ +}; + class RGWPutObj_ETagVerifier : public rgw::putobj::Pipe { protected: diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index c30a64996abd5..3d3719576ea56 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -3929,7 +3929,8 @@ class RGWRadosPutObj : public RGWHTTPStreamRWRequest::ReceiveCB void *progress_data; bufferlist extra_data_bl, manifest_bl; uint64_t extra_data_left{0}; - bool need_to_process_attrs{true}, is_mpu_obj{false}; + bool need_to_process_attrs{true}; + SourceObjType obj_type{OBJ_TYPE_UNINIT}; uint64_t data_len{0}; map src_attrs; uint64_t ofs{0}; @@ -4023,10 +4024,11 @@ public: if (rule.part_size == 0) { /* Atomic object */ + obj_type = OBJ_TYPE_ATOMIC; etag_verifier_atomic = boost::in_place(cct, filter); filter = &*etag_verifier_atomic; } else { - is_mpu_obj = true; + obj_type = OBJ_TYPE_MPU; etag_verifier_mpu = boost::in_place(cct, filter); uint64_t cur_part_ofs = UINT64_MAX; @@ -4114,15 +4116,14 @@ public: } string get_calculated_etag() { - if (!cct->_conf->rgw_sync_obj_etag_verify) - return ""; - - if (is_mpu_obj) { + if (obj_type == OBJ_TYPE_ATOMIC) { + etag_verifier_atomic->calculate_etag(); + return etag_verifier_atomic->get_calculated_etag(); + } else if (obj_type == OBJ_TYPE_MPU) { etag_verifier_mpu->calculate_etag(); return etag_verifier_mpu->get_calculated_etag(); } else { - etag_verifier_atomic->calculate_etag(); - return etag_verifier_atomic->get_calculated_etag(); + return ""; } } }; -- 2.39.5