|
rippled
|
A pool of threads to perform work. More...


Classes | |
| class | Coro |
| Coroutines must run to completion. More... | |
Public Types | |
| using | JobFunction = std::function< void(Job &)> |
Public Member Functions | |
| JobQueue (beast::insight::Collector::ptr const &collector, Stoppable &parent, beast::Journal journal, Logs &logs, perf::PerfLog &perfLog) | |
| ~JobQueue () | |
| template<typename JobHandler > | |
| bool | addJob (JobType type, std::string const &name, JobHandler &&jobHandler) |
| Adds a job to the JobQueue. More... | |
| template<class F > | |
| std::shared_ptr< Coro > | postCoro (JobType t, std::string const &name, F &&f) |
| Creates a coroutine and adds a job to the queue which will run it. More... | |
| int | getJobCount (JobType t) const |
| Jobs waiting at this priority. More... | |
| int | getJobCountTotal (JobType t) const |
| Jobs waiting plus running at this priority. More... | |
| int | getJobCountGE (JobType t) const |
| All waiting jobs at or greater than this priority. More... | |
| void | setThreadCount (int c, bool const standaloneMode) |
| Set the number of thread serving the job queue to precisely this number. More... | |
| std::unique_ptr< LoadEvent > | makeLoadEvent (JobType t, std::string const &name) |
| Return a scoped LoadEvent. More... | |
| void | addLoadEvents (JobType t, int count, std::chrono::milliseconds elapsed) |
| Add multiple load events. More... | |
| bool | isOverloaded () |
| Json::Value | getJson (int c=0) |
| void | rendezvous () |
| Block until no tasks running. More... | |
| RootStoppable & | getRoot () |
| void | setParent (Stoppable &parent) |
| Set the parent of this Stoppable. More... | |
| bool | isStopping () const |
Returns true if the stoppable should stop. More... | |
| bool | isStopped () const |
Returns true if the requested stop has completed. More... | |
| bool | areChildrenStopped () const |
Returns true if all children have stopped. More... | |
| JobCounter & | jobCounter () |
| bool | alertable_sleep_until (std::chrono::system_clock::time_point const &t) |
| Sleep or wake up on stop. More... | |
Protected Member Functions | |
| void | stopped () |
| Called by derived classes to indicate that the stoppable has stopped. More... | |
Private Types | |
| using | JobDataMap = std::map< JobType, JobTypeData > |
| using | Children = beast::LockFreeStack< Child > |
Private Member Functions | |
| void | collect () |
| JobTypeData & | getJobTypeData (JobType type) |
| void | onStop () override |
| Override called when the stop notification is issued. More... | |
| void | checkStopped (std::lock_guard< std::mutex > const &lock) |
| bool | addRefCountedJob (JobType type, std::string const &name, JobFunction const &func) |
| void | queueJob (Job const &job, std::lock_guard< std::mutex > const &lock) |
| void | getNextJob (Job &job) |
| void | finishJob (JobType type) |
| void | processTask (int instance) override |
| Perform a task. More... | |
| int | getJobLimit (JobType type) |
| void | onChildrenStopped () override |
| Override called when all children have stopped. More... | |
| virtual void | onPrepare () |
| Override called during preparation. More... | |
| virtual void | onStart () |
| Override called during start. More... | |
| void | prepareRecursive () |
| void | startRecursive () |
| void | stopAsyncRecursive (beast::Journal j) |
| void | stopRecursive (beast::Journal j) |
Private Attributes | |
| beast::Journal | m_journal |
| std::mutex | m_mutex |
| std::uint64_t | m_lastJob |
| std::set< Job > | m_jobSet |
| JobDataMap | m_jobData |
| JobTypeData | m_invalidJobData |
| int | m_processCount |
| int | nSuspend_ = 0 |
| Workers | m_workers |
| Job::CancelCallback | m_cancelCallback |
| perf::PerfLog & | perfLog_ |
| beast::insight::Collector::ptr | m_collector |
| beast::insight::Gauge | job_count |
| beast::insight::Hook | hook |
| std::condition_variable | cv_ |
| std::string | m_name |
| RootStoppable & | m_root |
| Child | m_child |
| std::atomic< bool > | m_stopped {false} |
| std::atomic< bool > | m_childrenStopped {false} |
| Children | m_children |
| std::condition_variable | m_cv |
| std::mutex | m_mut |
| bool | m_is_stopping = false |
| bool | hasParent_ {false} |
Friends | |
| class | Coro |
A pool of threads to perform work.
A job posted will always run to completion.
Coroutines that are suspended must be resumed, and run to completion.
When the JobQueue stops, it waits for all jobs and coroutines to finish.
Definition at line 55 of file JobQueue.h.
| using ripple::JobQueue::JobFunction = std::function<void(Job&)> |
Definition at line 141 of file JobQueue.h.
|
private |
Definition at line 234 of file JobQueue.h.
|
privateinherited |
Definition at line 319 of file Stoppable.h.
| ripple::JobQueue::JobQueue | ( | beast::insight::Collector::ptr const & | collector, |
| Stoppable & | parent, | ||
| beast::Journal | journal, | ||
| Logs & | logs, | ||
| perf::PerfLog & | perfLog | ||
| ) |
Definition at line 26 of file JobQueue.cpp.
| ripple::JobQueue::~JobQueue | ( | ) |
Definition at line 63 of file JobQueue.cpp.
| bool ripple::JobQueue::addJob | ( | JobType | type, |
| std::string const & | name, | ||
| JobHandler && | jobHandler | ||
| ) |
Adds a job to the JobQueue.
| type | The type of job. |
| name | Name of the job. |
| jobHandler | Lambda with signature void (Job&). Called when the job is executed. |
Definition at line 166 of file JobQueue.h.
| std::shared_ptr< JobQueue::Coro > ripple::JobQueue::postCoro | ( | JobType | t, |
| std::string const & | name, | ||
| F && | f | ||
| ) |
Creates a coroutine and adds a job to the queue which will run it.
| t | The type of job. |
| name | Name of the job. |
| f | Has a signature of void(std::shared_ptr<Coro>). Called when the job executes. |
Definition at line 427 of file JobQueue.h.
| int ripple::JobQueue::getJobCount | ( | JobType | t | ) | const |
Jobs waiting at this priority.
Definition at line 121 of file JobQueue.cpp.
| int ripple::JobQueue::getJobCountTotal | ( | JobType | t | ) | const |
Jobs waiting plus running at this priority.
Definition at line 131 of file JobQueue.cpp.
| int ripple::JobQueue::getJobCountGE | ( | JobType | t | ) | const |
All waiting jobs at or greater than this priority.
Definition at line 141 of file JobQueue.cpp.
| void ripple::JobQueue::setThreadCount | ( | int | c, |
| bool const | standaloneMode | ||
| ) |
Set the number of thread serving the job queue to precisely this number.
Definition at line 158 of file JobQueue.cpp.
| std::unique_ptr< LoadEvent > ripple::JobQueue::makeLoadEvent | ( | JobType | t, |
| std::string const & | name | ||
| ) |
Return a scoped LoadEvent.
Definition at line 181 of file JobQueue.cpp.
| void ripple::JobQueue::addLoadEvents | ( | JobType | t, |
| int | count, | ||
| std::chrono::milliseconds | elapsed | ||
| ) |
Add multiple load events.
Definition at line 193 of file JobQueue.cpp.
| bool ripple::JobQueue::isOverloaded | ( | ) |
Definition at line 204 of file JobQueue.cpp.
| Json::Value ripple::JobQueue::getJson | ( | int | c = 0 | ) |
Definition at line 218 of file JobQueue.cpp.
| void ripple::JobQueue::rendezvous | ( | ) |
Block until no tasks running.
Definition at line 276 of file JobQueue.cpp.
|
private |
Definition at line 70 of file JobQueue.cpp.
|
private |
Definition at line 283 of file JobQueue.cpp.
|
overrideprivatevirtual |
Override called when the stop notification is issued.
The call is made on an unspecified, implementation-specific thread. onStop and onChildrenStopped will never be called concurrently, across all Stoppable objects descended from the same root, inclusive of the root.
It is safe to call isStopping, isStopped, and areChildrenStopped from within this function; The values returned will always be valid and never change during the callback.
The default implementation simply calls stopped(). This is applicable when the Stoppable has a trivial stop operation (or no stop operation), and we are merely using the Stoppable API to position it as a dependency of some parent service.
Thread safety: May not block for long periods. Guaranteed only to be called once. Must be safe to call from any thread at any time.
Reimplemented from ripple::Stoppable.
Definition at line 297 of file JobQueue.cpp.
|
private |
Definition at line 304 of file JobQueue.cpp.
|
private |
Definition at line 77 of file JobQueue.cpp.
|
private |
Definition at line 322 of file JobQueue.cpp.
|
private |
Definition at line 345 of file JobQueue.cpp.
|
private |
Definition at line 379 of file JobQueue.cpp.
|
overrideprivatevirtual |
Perform a task.
The call is made on a thread owned by Workers. It is important that you only process one task from inside your callback. Each call to addTask will result in exactly one call to processTask.
| instance | The worker thread instance. |
Implements ripple::Workers::Callback.
Definition at line 398 of file JobQueue.cpp.
|
private |
Definition at line 452 of file JobQueue.cpp.
|
overrideprivatevirtual |
Override called when all children have stopped.
The call is made on an unspecified, implementation-specific thread. onStop and onChildrenStopped will never be called concurrently, across all Stoppable objects descended from the same root, inclusive of the root.
It is safe to call isStopping, isStopped, and areChildrenStopped from within this function; The values returned will always be valid and never change during the callback.
The default implementation does nothing.
Thread safety: May not block for long periods. Guaranteed only to be called once. Must be safe to call from any thread at any time.
Reimplemented from ripple::Stoppable.
Definition at line 461 of file JobQueue.cpp.
|
inherited |
Definition at line 214 of file Stoppable.h.
|
inherited |
Set the parent of this Stoppable.
Definition at line 43 of file Stoppable.cpp.
|
inherited |
Returns true if the stoppable should stop.
Definition at line 54 of file Stoppable.cpp.
|
inherited |
Returns true if the requested stop has completed.
Definition at line 60 of file Stoppable.cpp.
|
inherited |
Returns true if all children have stopped.
Definition at line 66 of file Stoppable.cpp.
|
inherited |
Definition at line 437 of file Stoppable.h.
|
inherited |
Sleep or wake up on stop.
true if we are stopping Definition at line 455 of file Stoppable.h.
|
protectedinherited |
Called by derived classes to indicate that the stoppable has stopped.
Definition at line 72 of file Stoppable.cpp.
|
privatevirtualinherited |
Override called during preparation.
Since all other Stoppable objects in the tree have already been constructed, this provides an opportunity to perform initialization which depends on calling into other Stoppable objects. This call is made on the same thread that called prepare(). The default implementation does nothing. Guaranteed to only be called once.
Reimplemented in ripple::ApplicationImp, ripple::OverlayImpl, ripple::test::Stoppable_test::Root, ripple::test::Stoppable_test::C, ripple::test::Stoppable_test::I, ripple::test::Stoppable_test::B, ripple::test::Stoppable_test::H, ripple::test::Stoppable_test::G, ripple::SHAMapStoreImp, ripple::test::Stoppable_test::A, ripple::PeerFinder::ManagerImp, ripple::perf::PerfLogImp, ripple::test::Stoppable_test::F, ripple::test::Stoppable_test::E, ripple::detail::LedgerCleanerImp, ripple::test::Stoppable_test::J, ripple::LoadManager, ripple::PerfLog_test::PerfLogParent, and ripple::test::Stoppable_test::D.
Definition at line 80 of file Stoppable.cpp.
|
privatevirtualinherited |
Override called during start.
Reimplemented in ripple::ApplicationImp, ripple::OverlayImpl, ripple::test::Stoppable_test::Root, ripple::test::Stoppable_test::C, ripple::test::Stoppable_test::I, ripple::test::Stoppable_test::B, ripple::test::Stoppable_test::H, ripple::test::Stoppable_test::G, ripple::SHAMapStoreImp, ripple::GRPCServer, ripple::test::Stoppable_test::A, ripple::PeerFinder::ManagerImp, ripple::perf::PerfLogImp, ripple::test::Stoppable_test::F, ripple::test::Stoppable_test::E, ripple::detail::LedgerCleanerImp, ripple::test::Stoppable_test::J, ripple::LoadManager, ripple::PerfLog_test::PerfLogParent, and ripple::test::Stoppable_test::D.
Definition at line 85 of file Stoppable.cpp.
|
privateinherited |
Definition at line 103 of file Stoppable.cpp.
|
privateinherited |
Definition at line 113 of file Stoppable.cpp.
|
privateinherited |
Definition at line 123 of file Stoppable.cpp.
|
privateinherited |
Definition at line 134 of file Stoppable.cpp.
|
friend |
Definition at line 232 of file JobQueue.h.
|
private |
Definition at line 236 of file JobQueue.h.
|
mutableprivate |
Definition at line 237 of file JobQueue.h.
|
private |
Definition at line 238 of file JobQueue.h.
Definition at line 239 of file JobQueue.h.
|
private |
Definition at line 240 of file JobQueue.h.
|
private |
Definition at line 241 of file JobQueue.h.
|
private |
Definition at line 244 of file JobQueue.h.
|
private |
Definition at line 247 of file JobQueue.h.
|
private |
Definition at line 249 of file JobQueue.h.
|
private |
Definition at line 250 of file JobQueue.h.
|
private |
Definition at line 253 of file JobQueue.h.
|
private |
Definition at line 254 of file JobQueue.h.
|
private |
Definition at line 255 of file JobQueue.h.
|
private |
Definition at line 256 of file JobQueue.h.
|
private |
Definition at line 258 of file JobQueue.h.
|
privateinherited |
Definition at line 339 of file Stoppable.h.
|
privateinherited |
Definition at line 340 of file Stoppable.h.
|
privateinherited |
Definition at line 341 of file Stoppable.h.
|
privateinherited |
Definition at line 342 of file Stoppable.h.
|
privateinherited |
Definition at line 343 of file Stoppable.h.
|
privateinherited |
Definition at line 344 of file Stoppable.h.
|
privateinherited |
Definition at line 345 of file Stoppable.h.
|
privateinherited |
Definition at line 346 of file Stoppable.h.
|
privateinherited |
Definition at line 347 of file Stoppable.h.
|
privateinherited |
Definition at line 348 of file Stoppable.h.
1.8.17