run_sync_thread
meta_sync_processor_thread = new RGWMetaSyncProcessorThread(this->store, async_processor);
ret = meta_sync_processor_thread->init();
meta_sync_processor_thread->start();
rgw::BucketTrimConfig config;
rgw::configure_bucket_trim(cct, config);
bucket_trim.emplace(this->store, config);
ret = bucket_trim->init();
svc.datalog_rados->set_observer(&*bucket_trim);
for (auto source_zone : svc.zone->get_data_sync_source_zones()) {
auto *thread = new RGWDataSyncProcessorThread(this->store, svc.rados->get_async_processor(), source_zone);
ret = thread->init();
thread->start();
data_sync_processor_threads[rgw_zone_id(source_zone->id)] = thread;
}
RGWDataSyncProcessorThread::process {
while (!initialized) {
int ret = sync.init();
if (ret >= 0) {initialized = true; break;}
return 0;
}
sync.run();
}
int RGWDataSyncStatusManager::init() {
RGWZone *zone_def;
sync_module = store->getRados()->get_sync_module();
conn = store->svc()->zone->get_zone_conn(source_zone);
error_logger = new RGWSyncErrorLogger(store, RGW_SYNC_ERROR_LOG_SHARD_PREFIX, ERROR_LOGGER_SHARDS);
int r = source_log.init(source_zone, conn, error_logger, store->getRados()->get_sync_tracer(), sync_module, counters);
sync_env.init、sc.init(&sync_env, _conn, _source_zone);、ret = http_manager.start();
tn = sync_env.sync_tracer->add_node(sync_env.sync_tracer->root_node, "data"); initialized = true;
rgw_datalog_info datalog_info;
r = source_log.read_log_info(&datalog_info);
num_shards = datalog_info.num_shards;
for (int i = 0; i < num_shards; i++)
shard_objs[i] = rgw_raw_obj(zone_params.log_pool, shard_obj_name(source_zone, i));
}
int RGWRemoteDataLog::run_sync(int num_shards) {
lock.lock();
data_sync_cr = new RGWDataSyncControlCR(&sc, num_shards, tn);
data_sync_cr->get();
lock.unlock();
int r = run(data_sync_cr);
lock.lock();
data_sync_cr->put();
data_sync_cr = NULL;
lock.unlock();
return 0;
}