agent_stop_flag(false),
agent_timer_lock("OSD::agent_timer_lock"),
agent_timer(osd->client_messenger->cct, agent_timer_lock),
- objecter_lock("OSD::objecter_lock"),
- objecter_timer(osd->client_messenger->cct, objecter_lock),
objecter(new Objecter(osd->client_messenger->cct, osd->objecter_messenger, osd->monc, &objecter_osdmap,
- objecter_lock, objecter_timer, 0, 0)),
+ 0, 0)),
objecter_finisher(osd->client_messenger->cct),
objecter_dispatcher(this),
watch_lock("OSD::watch_lock"),
watch_timer.shutdown();
}
- {
- Mutex::Locker l(objecter_lock);
- objecter_timer.shutdown();
- objecter->shutdown_locked();
- }
- objecter->shutdown_unlocked();
+ objecter->shutdown();
objecter_finisher.stop();
{
void OSDService::init()
{
reserver_finisher.start();
- {
- objecter_finisher.start();
- objecter->init_unlocked();
- Mutex::Locker l(objecter_lock);
- objecter_timer.init();
- objecter->set_client_incarnation(0);
- objecter->init_locked();
- }
+ objecter_finisher.start();
+ objecter->set_client_incarnation(0);
+ objecter->init();
watch_timer.init();
agent_timer.init();
bool OSDService::ObjecterDispatcher::ms_dispatch(Message *m)
{
- Mutex::Locker l(osd->objecter_lock);
osd->objecter->dispatch(m);
return true;
}
bool OSDService::ObjecterDispatcher::ms_handle_reset(Connection *con)
{
- Mutex::Locker l(osd->objecter_lock);
osd->objecter->ms_handle_reset(con);
return true;
}
void OSDService::ObjecterDispatcher::ms_handle_connect(Connection *con)
{
- Mutex::Locker l(osd->objecter_lock);
return osd->objecter->ms_handle_connect(con);
}
session->put();
// share with the objecter
- {
- Mutex::Locker l(service.objecter_lock);
- m->get();
- service.objecter->handle_osd_map(m);
- }
+ m->get();
+ service.objecter->handle_osd_map(m);
epoch_t first = m->get_first();
epoch_t last = m->get_last();
// -- Objecter, for teiring reads/writes from/to other OSDs --
- Mutex objecter_lock;
- SafeTimer objecter_timer;
OSDMap objecter_osdmap;
Objecter *objecter;
Finisher objecter_finisher;
assert(cop->src.snap == CEPH_NOSNAP);
ObjectOperation op;
op.list_snaps(&cop->results.snapset, NULL);
- osd->objecter_lock.Lock();
ceph_tid_t tid = osd->objecter->read(cop->src.oid, cop->oloc, op,
CEPH_SNAPDIR, NULL,
flags, gather.new_sub(), NULL);
cop->objecter_tid2 = tid;
- osd->objecter_lock.Unlock();
}
ObjectOperation op;
gather.set_finisher(new C_OnFinisher(fin,
&osd->objecter_finisher));
- osd->objecter_lock.Lock();
ceph_tid_t tid = osd->objecter->read(cop->src.oid, cop->oloc, op,
cop->src.snap, NULL,
flags,
fin->tid = tid;
cop->objecter_tid = tid;
gather.activate();
- osd->objecter_lock.Unlock();
}
void ReplicatedPG::process_copy_chunk(hobject_t oid, ceph_tid_t tid, int r)
// cancel objecter op, if we can
if (cop->objecter_tid) {
- Mutex::Locker l(osd->objecter_lock);
osd->objecter->op_cancel(cop->objecter_tid, -ECANCELED);
cop->objecter_tid = 0;
if (cop->objecter_tid2) {
if (dsnapc.seq > 0) {
ObjectOperation o;
o.remove();
- osd->objecter_lock.Lock();
osd->objecter->mutate(
soid.oid,
base_oloc,
CEPH_OSD_FLAG_ENFORCE_SNAPC),
NULL,
NULL /* no callback, we'll rely on the ordering w.r.t the next op */);
- osd->objecter_lock.Unlock();
}
FlushOpRef fop(new FlushOp);
}
C_Flush *fin = new C_Flush(this, soid, get_last_peering_reset());
- osd->objecter_lock.Lock();
ceph_tid_t tid = osd->objecter->mutate(
soid.oid, base_oloc, o, snapc, oi.mtime,
CEPH_OSD_FLAG_IGNORE_OVERLAY | CEPH_OSD_FLAG_ENFORCE_SNAPC,
NULL,
new C_OnFinisher(fin,
&osd->objecter_finisher));
+ /* we're under the pg lock and fin->finish() is grabbing that */
fin->tid = tid;
fop->objecter_tid = tid;
- osd->objecter_lock.Unlock();
flush_ops[soid] = fop;
return -EINPROGRESS;
dout(10) << __func__ << " " << fop->obc->obs.oi.soid << " tid "
<< fop->objecter_tid << dendl;
if (fop->objecter_tid) {
- Mutex::Locker l(osd->objecter_lock);
osd->objecter->op_cancel(fop->objecter_tid, -ECANCELED);
fop->objecter_tid = 0;
}