}
int D4NFilterObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val,
- optional_yield y, const DoutPrefixProvider* dpp)
+ optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags)
{
Attrs update;
update[(std::string)attr_name] = attr_val;
if (driver->get_cache_driver()->update_attrs(dpp, this->get_key().get_oid(), update, y) < 0)
ldpp_dout(dpp, 10) << "D4NFilterObject::" << __func__ << "(): CacheDriver update_attrs method failed." << dendl;
- return next->modify_obj_attrs(attr_name, attr_val, y, dpp);
+ return next->modify_obj_attrs(attr_name, attr_val, y, dpp, flags);
}
int D4NFilterObject::delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name,
virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp,
rgw_obj* target_obj = NULL) override;
virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val,
- optional_yield y, const DoutPrefixProvider* dpp) override;
+ optional_yield y, const DoutPrefixProvider* dpp,
+ uint32_t flags = rgw::sal::FLAG_LOG_OP) override;
virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name,
optional_yield y) override;
virtual ceph::real_time get_mtime(void) const override { return next->get_mtime(); };
int DaosObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val,
optional_yield y,
- const DoutPrefixProvider* dpp) {
+ const DoutPrefixProvider* dpp, uint32_t flags) {
// Get object's metadata (those stored in rgw_bucket_dir_entry)
ldpp_dout(dpp, 20) << "DEBUG: modify_obj_attrs" << dendl;
rgw_bucket_dir_entry ent;
rgw_obj* target_obj = NULL) override;
virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val,
optional_yield y,
- const DoutPrefixProvider* dpp) override;
+ const DoutPrefixProvider* dpp,
+ uint32_t flags = rgw::sal::FLAG_LOG_OP) override;
virtual int delete_obj_attrs(const DoutPrefixProvider* dpp,
const char* attr_name,
optional_yield y) override;
return 0;
}
-int MotrObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp)
+int MotrObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags)
{
rgw_obj target = get_obj();
int r = get_obj_attrs(y, dpp, &target);
}
set_atomic();
state.attrset[attr_name] = attr_val;
- return set_obj_attrs(dpp, &state.attrset, nullptr, y, rgw::sal::FLAG_LOG_OP);
+ return set_obj_attrs(dpp, &state.attrset, nullptr, y, flags);
}
int MotrObject::delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y)
virtual int load_obj_state(const DoutPrefixProvider* dpp, optional_yield y, bool follow_olh = true) override;
virtual int set_obj_attrs(const DoutPrefixProvider* dpp, Attrs* setattrs, Attrs* delattrs, optional_yield y, uint32_t flags) override;
virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj = NULL) override;
- virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp) override;
+ virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp,
+ uint32_t flags = rgw::sal::FLAG_LOG_OP) override;
virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) override;
virtual bool is_expired() override;
virtual void gen_rand_obj_instance_name() override;
}
int POSIXObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val,
- optional_yield y, const DoutPrefixProvider* dpp)
+ optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags)
{
state.attrset[attr_name] = attr_val;
return write_attrs(dpp, y);
virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp,
rgw_obj* target_obj = NULL) override;
virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val,
- optional_yield y, const DoutPrefixProvider* dpp) override;
+ optional_yield y, const DoutPrefixProvider* dpp,
+ uint32_t flags = rgw::sal::FLAG_LOG_OP) override;
virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name,
optional_yield y) override;
virtual bool is_expired() override;
attrs[RGW_ATTR_CLOUD_TIER_CONFIG] = t_tier;
}
+ // The temporary cloud restore object should not sync to other site
+ log_op = false;
+
} else { // permanent restore
{
bufferlist bl;
attrs[RGW_ATTR_RESTORE_TYPE] = std::move(bl);
ldpp_dout(dpp, 20) << "Permanent restore, object:" << dest_obj << dendl;
}
+ log_op = true;
}
{
return read_attrs(dpp, read_op, y, target_obj);
}
-int RadosObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp)
+int RadosObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags)
{
rgw_obj target = get_obj();
rgw_obj save = get_obj();
state.obj = target;
set_atomic();
state.attrset[attr_name] = attr_val;
- r = set_obj_attrs(dpp, &state.attrset, nullptr, y, rgw::sal::FLAG_LOG_OP);
+ r = set_obj_attrs(dpp, &state.attrset, nullptr, y, flags);
/* Restore target */
state.obj = save;
bufferlist bl;
using ceph::encode;
encode(restore_status, bl);
-
- ret = modify_obj_attrs(RGW_ATTR_RESTORE_STATUS, bl, y, dpp);
+ ret = modify_obj_attrs(RGW_ATTR_RESTORE_STATUS, bl, y, dpp, false);
return ret;
}
attrs[RGW_ATTR_INTERNAL_MTIME] = std::move(bl);
}
const req_context rctx{dpp, y, nullptr};
- return obj_op.write_meta(0, 0, attrs, rctx, head_obj->get_trace());
+ return obj_op.write_meta(0, 0, attrs, rctx, head_obj->get_trace(), false);
} catch (const buffer::end_of_buffer&) {
// ignore empty manifest; it's not cloud-tiered
} catch (const std::exception& e) {
// erase restore attrs
attrs.erase(RGW_ATTR_RESTORE_STATUS);
attrs.erase(RGW_ATTR_RESTORE_TYPE);
+ attrs.erase(RGW_ATTR_RESTORE_TIME);
attrs.erase(RGW_ATTR_RESTORE_EXPIRY_DATE);
attrs.erase(RGW_ATTR_CLOUDTIER_STORAGE_CLASS);
virtual int set_obj_attrs(const DoutPrefixProvider* dpp, Attrs* setattrs, Attrs* delattrs, optional_yield y, uint32_t flags) override;
virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj = NULL) override;
- virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp) override;
+ virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp,
+ uint32_t flags = rgw::sal::FLAG_LOG_OP) override;
virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) override;
virtual bool is_expired() override;
virtual void gen_rand_obj_instance_name() override;
/** Get attributes for this object */
virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj = NULL) = 0;
/** Modify attributes for this object. */
- virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp) = 0;
+ virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp,
+ uint32_t flags = rgw::sal::FLAG_LOG_OP) = 0;
/** Delete attributes for this object */
virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) = 0;
/** Check to see if this object has expired */
return read_attrs(dpp, read_op, y, target_obj);
}
- int DBObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp)
+ int DBObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags)
{
rgw_obj target = get_obj();
int r = get_obj_attrs(y, dpp, &target);
}
set_atomic();
state.attrset[attr_name] = attr_val;
- return set_obj_attrs(dpp, &state.attrset, nullptr, y, rgw::sal::FLAG_LOG_OP);
+ return set_obj_attrs(dpp, &state.attrset, nullptr, y, flags);
}
int DBObject::delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y)
virtual int load_obj_state(const DoutPrefixProvider* dpp, optional_yield y, bool follow_olh = true) override;
virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj = NULL) override;
- virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp) override;
+ virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp,
+ uint32_t flags = rgw::sal::FLAG_LOG_OP) override;
virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) override;
virtual bool is_expired() override;
virtual void gen_rand_obj_instance_name() override;
}
int FilterObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val,
- optional_yield y, const DoutPrefixProvider* dpp)
+ optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags)
{
- return next->modify_obj_attrs(attr_name, attr_val, y, dpp);
+ return next->modify_obj_attrs(attr_name, attr_val, y, dpp, flags);
}
int FilterObject::delete_obj_attrs(const DoutPrefixProvider* dpp,
virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp,
rgw_obj* target_obj = NULL) override;
virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val,
- optional_yield y, const DoutPrefixProvider* dpp) override;
+ optional_yield y, const DoutPrefixProvider* dpp,
+ uint32_t flags = rgw::sal::FLAG_LOG_OP) override;
virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name,
optional_yield y) override;
virtual bool is_expired() override;