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) {