mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-29 23:09:44 -04:00
fees: introduce locks to forecaster manager
This commit is contained in:
parent
02a0639602
commit
491b4799e7
2 changed files with 16 additions and 5 deletions
|
@ -13,11 +13,13 @@
|
||||||
|
|
||||||
void FeeRateForecasterManager::RegisterForecaster(std::shared_ptr<Forecaster> forecaster)
|
void FeeRateForecasterManager::RegisterForecaster(std::shared_ptr<Forecaster> forecaster)
|
||||||
{
|
{
|
||||||
|
LOCK(cs);
|
||||||
forecasters.emplace(forecaster->GetForecastType(), forecaster);
|
forecasters.emplace(forecaster->GetForecastType(), forecaster);
|
||||||
}
|
}
|
||||||
|
|
||||||
CBlockPolicyEstimator* FeeRateForecasterManager::GetBlockPolicyEstimator()
|
CBlockPolicyEstimator* FeeRateForecasterManager::GetBlockPolicyEstimator()
|
||||||
{
|
{
|
||||||
|
LOCK(cs);
|
||||||
Assert(forecasters.contains(ForecastType::BLOCK_POLICY));
|
Assert(forecasters.contains(ForecastType::BLOCK_POLICY));
|
||||||
Forecaster* block_policy_estimator = forecasters.find(ForecastType::BLOCK_POLICY)->second.get();
|
Forecaster* block_policy_estimator = forecasters.find(ForecastType::BLOCK_POLICY)->second.get();
|
||||||
return dynamic_cast<CBlockPolicyEstimator*>(block_policy_estimator);
|
return dynamic_cast<CBlockPolicyEstimator*>(block_policy_estimator);
|
||||||
|
@ -26,6 +28,7 @@ CBlockPolicyEstimator* FeeRateForecasterManager::GetBlockPolicyEstimator()
|
||||||
std::pair<ForecastResult, std::vector<std::string>> FeeRateForecasterManager::ForecastFeeRateFromForecasters(
|
std::pair<ForecastResult, std::vector<std::string>> FeeRateForecasterManager::ForecastFeeRateFromForecasters(
|
||||||
int target, bool conservative) const
|
int target, bool conservative) const
|
||||||
{
|
{
|
||||||
|
LOCK(cs);
|
||||||
std::vector<std::string> err_messages;
|
std::vector<std::string> err_messages;
|
||||||
ForecastResult feerate_forecast;
|
ForecastResult feerate_forecast;
|
||||||
|
|
||||||
|
@ -66,6 +69,7 @@ std::pair<ForecastResult, std::vector<std::string>> FeeRateForecasterManager::Fo
|
||||||
|
|
||||||
unsigned int FeeRateForecasterManager::MaximumTarget() const
|
unsigned int FeeRateForecasterManager::MaximumTarget() const
|
||||||
{
|
{
|
||||||
|
LOCK(cs);
|
||||||
unsigned int maximum_target{0};
|
unsigned int maximum_target{0};
|
||||||
for (const auto& forecaster : forecasters) {
|
for (const auto& forecaster : forecasters) {
|
||||||
maximum_target = std::max(maximum_target, forecaster.second->MaximumTarget());
|
maximum_target = std::max(maximum_target, forecaster.second->MaximumTarget());
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
#ifndef BITCOIN_POLICY_FEES_FORECASTER_MAN_H
|
#ifndef BITCOIN_POLICY_FEES_FORECASTER_MAN_H
|
||||||
#define BITCOIN_POLICY_FEES_FORECASTER_MAN_H
|
#define BITCOIN_POLICY_FEES_FORECASTER_MAN_H
|
||||||
|
|
||||||
|
#include <sync.h>
|
||||||
|
#include <threadsafety.h>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
@ -22,18 +25,21 @@ class FeeRateForecasterManager
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
//! Map of all registered forecasters to their shared pointers.
|
//! Map of all registered forecasters to their shared pointers.
|
||||||
std::unordered_map<ForecastType, std::shared_ptr<Forecaster>> forecasters;
|
std::unordered_map<ForecastType, std::shared_ptr<Forecaster>> forecasters GUARDED_BY(cs);
|
||||||
|
|
||||||
|
mutable Mutex cs;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Register a forecaster.
|
* Register a forecaster.
|
||||||
* @param[in] forecaster shared pointer to a Forecaster instance.
|
* @param[in] forecaster shared pointer to a Forecaster instance.
|
||||||
*/
|
*/
|
||||||
void RegisterForecaster(std::shared_ptr<Forecaster> forecaster);
|
void RegisterForecaster(std::shared_ptr<Forecaster> forecaster) EXCLUSIVE_LOCKS_REQUIRED(!cs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the pointer to block policy estimator.
|
* Return the pointer to block policy estimator.
|
||||||
*/
|
*/
|
||||||
CBlockPolicyEstimator* GetBlockPolicyEstimator();
|
CBlockPolicyEstimator* GetBlockPolicyEstimator() EXCLUSIVE_LOCKS_REQUIRED(!cs);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a fee rate forecast from all registered forecasters for a given confirmation target.
|
* Get a fee rate forecast from all registered forecasters for a given confirmation target.
|
||||||
|
@ -44,12 +50,13 @@ public:
|
||||||
* @param[in] conservative True if the package cannot be fee bumped later.
|
* @param[in] conservative True if the package cannot be fee bumped later.
|
||||||
* @return A pair consisting of the forecast result and a vector of forecaster names.
|
* @return A pair consisting of the forecast result and a vector of forecaster names.
|
||||||
*/
|
*/
|
||||||
std::pair<ForecastResult, std::vector<std::string>> ForecastFeeRateFromForecasters(int target, bool conservative) const;
|
std::pair<ForecastResult, std::vector<std::string>> ForecastFeeRateFromForecasters(int target, bool conservative) const
|
||||||
|
EXCLUSIVE_LOCKS_REQUIRED(!cs);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Returns the maximum supported confirmation target from all forecasters.
|
* @brief Returns the maximum supported confirmation target from all forecasters.
|
||||||
*/
|
*/
|
||||||
unsigned int MaximumTarget() const;
|
unsigned int MaximumTarget() const EXCLUSIVE_LOCKS_REQUIRED(!cs);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BITCOIN_POLICY_FEES_FORECASTER_MAN_H
|
#endif // BITCOIN_POLICY_FEES_FORECASTER_MAN_H
|
||||||
|
|
Loading…
Add table
Reference in a new issue