mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-09 14:41:42 +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/checks.h \
|
||||||
kernel/coinstats.h \
|
kernel/coinstats.h \
|
||||||
kernel/context.h \
|
kernel/context.h \
|
||||||
|
kernel/mempool_limits.h \
|
||||||
kernel/mempool_options.h \
|
kernel/mempool_options.h \
|
||||||
key.h \
|
key.h \
|
||||||
key_io.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
|
#ifndef BITCOIN_KERNEL_MEMPOOL_OPTIONS_H
|
||||||
#define BITCOIN_KERNEL_MEMPOOL_OPTIONS_H
|
#define BITCOIN_KERNEL_MEMPOOL_OPTIONS_H
|
||||||
|
|
||||||
|
#include <kernel/mempool_limits.h>
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
@ -29,6 +31,7 @@ struct MemPoolOptions {
|
|||||||
int check_ratio{0};
|
int check_ratio{0};
|
||||||
int64_t max_size_bytes{DEFAULT_MAX_MEMPOOL_SIZE_MB * 1'000'000};
|
int64_t max_size_bytes{DEFAULT_MAX_MEMPOOL_SIZE_MB * 1'000'000};
|
||||||
std::chrono::seconds expiry{std::chrono::hours{DEFAULT_MEMPOOL_EXPIRY_HOURS}};
|
std::chrono::seconds expiry{std::chrono::hours{DEFAULT_MEMPOOL_EXPIRY_HOURS}};
|
||||||
|
MemPoolLimits limits{};
|
||||||
};
|
};
|
||||||
} // namespace kernel
|
} // namespace kernel
|
||||||
|
|
||||||
|
@ -4,12 +4,27 @@
|
|||||||
|
|
||||||
#include <mempool_args.h>
|
#include <mempool_args.h>
|
||||||
|
|
||||||
|
#include <kernel/mempool_limits.h>
|
||||||
#include <kernel/mempool_options.h>
|
#include <kernel/mempool_options.h>
|
||||||
|
|
||||||
#include <util/system.h>
|
#include <util/system.h>
|
||||||
|
|
||||||
|
using kernel::MemPoolLimits;
|
||||||
using kernel::MemPoolOptions;
|
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)
|
void ApplyArgsManOptions(const ArgsManager& argsman, MemPoolOptions& mempool_opts)
|
||||||
{
|
{
|
||||||
mempool_opts.check_ratio = argsman.GetIntArg("-checkmempool", mempool_opts.check_ratio);
|
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 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};
|
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;
|
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);
|
void ApplyArgsManOptions(const ArgsManager& argsman, kernel::MemPoolOptions& mempool_opts);
|
||||||
|
|
||||||
|
|
||||||
#endif // BITCOIN_MEMPOOL_ARGS_H
|
#endif // BITCOIN_MEMPOOL_ARGS_H
|
||||||
|
@ -455,7 +455,8 @@ CTxMemPool::CTxMemPool(const Options& opts)
|
|||||||
: m_check_ratio{opts.check_ratio},
|
: m_check_ratio{opts.check_ratio},
|
||||||
minerPolicyEstimator{opts.estimator},
|
minerPolicyEstimator{opts.estimator},
|
||||||
m_max_size_bytes{opts.max_size_bytes},
|
m_max_size_bytes{opts.max_size_bytes},
|
||||||
m_expiry{opts.expiry}
|
m_expiry{opts.expiry},
|
||||||
|
m_limits{opts.limits}
|
||||||
{
|
{
|
||||||
_clear(); //lock free clear
|
_clear(); //lock free clear
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include <kernel/mempool_limits.h>
|
||||||
#include <kernel/mempool_options.h>
|
#include <kernel/mempool_options.h>
|
||||||
|
|
||||||
#include <coins.h>
|
#include <coins.h>
|
||||||
@ -569,6 +570,10 @@ public:
|
|||||||
const int64_t m_max_size_bytes;
|
const int64_t m_max_size_bytes;
|
||||||
const std::chrono::seconds m_expiry;
|
const std::chrono::seconds m_expiry;
|
||||||
|
|
||||||
|
using Limits = kernel::MemPoolLimits;
|
||||||
|
|
||||||
|
const Limits m_limits;
|
||||||
|
|
||||||
/** Create a new CTxMemPool.
|
/** Create a new CTxMemPool.
|
||||||
* Sanity checks will be off by default for performance, because otherwise
|
* Sanity checks will be off by default for performance, because otherwise
|
||||||
* accepting transactions becomes O(N^2) where N is the number of transactions
|
* accepting transactions becomes O(N^2) where N is the number of transactions
|
||||||
|
Loading…
x
Reference in New Issue
Block a user