]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #59311 from soumyakoduri/wip-skoduri-cloud-restore
authorSoumya Koduri <skoduri@redhat.com>
Thu, 3 Oct 2024 18:14:11 +0000 (23:44 +0530)
committerGitHub <noreply@github.com>
Thu, 3 Oct 2024 18:14:11 +0000 (23:44 +0530)
rgw/cloudtier: initial MVP of the feature RestoreObject from cloud

Reviewed-by: Daniel Gryniewicz <dang@redhat.com>
Reviewed-by: Matt Benjamin <mbenjamin@redhat.com>
1  2 
src/common/options/rgw.yaml.in
src/rgw/driver/rados/rgw_rados.cc
src/rgw/driver/rados/rgw_rados.h

Simple merge
index 5dc0663ec76308e9cd22ba25f4786c094fea7717,693d464d731004b0208b8c90016191b198ea3c98..b8db0bfa17d5d87e66087944fc6a4052b6abbb57
@@@ -6641,10 -6858,30 +6859,29 @@@ int RGWRados::set_attrs(const DoutPrefi
                   iter != state->attrset.end()) {
          storage_class = rgw_bl_str(iter->second);
        }
 -      uint64_t epoch = ioctx.get_last_version();
        int64_t poolid = ioctx.get_id();
+       // Retain Object category as CloudTiered while restore is in
+       // progress or failed
+       RGWObjCategory category = RGWObjCategory::Main;
+       auto r_iter = attrs.find(RGW_ATTR_RESTORE_STATUS);
+       if (r_iter != attrs.end()) {
+         rgw::sal::RGWRestoreStatus st = rgw::sal::RGWRestoreStatus::None;
+         auto iter = r_iter->second.cbegin();
+         try {
+           using ceph::decode;
+           decode(st, iter);
+           if (st != rgw::sal::RGWRestoreStatus::CloudRestored) {
+             category = RGWObjCategory::CloudTiered;
+           }
+         } catch (buffer::error& err) {
+         }
+       }
        r = index_op.complete(dpp, poolid, epoch, state->size, state->accounted_size,
                              mtime, etag, content_type, storage_class, owner,
-                             RGWObjCategory::Main, nullptr, y, nullptr, false, log_op);
+                             category, nullptr, y, nullptr, false, log_op);
      } else {
        int ret = index_op.cancel(dpp, nullptr, y, log_op);
        if (ret < 0) {
Simple merge