rippled
TimeoutCounter.h
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012, 2013 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #ifndef RIPPLE_APP_LEDGER_TIMEOUTCOUNTER_H_INCLUDED
21 #define RIPPLE_APP_LEDGER_TIMEOUTCOUNTER_H_INCLUDED
22 
23 #include <ripple/app/main/Application.h>
24 #include <ripple/beast/clock/abstract_clock.h>
25 #include <ripple/beast/utility/Journal.h>
26 #include <ripple/core/Job.h>
27 #include <boost/asio/basic_waitable_timer.hpp>
28 #include <mutex>
29 
30 namespace ripple {
31 
67 {
68 public:
77  virtual void
78  cancel();
79 
80 protected:
82 
84  {
88  };
89 
91  Application& app,
92  uint256 const& targetHash,
93  std::chrono::milliseconds timeoutInterval,
94  QueueJobParameter&& jobParameter,
95  beast::Journal journal);
96 
97  virtual ~TimeoutCounter() = default;
98 
100  void
102 
104  void
106 
108  virtual void
109  onTimer(bool progress, ScopedLockType&) = 0;
110 
113  pmDowncast() = 0;
114 
115  bool
116  isDone() const
117  {
118  return complete_ || failed_;
119  }
120 
121  // Used in this class for access to boost::asio::io_service and
122  // ripple::Overlay. Used in subtypes for the kitchen sink.
126 
129  uint256 const hash_;
131  bool complete_;
132  bool failed_;
134  bool progress_;
137 
139 
140 private:
144  void
145  invokeOnTimer();
146 
147  boost::asio::basic_waitable_timer<std::chrono::steady_clock> timer_;
148 };
149 
150 } // namespace ripple
151 
152 #endif
ripple::TimeoutCounter::timer_
boost::asio::basic_waitable_timer< std::chrono::steady_clock > timer_
Definition: TimeoutCounter.h:147
ripple::Application
Definition: Application.h:115
ripple::TimeoutCounter::QueueJobParameter::jobLimit
std::optional< std::uint32_t > jobLimit
Definition: TimeoutCounter.h:87
std::string
STL class.
ripple::TimeoutCounter::QueueJobParameter::jobType
JobType jobType
Definition: TimeoutCounter.h:85
ripple::TimeoutCounter::cancel
virtual void cancel()
Cancel the task by marking it as failed if the task is not done.
Definition: TimeoutCounter.cpp:118
ripple::TimeoutCounter::setTimer
void setTimer(ScopedLockType &)
Schedule a call to queueJob() after mTimerInterval.
Definition: TimeoutCounter.cpp:50
ripple::TimeoutCounter::pmDowncast
virtual std::weak_ptr< TimeoutCounter > pmDowncast()=0
Return a weak pointer to this.
std::chrono::milliseconds
ripple::TimeoutCounter::queueJob
void queueJob(ScopedLockType &)
Queue a job to call invokeOnTimer().
Definition: TimeoutCounter.cpp:69
ripple::TimeoutCounter::progress_
bool progress_
Whether forward progress has been made.
Definition: TimeoutCounter.h:134
std::recursive_mutex
STL class.
ripple::TimeoutCounter::QueueJobParameter::jobName
std::string jobName
Definition: TimeoutCounter.h:86
ripple::TimeoutCounter
This class is an "active" object.
Definition: TimeoutCounter.h:66
ripple::TimeoutCounter::mtx_
std::recursive_mutex mtx_
Definition: TimeoutCounter.h:125
ripple::base_uint< 256 >
ripple::TimeoutCounter::app_
Application & app_
Definition: TimeoutCounter.h:123
ripple::TimeoutCounter::invokeOnTimer
void invokeOnTimer()
Calls onTimer() if in the right state.
Definition: TimeoutCounter.cpp:93
ripple::TimeoutCounter::failed_
bool failed_
Definition: TimeoutCounter.h:132
ripple::TimeoutCounter::QueueJobParameter
Definition: TimeoutCounter.h:83
std::unique_lock< std::recursive_mutex >
beast::Journal
A generic endpoint for log messages.
Definition: Journal.h:58
ripple::TimeoutCounter::isDone
bool isDone() const
Definition: TimeoutCounter.h:116
std::weak_ptr
STL class.
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::TimeoutCounter::hash_
const uint256 hash_
The hash of the object (in practice, always a ledger) we are trying to fetch.
Definition: TimeoutCounter.h:129
ripple::TimeoutCounter::~TimeoutCounter
virtual ~TimeoutCounter()=default
ripple::TimeoutCounter::queueJobParameter_
QueueJobParameter queueJobParameter_
Definition: TimeoutCounter.h:138
std::optional< std::uint32_t >
mutex
ripple::JobType
JobType
Definition: Job.h:35
ripple::TimeoutCounter::timerInterval_
std::chrono::milliseconds timerInterval_
The minimum time to wait between calls to execute().
Definition: TimeoutCounter.h:136
ripple::TimeoutCounter::TimeoutCounter
TimeoutCounter(Application &app, uint256 const &targetHash, std::chrono::milliseconds timeoutInterval, QueueJobParameter &&jobParameter, beast::Journal journal)
Definition: TimeoutCounter.cpp:29
ripple::TimeoutCounter::complete_
bool complete_
Definition: TimeoutCounter.h:131
ripple::TimeoutCounter::onTimer
virtual void onTimer(bool progress, ScopedLockType &)=0
Hook called from invokeOnTimer().
ripple::TimeoutCounter::timeouts_
int timeouts_
Definition: TimeoutCounter.h:130
ripple::TimeoutCounter::journal_
beast::Journal journal_
Definition: TimeoutCounter.h:124