From: Chang Liu Date: Mon, 16 Dec 2019 08:16:51 +0000 (+0000) Subject: rgw: get elastic search info in start_sync, avoid creating new coroutines manager X-Git-Tag: v15.1.0~95^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2cd512edd7115c88c61c14b8fd4ec850d74333c1;p=ceph.git rgw: get elastic search info in start_sync, avoid creating new coroutines manager Fixes: https://tracker.ceph.com/issues/43199 Signed-off-by: Chang Liu --- diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index dbf847b4ea05..9738f76fe8f2 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -1655,7 +1655,11 @@ public: } yield call(data_sync_module->start_sync(sync_env)); - + if (retcode < 0) { + tn->log(0, SSTR("ERROR: failed to start sync, retcode=" << retcode)); + return set_cr_error(retcode); + } + yield { if ((rgw_data_sync_info::SyncState)sync_status.sync_info.state == rgw_data_sync_info::StateSync) { tn->log(10, SSTR("spawning " << num_shards << " shards sync")); diff --git a/src/rgw/rgw_sync_module_es.cc b/src/rgw/rgw_sync_module_es.cc index 3d466b08249e..4468302cf7c5 100644 --- a/src/rgw/rgw_sync_module_es.cc +++ b/src/rgw/rgw_sync_module_es.cc @@ -817,31 +817,24 @@ public: void init(RGWDataSyncEnv *sync_env, uint64_t instance_id) override { conf->init_instance(sync_env->store->svc()->zone->get_realm(), instance_id); - // try to get elastic search version - RGWCoroutinesManager crs(sync_env->store->ctx(), sync_env->store->getRados()->get_cr_registry()); - RGWHTTPManager http_manager(sync_env->store->ctx(), crs.get_completion_mgr()); - int ret = http_manager.start(); - if (ret < 0) { - return; - } - ret = crs.run(new RGWReadRESTResourceCR(sync_env->cct, - conf->conn.get(), - &http_manager, - "/", nullptr, - &(conf->default_headers), - &(conf->es_info))); - http_manager.stop(); - if (ret < 0) { - ldout(sync_env->cct, 1) << conf->id << ": fetch elastic info failed: " << ret << dendl; - } else { - ldout(sync_env->cct, 5) << conf->id << ": got elastic version=" << conf->es_info.get_version_str() << dendl; - } } RGWCoroutine *init_sync(RGWDataSyncEnv *sync_env) override { ldout(sync_env->cct, 5) << conf->id << ": init" << dendl; return new RGWElasticInitConfigCBCR(sync_env, conf); } + + RGWCoroutine *start_sync(RGWDataSyncEnv *sync_env) override { + ldout(sync_env->cct, 5) << conf->id << ": start_sync" << dendl; + // try to get elastic search version + return new RGWReadRESTResourceCR(sync_env->cct, + conf->conn.get(), + sync_env->http_manager, + "/", nullptr, + &(conf->default_headers), + &(conf->es_info)); + } + RGWCoroutine *sync_object(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key, std::optional versioned_epoch, rgw_zone_set *zones_trace) override { ldout(sync_env->cct, 10) << conf->id << ": sync_object: b=" << bucket_info.bucket << " k=" << key << " versioned_epoch=" << versioned_epoch.value_or(0) << dendl; if (!conf->should_handle_operation(bucket_info)) {