Summary:
In preparation for a global IOThreadPoolExecutor - we can't override the workerFactory if we are using a global one.
Instead, add a new getEventBases() to IOTHreadPoolExecutro and just run code on each eventBase. For shutdown, explicitly add a stop(), instead of doing the work after loop() as exited
Cpp2Worker required minor changes to be able to use EventBaseManager's eventbase vs. their own
Test Plan: fbconfig -r thrift/lib/cpp2; fbmake runtests
Reviewed By: jsedgwick@fb.com
Subscribers: trunkagent, andrewcox, doug, fugalh, alandau, bmatheny, mshneer, folly-diffs@
FB internal diff:
D1734795
Signature: t1:
1734795:
1418759367:
b45f419e5cbc482a64a5873d9e00e3bcb071db5a
}
}
+std::vector<EventBase*> IOThreadPoolExecutor::getEventBases() {
+ std::vector<EventBase*> bases;
+ RWSpinLock::ReadHolder{&threadListLock_};
+ for (const auto& thread : threadList_.get()) {
+ auto ioThread = std::static_pointer_cast<IOThread>(thread);
+ bases.push_back(ioThread->eventBase);
+ }
+ return bases;
+}
+
// threadListLock_ is readlocked
uint64_t IOThreadPoolExecutor::getPendingTaskCount() {
uint64_t count = 0;
EventBase* getEventBase() override;
+ std::vector<EventBase*> getEventBases();
+
private:
struct FOLLY_ALIGN_TO_AVOID_FALSE_SHARING IOThread : public Thread {
IOThread(IOThreadPoolExecutor* pool)
prefix_ = prefix.str();
}
+ std::string getNamePrefix() {
+ return prefix_;
+ }
+
private:
std::string prefix_;
std::atomic<uint64_t> suffix_;