set<string> spawned_keys;
- RGWContinuousLeaseCR *lease_cr;
- RGWCoroutinesStack *lease_stack;
+ boost::intrusive_ptr<RGWContinuousLeaseCR> lease_cr;
+ boost::intrusive_ptr<RGWCoroutinesStack> lease_stack;
string status_oid;
delete marker_tracker;
if (lease_cr) {
lease_cr->abort();
- lease_cr->put();
}
if (error_repo) {
error_repo->put();
string lock_name = "sync_lock";
if (lease_cr) {
lease_cr->abort();
- lease_cr->put();
}
RGWRados *store = sync_env->store;
- lease_cr = new RGWContinuousLeaseCR(sync_env->async_rados, store,
- rgw_raw_obj(store->get_zone_params().log_pool, status_oid),
- lock_name, lock_duration, this);
- lease_cr->get();
- lease_stack = spawn(lease_cr, false);
+ lease_cr.reset(new RGWContinuousLeaseCR(sync_env->async_rados, store,
+ rgw_raw_obj(store->get_zone_params().log_pool, status_oid),
+ lock_name, lock_duration, this));
+ lease_stack.reset(spawn(lease_cr.get(), false));
}
int full_sync() {
set_status() << "num_spawned() > spawn_window";
yield wait_for_child();
int ret;
- while (collect(&ret, lease_stack)) {
+ while (collect(&ret, lease_stack.get())) {
if (ret < 0) {
ldout(sync_env->cct, 0) << "ERROR: a sync operation returned error" << dendl;
/* we have reported this error */
yield {
set_status("acquiring sync lock");
auto store = sync_env->store;
- lease_cr = new RGWContinuousLeaseCR(sync_env->async_rados, store,
- rgw_raw_obj(store->get_zone_params().log_pool, status_oid),
- "sync_lock",
- cct->_conf->rgw_sync_lease_period,
- this);
- lease_stack = spawn(lease_cr.get(), false);
+ lease_cr.reset(new RGWContinuousLeaseCR(sync_env->async_rados, store,
+ rgw_raw_obj(store->get_zone_params().log_pool, status_oid),
+ "sync_lock",
+ cct->_conf->rgw_sync_lease_period,
+ this));
+ lease_stack.reset(spawn(lease_cr.get(), false));
}
while (!lease_cr->is_locked()) {
if (lease_cr->is_done()) {
rgw_meta_sync_info status;
vector<RGWMetadataLogInfo> shards_info;
- RGWContinuousLeaseCR *lease_cr;
- RGWCoroutinesStack *lease_stack;
+ boost::intrusive_ptr<RGWContinuousLeaseCR> lease_cr;
+ boost::intrusive_ptr<RGWCoroutinesStack> lease_stack;
public:
RGWInitSyncStatusCoroutine(RGWMetaSyncEnv *_sync_env,
const rgw_meta_sync_info &status)
~RGWInitSyncStatusCoroutine() override {
if (lease_cr) {
lease_cr->abort();
- lease_cr->put();
}
}
uint32_t lock_duration = cct->_conf->rgw_sync_lease_period;
string lock_name = "sync_lock";
RGWRados *store = sync_env->store;
- lease_cr = new RGWContinuousLeaseCR(sync_env->async_rados, store,
- rgw_raw_obj(store->get_zone_params().log_pool, sync_env->status_oid()),
- lock_name, lock_duration, this);
- lease_cr->get();
- lease_stack = spawn(lease_cr, false);
+ lease_cr.reset(new RGWContinuousLeaseCR(sync_env->async_rados, store,
+ rgw_raw_obj(store->get_zone_params().log_pool, sync_env->status_oid()),
+ lock_name, lock_duration, this));
+ lease_stack.reset(spawn(lease_cr.get(), false));
}
while (!lease_cr->is_locked()) {
if (lease_cr->is_done()) {
}
}
- drain_all_but_stack(lease_stack); /* the lease cr still needs to run */
+ drain_all_but_stack(lease_stack.get()); /* the lease cr still needs to run */
yield {
set_status("updating sync status");
std::unique_ptr<RGWShardedOmapCRManager> entries_index;
- RGWContinuousLeaseCR *lease_cr;
- RGWCoroutinesStack *lease_stack;
+ boost::intrusive_ptr<RGWContinuousLeaseCR> lease_cr;
+ boost::intrusive_ptr<RGWCoroutinesStack> lease_stack;
bool lost_lock;
bool failed;
}
~RGWFetchAllMetaCR() override {
- if (lease_cr) {
- lease_cr->put();
- }
}
void append_section_from_set(set<string>& all_sections, const string& name) {
set_status(string("acquiring lock (") + sync_env->status_oid() + ")");
uint32_t lock_duration = cct->_conf->rgw_sync_lease_period;
string lock_name = "sync_lock";
- lease_cr = new RGWContinuousLeaseCR(sync_env->async_rados,
- sync_env->store,
- rgw_raw_obj(sync_env->store->get_zone_params().log_pool, sync_env->status_oid()),
- lock_name, lock_duration, this);
- lease_cr->get();
- lease_stack = spawn(lease_cr, false);
+ lease_cr.reset(new RGWContinuousLeaseCR(sync_env->async_rados,
+ sync_env->store,
+ rgw_raw_obj(sync_env->store->get_zone_params().log_pool, sync_env->status_oid()),
+ lock_name, lock_duration, this));
+ lease_stack = spawn(lease_cr.get(), false);
}
while (!lease_cr->is_locked()) {
if (lease_cr->is_done()) {
}
}
- drain_all_but_stack(lease_stack); /* the lease cr still needs to run */
+ drain_all_but_stack(lease_stack.get()); /* the lease cr still needs to run */
yield lease_cr->go_down();
boost::asio::coroutine incremental_cr;
boost::asio::coroutine full_cr;
- RGWContinuousLeaseCR *lease_cr = nullptr;
- RGWCoroutinesStack *lease_stack = nullptr;
+ boost::intrusive_ptr<RGWContinuousLeaseCR> lease_cr;
+ boost::intrusive_ptr<RGWCoroutinesStack> lease_stack;
+
bool lost_lock = false;
bool *reset_backoff;
delete marker_tracker;
if (lease_cr) {
lease_cr->abort();
- lease_cr->put();
}
}
yield {
uint32_t lock_duration = cct->_conf->rgw_sync_lease_period;
string lock_name = "sync_lock";
- if (lease_cr) {
- lease_cr->put();
- }
RGWRados *store = sync_env->store;
- lease_cr = new RGWContinuousLeaseCR(sync_env->async_rados, store,
- rgw_raw_obj(pool, sync_env->shard_obj_name(shard_id)),
- lock_name, lock_duration, this);
- lease_cr->get();
- lease_stack = spawn(lease_cr, false);
+ lease_cr.reset(new RGWContinuousLeaseCR(sync_env->async_rados, store,
+ rgw_raw_obj(pool, sync_env->shard_obj_name(shard_id)),
+ lock_name, lock_duration, this));
+ lease_stack.reset(spawn(lease_cr.get(), false));
lost_lock = false;
}
while (!lease_cr->is_locked()) {
yield lease_cr->go_down();
- lease_cr->put();
- lease_cr = NULL;
+ lease_cr.reset();
drain_all();
uint32_t lock_duration = cct->_conf->rgw_sync_lease_period;
string lock_name = "sync_lock";
RGWRados *store = sync_env->store;
- lease_cr = new RGWContinuousLeaseCR(sync_env->async_rados, store,
- rgw_raw_obj(pool, sync_env->shard_obj_name(shard_id)),
- lock_name, lock_duration, this);
- lease_cr->get();
- lease_stack = spawn(lease_cr, false);
+ lease_cr.reset( new RGWContinuousLeaseCR(sync_env->async_rados, store,
+ rgw_raw_obj(pool, sync_env->shard_obj_name(shard_id)),
+ lock_name, lock_duration, this));
+ lease_stack.reset(spawn(lease_cr.get(), false));
lost_lock = false;
}
while (!lease_cr->is_locked()) {