diff options
author | Sage Weil <sage@inktank.com> | 2012-11-27 15:58:09 -0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2012-11-29 16:09:45 -0800 |
commit | 158260b6ae3ca5dc72d62590228d435fd8f2b34e (patch) | |
tree | b9b5ed996aef2e4767f20d4961f072575fb90d0a | |
parent | f0bf61687870da4d430482eaf5f1f9d6e0b2645f (diff) | |
download | ceph-158260b6ae3ca5dc72d62590228d435fd8f2b34e.tar.gz |
msg/Pipe: start delay thread *after* we know peer type
At end of connect(), or end of accept().
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/msg/Pipe.cc | 13 | ||||
-rw-r--r-- | src/msg/Pipe.h | 1 |
2 files changed, 10 insertions, 4 deletions
diff --git a/src/msg/Pipe.cc b/src/msg/Pipe.cc index 404edb589c6..f6061564444 100644 --- a/src/msg/Pipe.cc +++ b/src/msg/Pipe.cc @@ -127,15 +127,16 @@ void Pipe::start_reader() } reader_running = true; reader_thread.create(msgr->cct->_conf->ms_rwthread_stack_bytes); +} + +void Pipe::maybe_start_delay_thread() +{ if (!delay_thread && msgr->cct->_conf->ms_inject_delay_type.find(ceph_entity_type_name(connection_state->peer_type)) != string::npos) { lsubdout(msgr->cct, ms, 1) << "setting up a delay queue on Pipe " << this << dendl; delay_thread = new DelayedDelivery(this); delay_thread->create(); - } else - lsubdout(msgr->cct, ms, 1) << "Pipe " << this << " peer is " << ceph_entity_type_name(connection_state->peer_type) - << "; NOT injecting delays because it does not match " - << msgr->cct->_conf->ms_inject_delay_type << dendl; + } } void Pipe::start_writer() @@ -615,6 +616,9 @@ int Pipe::accept() } ldout(msgr->cct,20) << "accept done" << dendl; pipe_lock.Unlock(); + + maybe_start_delay_thread(); + return 0; // success. fail_unlocked: @@ -964,6 +968,7 @@ int Pipe::connect() ldout(msgr->cct,20) << "connect starting reader" << dendl; start_reader(); } + maybe_start_delay_thread(); delete authorizer; return 0; } diff --git a/src/msg/Pipe.h b/src/msg/Pipe.h index c489ec80610..4754a530585 100644 --- a/src/msg/Pipe.h +++ b/src/msg/Pipe.h @@ -211,6 +211,7 @@ class DispatchQueue; void start_reader(); void start_writer(); + void maybe_start_delay_thread(); void join_reader(); // public constructors |