#include "rgw_cr_rados.h"
#include "rgw_cr_rest.h"
#include "rgw_http_client.h"
-#include "rgw_boost_asio_yield.h"
#include "cls/lock/cls_lock_client.h"
+#include <boost/asio/yield.hpp>
+
#define dout_subsys ceph_subsys_rgw
#undef dout_prefix
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();
}
}
}
}
- ldout(sync_env->cct, 0) << *this << ": adjusting marker pos=" << sync_marker.marker << dendl;
+ ldout(sync_env->cct, 4) << *this << ": adjusting marker pos=" << sync_marker.marker << dendl;
stack_to_pos.erase(iter);
}
}
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()) {
temp_marker->marker = std::move(temp_marker->next_step_marker);
temp_marker->next_step_marker.clear();
temp_marker->realm_epoch = realm_epoch;
- ldout(sync_env->cct, 0) << *this << ": saving marker pos=" << temp_marker->marker << " realm_epoch=" << realm_epoch << dendl;
+ ldout(sync_env->cct, 4) << *this << ": saving marker pos=" << temp_marker->marker << " realm_epoch=" << realm_epoch << dendl;
using WriteMarkerCR = RGWSimpleRadosWriteCR<rgw_meta_sync_marker>;
yield call(new WriteMarkerCR(sync_env->async_rados, sync_env->store,
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()) {
}
// if the period has advanced, we can't use the existing marker
if (sync_marker.realm_epoch < realm_epoch) {
- ldout(sync_env->cct, 0) << "clearing marker=" << sync_marker.marker
+ ldout(sync_env->cct, 4) << "clearing marker=" << sync_marker.marker
<< " from old realm_epoch=" << sync_marker.realm_epoch
<< " (now " << realm_epoch << ')' << dendl;
sync_marker.realm_epoch = realm_epoch;