diff options
author | Scott Hernandez <scotthernandez@gmail.com> | 2016-10-13 08:16:25 -0400 |
---|---|---|
committer | Scott Hernandez <scotthernandez@gmail.com> | 2016-10-14 08:54:44 -0400 |
commit | c5e6441c6efc20d93aeac366497d91aa9380426f (patch) | |
tree | df15836630d0e60858711e455c3f7f85d0e5c4a9 | |
parent | 886db25408492ced7d84b1cc06956d1e8613b29e (diff) | |
download | mongo-c5e6441c6efc20d93aeac366497d91aa9380426f.tar.gz |
SERVER-25662: add diagnostics string to thread pool executor
-rw-r--r-- | src/mongo/db/repl/replication_executor.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/repl/replication_executor.h | 6 | ||||
-rw-r--r-- | src/mongo/executor/task_executor.h | 2 | ||||
-rw-r--r-- | src/mongo/executor/thread_pool_task_executor.cpp | 26 | ||||
-rw-r--r-- | src/mongo/executor/thread_pool_task_executor.h | 9 | ||||
-rw-r--r-- | src/mongo/unittest/task_executor_proxy.cpp | 2 | ||||
-rw-r--r-- | src/mongo/unittest/task_executor_proxy.h | 2 |
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; |