summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Hernandez <scotthernandez@gmail.com>2016-10-13 08:16:25 -0400
committerScott Hernandez <scotthernandez@gmail.com>2016-10-14 08:54:44 -0400
commitc5e6441c6efc20d93aeac366497d91aa9380426f (patch)
treedf15836630d0e60858711e455c3f7f85d0e5c4a9
parent886db25408492ced7d84b1cc06956d1e8613b29e (diff)
downloadmongo-c5e6441c6efc20d93aeac366497d91aa9380426f.tar.gz
SERVER-25662: add diagnostics string to thread pool executor
-rw-r--r--src/mongo/db/repl/replication_executor.cpp4
-rw-r--r--src/mongo/db/repl/replication_executor.h6
-rw-r--r--src/mongo/executor/task_executor.h2
-rw-r--r--src/mongo/executor/thread_pool_task_executor.cpp26
-rw-r--r--src/mongo/executor/thread_pool_task_executor.h9
-rw-r--r--src/mongo/unittest/task_executor_proxy.cpp2
-rw-r--r--src/mongo/unittest/task_executor_proxy.h2
7 files changed, 39 insertions, 12 deletions
diff --git a/src/mongo/db/repl/replication_executor.cpp b/src/mongo/db/repl/replication_executor.cpp
index 400684cc159..7497793b6ca 100644
--- a/src/mongo/db/repl/replication_executor.cpp
+++ b/src/mongo/db/repl/replication_executor.cpp
@@ -69,7 +69,7 @@ ReplicationExecutor::~ReplicationExecutor() {
invariant(!_executorThread.joinable());
}
-BSONObj ReplicationExecutor::getDiagnosticBSON() {
+BSONObj ReplicationExecutor::getDiagnosticBSON() const {
stdx::lock_guard<stdx::mutex> lk(_mutex);
BSONObjBuilder builder;
@@ -104,7 +104,7 @@ BSONObj ReplicationExecutor::getDiagnosticBSON() {
return builder.obj();
}
-std::string ReplicationExecutor::getDiagnosticString() {
+std::string ReplicationExecutor::getDiagnosticString() const {
stdx::lock_guard<stdx::mutex> lk(_mutex);
return _getDiagnosticString_inlock();
}
diff --git a/src/mongo/db/repl/replication_executor.h b/src/mongo/db/repl/replication_executor.h
index 75bfef7c170..b317ca587ec 100644
--- a/src/mongo/db/repl/replication_executor.h
+++ b/src/mongo/db/repl/replication_executor.h
@@ -105,8 +105,8 @@ public:
*/
virtual ~ReplicationExecutor();
- std::string getDiagnosticString() override;
- BSONObj getDiagnosticBSON();
+ std::string getDiagnosticString() const override;
+ BSONObj getDiagnosticBSON() const;
Date_t now() override;
void startup() override;
void shutdown() override;
@@ -314,7 +314,7 @@ private:
// Thread which executes the run method. Started by startup and must be jointed after shutdown.
stdx::thread _executorThread;
- stdx::mutex _mutex;
+ mutable stdx::mutex _mutex;
stdx::mutex _terribleExLockSyncMutex;
stdx::condition_variable _noMoreWaitingThreads;
WorkQueue _freeQueue;
diff --git a/src/mongo/executor/task_executor.h b/src/mongo/executor/task_executor.h
index 96d52d794e4..2d558512f91 100644
--- a/src/mongo/executor/task_executor.h
+++ b/src/mongo/executor/task_executor.h
@@ -136,7 +136,7 @@ public:
/**
* Returns diagnostic information.
*/
- virtual std::string getDiagnosticString() = 0;
+ virtual std::string getDiagnosticString() const = 0;
/**
* Gets the current time. Callbacks should use this method to read the system clock.
diff --git a/src/mongo/executor/thread_pool_task_executor.cpp b/src/mongo/executor/thread_pool_task_executor.cpp
index 26606d8f0ee..efd321e1d7d 100644
--- a/src/mongo/executor/thread_pool_task_executor.cpp
+++ b/src/mongo/executor/thread_pool_task_executor.cpp
@@ -187,8 +187,30 @@ void ThreadPoolTaskExecutor::join() {
invariant(_unsignaledEvents.empty());
}
-std::string ThreadPoolTaskExecutor::getDiagnosticString() {
- return {};
+BSONObj ThreadPoolTaskExecutor::_getDiagnosticBSON() const {
+ stdx::lock_guard<stdx::mutex> lk(_mutex);
+ BSONObjBuilder builder;
+
+ // ThreadPool details
+ // TODO: fill in
+ BSONObjBuilder poolCounters(builder.subobjStart("pool"));
+ poolCounters.appendIntOrLL("inProgressCount", _poolInProgressQueue.size());
+ poolCounters.done();
+
+ // Queues
+ BSONObjBuilder queues(builder.subobjStart("queues"));
+ queues.appendIntOrLL("networkInProgress", _networkInProgressQueue.size());
+ queues.appendIntOrLL("sleepers", _sleepersQueue.size());
+ queues.done();
+
+ builder.appendIntOrLL("unsignaledEvents", _unsignaledEvents.size());
+ builder.append("shuttingDown", _inShutdown);
+ builder.append("networkInterface", _net->getDiagnosticString());
+ return builder.obj();
+}
+
+std::string ThreadPoolTaskExecutor::getDiagnosticString() const {
+ return _getDiagnosticBSON().toString();
}
Date_t ThreadPoolTaskExecutor::now() {
diff --git a/src/mongo/executor/thread_pool_task_executor.h b/src/mongo/executor/thread_pool_task_executor.h
index 9cd55507649..3f573e1ab9d 100644
--- a/src/mongo/executor/thread_pool_task_executor.h
+++ b/src/mongo/executor/thread_pool_task_executor.h
@@ -68,7 +68,7 @@ public:
void startup() override;
void shutdown() override;
void join() override;
- std::string getDiagnosticString() override;
+ std::string getDiagnosticString() const override;
Date_t now() override;
StatusWith<EventHandle> makeEvent() override;
void signalEvent(const EventHandle& event) override;
@@ -147,6 +147,11 @@ private:
*/
void runCallback(std::shared_ptr<CallbackState> cbState);
+ /**
+ * Returns bson for diagnostics
+ */
+ BSONObj _getDiagnosticBSON() const;
+
// The network interface used for remote command execution and waiting.
std::unique_ptr<NetworkInterface> _net;
@@ -154,7 +159,7 @@ private:
std::unique_ptr<ThreadPoolInterface> _pool;
// Mutex guarding all remaining fields.
- stdx::mutex _mutex;
+ mutable stdx::mutex _mutex;
// Queue containing all items currently scheduled into the thread pool but not yet completed.
WorkQueue _poolInProgressQueue;
diff --git a/src/mongo/unittest/task_executor_proxy.cpp b/src/mongo/unittest/task_executor_proxy.cpp
index 0168e0a752d..ffaf7b049c9 100644
--- a/src/mongo/unittest/task_executor_proxy.cpp
+++ b/src/mongo/unittest/task_executor_proxy.cpp
@@ -57,7 +57,7 @@ void TaskExecutorProxy::join() {
_executor->join();
}
-std::string TaskExecutorProxy::getDiagnosticString() {
+std::string TaskExecutorProxy::getDiagnosticString() const {
return _executor->getDiagnosticString();
}
diff --git a/src/mongo/unittest/task_executor_proxy.h b/src/mongo/unittest/task_executor_proxy.h
index f5c9ee63013..4f2076f4991 100644
--- a/src/mongo/unittest/task_executor_proxy.h
+++ b/src/mongo/unittest/task_executor_proxy.h
@@ -53,7 +53,7 @@ public:
virtual void startup() override;
virtual void shutdown() override;
virtual void join() override;
- virtual std::string getDiagnosticString() override;
+ virtual std::string getDiagnosticString() const override;
virtual Date_t now() override;
virtual StatusWith<EventHandle> makeEvent() override;
virtual void signalEvent(const EventHandle& event) override;