mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-18 04:41:21 +02:00
mempool: Introduce (still-unused) MemPoolLimits
They live as a CTxMemPool member. [META] These limits will be used in subsequent commits to replace calls to gArgs.
This commit is contained in:
parent
716bb5fbd3
commit
9333427014
@ -173,6 +173,7 @@ BITCOIN_CORE_H = \
|
||||
kernel/checks.h \
|
||||
kernel/coinstats.h \
|
||||
kernel/context.h \
|
||||
kernel/mempool_limits.h \
|
||||
kernel/mempool_options.h \
|
||||
key.h \
|
||||
key_io.h \
|
||||
|
26
src/kernel/mempool_limits.h
Normal file
26
src/kernel/mempool_limits.h
Normal file
@ -0,0 +1,26 @@
|
||||
// Copyright (c) 2022 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_KERNEL_MEMPOOL_LIMITS_H
|
||||
#define BITCOIN_KERNEL_MEMPOOL_LIMITS_H
|
||||
|
||||
#include <policy/policy.h>
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
namespace kernel {
|
||||
/**
|
||||
* Options struct containing limit options for a CTxMemPool. Default constructor
|
||||
* populates the struct with sane default values which can be modified.
|
||||
*
|
||||
* Most of the time, this struct should be referenced as CTxMemPool::Limits.
|
||||
*/
|
||||
struct MemPoolLimits {
|
||||
int64_t ancestor_count{DEFAULT_ANCESTOR_LIMIT};
|
||||
int64_t ancestor_size_vbytes{DEFAULT_ANCESTOR_SIZE_LIMIT_KVB * 1'000};
|
||||
int64_t descendant_count{DEFAULT_DESCENDANT_LIMIT};
|
||||
int64_t descendant_size_vbytes{DEFAULT_DESCENDANT_SIZE_LIMIT_KVB * 1'000};
|
||||
};
|
||||
} // namespace kernel
|
||||
|
||||
#endif // BITCOIN_KERNEL_MEMPOOL_LIMITS_H
|
@ -4,6 +4,8 @@
|
||||
#ifndef BITCOIN_KERNEL_MEMPOOL_OPTIONS_H
|
||||
#define BITCOIN_KERNEL_MEMPOOL_OPTIONS_H
|
||||
|
||||
#include <kernel/mempool_limits.h>
|
||||
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
|
||||
@ -29,6 +31,7 @@ struct MemPoolOptions {
|
||||
int check_ratio{0};
|
||||
int64_t max_size_bytes{DEFAULT_MAX_MEMPOOL_SIZE_MB * 1'000'000};
|
||||
std::chrono::seconds expiry{std::chrono::hours{DEFAULT_MEMPOOL_EXPIRY_HOURS}};
|
||||
MemPoolLimits limits{};
|
||||
};
|
||||
} // namespace kernel
|
||||
|
||||
|
@ -4,12 +4,27 @@
|
||||
|
||||
#include <mempool_args.h>
|
||||
|
||||
#include <kernel/mempool_limits.h>
|
||||
#include <kernel/mempool_options.h>
|
||||
|
||||
#include <util/system.h>
|
||||
|
||||
using kernel::MemPoolLimits;
|
||||
using kernel::MemPoolOptions;
|
||||
|
||||
namespace {
|
||||
void ApplyArgsManOptions(const ArgsManager& argsman, MemPoolLimits& mempool_limits)
|
||||
{
|
||||
mempool_limits.ancestor_count = argsman.GetIntArg("-limitancestorcount", mempool_limits.ancestor_count);
|
||||
|
||||
if (auto vkb = argsman.GetIntArg("-limitancestorsize")) mempool_limits.ancestor_size_vbytes = *vkb * 1'000;
|
||||
|
||||
mempool_limits.descendant_count = argsman.GetIntArg("-limitdescendantcount", mempool_limits.descendant_count);
|
||||
|
||||
if (auto vkb = argsman.GetIntArg("-limitdescendantsize")) mempool_limits.descendant_size_vbytes = *vkb * 1'000;
|
||||
}
|
||||
}
|
||||
|
||||
void ApplyArgsManOptions(const ArgsManager& argsman, MemPoolOptions& mempool_opts)
|
||||
{
|
||||
mempool_opts.check_ratio = argsman.GetIntArg("-checkmempool", mempool_opts.check_ratio);
|
||||
@ -17,4 +32,6 @@ void ApplyArgsManOptions(const ArgsManager& argsman, MemPoolOptions& mempool_opt
|
||||
if (auto mb = argsman.GetIntArg("-maxmempool")) mempool_opts.max_size_bytes = *mb * 1'000'000;
|
||||
|
||||
if (auto hours = argsman.GetIntArg("-mempoolexpiry")) mempool_opts.expiry = std::chrono::hours{*hours};
|
||||
|
||||
ApplyArgsManOptions(argsman, mempool_opts.limits);
|
||||
}
|
||||
|
@ -10,6 +10,13 @@ namespace kernel {
|
||||
struct MemPoolOptions;
|
||||
};
|
||||
|
||||
/**
|
||||
* Overlay the options set in \p argsman on top of corresponding members in \p mempool_opts.
|
||||
*
|
||||
* @param[in] argsman The ArgsManager in which to check set options.
|
||||
* @param[in,out] mempool_opts The MemPoolOptions to modify according to \p argsman.
|
||||
*/
|
||||
void ApplyArgsManOptions(const ArgsManager& argsman, kernel::MemPoolOptions& mempool_opts);
|
||||
|
||||
|
||||
#endif // BITCOIN_MEMPOOL_ARGS_H
|
||||
|
@ -455,7 +455,8 @@ CTxMemPool::CTxMemPool(const Options& opts)
|
||||
: m_check_ratio{opts.check_ratio},
|
||||
minerPolicyEstimator{opts.estimator},
|
||||
m_max_size_bytes{opts.max_size_bytes},
|
||||
m_expiry{opts.expiry}
|
||||
m_expiry{opts.expiry},
|
||||
m_limits{opts.limits}
|
||||
{
|
||||
_clear(); //lock free clear
|
||||
}
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <kernel/mempool_limits.h>
|
||||
#include <kernel/mempool_options.h>
|
||||
|
||||
#include <coins.h>
|
||||
@ -569,6 +570,10 @@ public:
|
||||
const int64_t m_max_size_bytes;
|
||||
const std::chrono::seconds m_expiry;
|
||||
|
||||
using Limits = kernel::MemPoolLimits;
|
||||
|
||||
const Limits m_limits;
|
||||
|
||||
/** Create a new CTxMemPool.
|
||||
* Sanity checks will be off by default for performance, because otherwise
|
||||
* accepting transactions becomes O(N^2) where N is the number of transactions
|
||||
|
Loading…
x
Reference in New Issue
Block a user