Skip to content

Commit

Permalink
Merge pull request ceph#9174 from majianpeng/osd-ms-dispatch
Browse files Browse the repository at this point in the history
OSD: cleanup code for ms_dispatch

Reviewed-by: Sage Weil <sage@redhat.com>
Reviewed-by: Samuel Just <sjust@redhat.com>
Reviewed-by: Kefu Chai <kchai@redhat.com>
  • Loading branch information
tchaikov committed Jun 5, 2016
2 parents abe240b + dffb471 commit 3c83ab2
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 42 deletions.
27 changes: 1 addition & 26 deletions src/osd/OSD.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1652,7 +1652,6 @@ OSD::OSD(CephContext *cct_, ObjectStore *store_,
clog(log_client.create_channel()),
whoami(id),
dev_path(dev), journal_path(jdev),
dispatch_running(false),
asok_hook(NULL),
osd_compat(get_osd_compat_set()),
state(STATE_INITIALIZING),
Expand All @@ -1670,7 +1669,6 @@ OSD::OSD(CephContext *cct_, ObjectStore *store_,
hb_back_server_messenger(hb_back_serverm),
heartbeat_thread(this),
heartbeat_dispatcher(this),
finished_lock("OSD::finished_lock"),
op_tracker(cct, cct->_conf->osd_enable_op_tracker,
cct->_conf->osd_num_op_tracker_shard),
test_ops_hook(NULL),
Expand Down Expand Up @@ -2635,7 +2633,6 @@ int OSD::shutdown()
// finish ops
op_shardedwq.drain(); // should already be empty except for laggard PGs
{
Mutex::Locker l(finished_lock);
finished.clear(); // zap waiters (bleh, this is messy)
}

Expand Down Expand Up @@ -4331,15 +4328,7 @@ void OSD::tick()
service.promote_throttle_recalibrate();
}

// only do waiters if dispatch() isn't currently running. (if it is,
// it'll do the waiters, and doing them here may screw up ordering
// of op_queue vs handle_osd_map.)
if (!dispatch_running) {
dispatch_running = true;
do_waiters();
dispatch_running = false;
dispatch_cond.Signal();
}
do_waiters();

check_ops_in_flight();

Expand Down Expand Up @@ -5837,18 +5826,8 @@ bool OSD::ms_dispatch(Message *m)
return true;
}

while (dispatch_running) {
dout(10) << "ms_dispatch waiting for other dispatch thread to complete" << dendl;
dispatch_cond.Wait(osd_lock);
}
dispatch_running = true;

do_waiters();
_dispatch(m);
do_waiters();

dispatch_running = false;
dispatch_cond.Signal();

osd_lock.Unlock();

Expand Down Expand Up @@ -6084,15 +6063,11 @@ void OSD::do_waiters()
assert(osd_lock.is_locked());

dout(10) << "do_waiters -- start" << dendl;
finished_lock.Lock();
while (!finished.empty()) {
OpRequestRef next = finished.front();
finished.pop_front();
finished_lock.Unlock();
dispatch_op(next);
finished_lock.Lock();
}
finished_lock.Unlock();
dout(10) << "do_waiters -- finish" << dendl;
}

Expand Down
17 changes: 1 addition & 16 deletions src/osd/OSD.h
Original file line number Diff line number Diff line change
Expand Up @@ -1219,9 +1219,6 @@ class OSD : public Dispatcher,
int whoami;
std::string dev_path, journal_path;

Cond dispatch_cond;
bool dispatch_running;

void create_logger();
void create_recoverystate_perf();
void tick();
Expand Down Expand Up @@ -1717,22 +1714,10 @@ class OSD : public Dispatcher,
private:
// -- waiters --
list<OpRequestRef> finished;
Mutex finished_lock;

void take_waiters(list<OpRequestRef>& ls) {
finished_lock.Lock();
assert(osd_lock.is_locked());
finished.splice(finished.end(), ls);
finished_lock.Unlock();
}
void take_waiters_front(list<OpRequestRef>& ls) {
finished_lock.Lock();
finished.splice(finished.begin(), ls);
finished_lock.Unlock();
}
void take_waiter(OpRequestRef op) {
finished_lock.Lock();
finished.push_back(op);
finished_lock.Unlock();
}
void do_waiters();

Expand Down

0 comments on commit 3c83ab2

Please sign in to comment.