summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2012-11-27 15:58:09 -0800
committerSage Weil <sage@inktank.com>2012-11-29 16:09:45 -0800
commit158260b6ae3ca5dc72d62590228d435fd8f2b34e (patch)
treeb9b5ed996aef2e4767f20d4961f072575fb90d0a
parentf0bf61687870da4d430482eaf5f1f9d6e0b2645f (diff)
downloadceph-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.cc13
-rw-r--r--src/msg/Pipe.h1
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