bool copy_if_newer;
std::shared_ptr<RGWFetchObjFilter> filter;
+ rgw_zone_set_entry source_trace_entry;
rgw_zone_set zones_trace;
PerfCounters* counters;
const DoutPrefixProvider *dpp;
std::optional<uint64_t> _versioned_epoch,
bool _if_newer,
std::shared_ptr<RGWFetchObjFilter> _filter,
+ const rgw_zone_set_entry& source_trace_entry,
rgw_zone_set *_zones_trace,
PerfCounters* counters, const DoutPrefixProvider *dpp)
: RGWAsyncRadosRequest(caller, cn), store(_store),
versioned_epoch(_versioned_epoch),
copy_if_newer(_if_newer),
filter(_filter),
+ source_trace_entry(source_trace_entry),
counters(counters),
dpp(dpp)
{
std::shared_ptr<RGWFetchObjFilter> filter;
RGWAsyncFetchRemoteObj *req;
+ const rgw_zone_set_entry& source_trace_entry;
rgw_zone_set *zones_trace;
PerfCounters* counters;
const DoutPrefixProvider *dpp;
std::optional<uint64_t> _versioned_epoch,
bool _if_newer,
std::shared_ptr<RGWFetchObjFilter> _filter,
+ const rgw_zone_set_entry& source_trace_entry,
rgw_zone_set *_zones_trace,
PerfCounters* counters, const DoutPrefixProvider *dpp)
: RGWSimpleCoroutine(_store->ctx()), cct(_store->ctx()),
copy_if_newer(_if_newer),
filter(_filter),
req(NULL),
+ source_trace_entry(source_trace_entry),
zones_trace(_zones_trace), counters(counters), dpp(dpp) {}
req = new RGWAsyncFetchRemoteObj(this, stack->create_completion_notifier(), store,
source_zone, user_id, src_bucket, dest_placement_rule, dest_bucket_info,
key, dest_key, versioned_epoch, copy_if_newer, filter,
- zones_trace, counters, dpp);
+ source_trace_entry, zones_trace, counters, dpp);
async_rados->queue(req);
return 0;
}
public:
RGWDefaultDataSyncModule() {}
- RGWCoroutine *sync_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc, rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key, std::optional<uint64_t> versioned_epoch, rgw_zone_set *zones_trace) override;
+ RGWCoroutine *sync_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc,
+ rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key,
+ std::optional<uint64_t> versioned_epoch,
+ const rgw_zone_set_entry& source_trace_entry,
+ rgw_zone_set *zones_trace) override;
RGWCoroutine *remove_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc, rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key, real_time& mtime, bool versioned, uint64_t versioned_epoch, rgw_zone_set *zones_trace) override;
RGWCoroutine *create_delete_marker(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc, rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key, real_time& mtime,
rgw_bucket_entry_owner& owner, bool versioned, uint64_t versioned_epoch, rgw_zone_set *zones_trace) override;
rgw_obj_key& key;
std::optional<rgw_obj_key> dest_key;
std::optional<uint64_t> versioned_epoch;
+ const rgw_zone_set_entry& source_trace_entry;
rgw_zone_set *zones_trace;
bool need_more_info{false};
rgw_obj_key& _key,
std::optional<rgw_obj_key> _dest_key,
std::optional<uint64_t> _versioned_epoch,
+ const rgw_zone_set_entry& source_trace_entry,
rgw_zone_set *_zones_trace) : RGWCoroutine(_sc->cct),
sc(_sc), sync_env(_sc->env),
sync_pipe(_sync_pipe),
key(_key),
dest_key(_dest_key),
versioned_epoch(_versioned_epoch),
+ source_trace_entry(source_trace_entry),
zones_trace(_zones_trace) {
}
key, dest_key, versioned_epoch,
true,
std::static_pointer_cast<RGWFetchObjFilter>(filter),
- zones_trace, sync_env->counters, dpp));
+ source_trace_entry, zones_trace,
+ sync_env->counters, dpp));
}
if (retcode < 0) {
if (*need_retry) {
}
};
-RGWCoroutine *RGWDefaultDataSyncModule::sync_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc, rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key, std::optional<uint64_t> versioned_epoch, rgw_zone_set *zones_trace)
+RGWCoroutine *RGWDefaultDataSyncModule::sync_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc,
+ rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key,
+ std::optional<uint64_t> versioned_epoch,
+ const rgw_zone_set_entry& source_trace_entry,
+ rgw_zone_set *zones_trace)
{
- return new RGWObjFetchCR(sc, sync_pipe, key, std::nullopt, versioned_epoch, zones_trace);
+ return new RGWObjFetchCR(sc, sync_pipe, key, std::nullopt, versioned_epoch,
+ source_trace_entry, zones_trace);
}
RGWCoroutine *RGWDefaultDataSyncModule::remove_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc, rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key,
public:
RGWArchiveDataSyncModule() {}
- RGWCoroutine *sync_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc, rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key, std::optional<uint64_t> versioned_epoch, rgw_zone_set *zones_trace) override;
+ RGWCoroutine *sync_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc,
+ rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key,
+ std::optional<uint64_t> versioned_epoch,
+ const rgw_zone_set_entry& source_trace_entry,
+ rgw_zone_set *zones_trace) override;
RGWCoroutine *remove_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc, rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key, real_time& mtime, bool versioned, uint64_t versioned_epoch, rgw_zone_set *zones_trace) override;
RGWCoroutine *create_delete_marker(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc, rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key, real_time& mtime,
rgw_bucket_entry_owner& owner, bool versioned, uint64_t versioned_epoch, rgw_zone_set *zones_trace) override;
return 0;
}
-RGWCoroutine *RGWArchiveDataSyncModule::sync_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc, rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key, std::optional<uint64_t> versioned_epoch, rgw_zone_set *zones_trace)
+RGWCoroutine *RGWArchiveDataSyncModule::sync_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc,
+ rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key,
+ std::optional<uint64_t> versioned_epoch,
+ const rgw_zone_set_entry& source_trace_entry,
+ rgw_zone_set *zones_trace)
{
auto sync_env = sc->env;
ldout(sc->cct, 5) << "SYNC_ARCHIVE: sync_object: b=" << sync_pipe.info.source_bs.bucket << " k=" << key << " versioned_epoch=" << versioned_epoch.value_or(0) << dendl;
sync_env->driver->getRados()->gen_rand_obj_instance_name(&(*dest_key));
}
- return new RGWObjFetchCR(sc, sync_pipe, key, dest_key, versioned_epoch, zones_trace);
+ return new RGWObjFetchCR(sc, sync_pipe, key, dest_key, versioned_epoch,
+ source_trace_entry, zones_trace);
}
RGWCoroutine *RGWArchiveDataSyncModule::remove_object(const DoutPrefixProvider *dpp, RGWDataSyncCtx *sc, rgw_bucket_sync_pipe& sync_pipe, rgw_obj_key& key,
bool error_injection;
RGWDataSyncModule *data_sync_module;
-
+
+ rgw_zone_set_entry source_trace_entry;
rgw_zone_set zones_trace;
RGWSyncTraceNodeRef tn;
error_injection = (sync_env->cct->_conf->rgw_sync_data_inject_err_probability > 0);
data_sync_module = sync_env->sync_module->get_data_handler();
-
+
+ source_trace_entry.zone = sc->source_zone.id;
+ source_trace_entry.location_key = _sync_pipe.info.source_bs.bucket.get_key();
+
zones_trace = _zones_trace;
zones_trace.insert(sync_env->svc->zone->get_zone().id, _sync_pipe.info.dest_bucket.get_key());
pretty_print(sc->env, "Syncing object s3://{}/{} in sync from zone {}\n",
bs.bucket.name, key, zone_name);
}
- call(data_sync_module->sync_object(dpp, sc, sync_pipe, key, versioned_epoch, &zones_trace));
+ call(data_sync_module->sync_object(dpp, sc, sync_pipe, key, versioned_epoch,
+ source_trace_entry, &zones_trace));
} else if (op == CLS_RGW_OP_DEL || op == CLS_RGW_OP_UNLINK_INSTANCE) {
set_status("removing obj");
if (versioned_epoch) {
void *progress_data,
const DoutPrefixProvider *dpp,
RGWFetchObjFilter *filter,
+ const rgw_zone_set_entry& source_trace_entry,
rgw_zone_set *zones_trace,
std::optional<uint64_t>* bytes_transferred)
{
ldpp_dout(dpp, 5) << "Copy object " << src_obj.bucket << ":" << src_obj.get_oid() << " => " << dest_obj.bucket << ":" << dest_obj.get_oid() << dendl;
if (remote_src || !source_zone.empty()) {
+ rgw_zone_set_entry source_trace_entry{source_zone.id, std::nullopt};
return fetch_remote_obj(obj_ctx, user_id, info, source_zone,
dest_obj, src_obj, dest_bucket_info, &src_bucket_info,
dest_placement, src_mtime, mtime, mod_ptr,
unmod_ptr, high_precision_time,
if_match, if_nomatch, attrs_mod, copy_if_newer, attrs, category,
olh_epoch, delete_at, ptag, petag, progress_cb, progress_data, dpp,
- nullptr /* filter */);
+ nullptr /* filter */, source_trace_entry);
}
map<string, bufferlist> src_attrs;