mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-12-07 03:03:58 +01:00
Merge bitcoin/bitcoin#30141: kernel: De-globalize validation caches
606a7ab862kernel: De-globalize signature cache (TheCharlatan)66d74bfc45Expose CSignatureCache class in header (TheCharlatan)021d38822ckernel: De-globalize script execution cache hasher (TheCharlatan)13a3661abakernel: De-globalize script execution cache (TheCharlatan)ab14d1d6a4validation: Don't error if maxsigcachesize exceeds uint32::max (TheCharlatan) Pull request description: The validation caches are currently setup independently from where the rest of the validation code is initialized. This makes their ownership semantics unclear. There is also no clear enforcement on when and in what order they need to be initialized. The caches are always initialized in the `BasicTestingSetup` although a number of tests don't actually need them. Solve this by moving the caches from global scope into the `ChainstateManager` class. This simplifies the usage of the kernel library by no longer requiring manual setup of the caches prior to using the `ChainstateManager`. Tests that need to access the caches can instantiate them independently. --- This pull request is part of the [libbitcoinkernel project](https://github.com/bitcoin/bitcoin/issues/27587). ACKs for top commit: stickies-v: re-ACK606a7ab862glozow: reACK606a7abryanofsky: Code review ACK606a7ab862. Just small formatting, include, and static_assert changes since last review. Tree-SHA512: e7f3ee41406e3b233832bb67dc3a63c4203b5367e5daeed383df9cb590f227fcc62eae31311029c077d5e81b273a37a88a364db3dee2efe91bb3b9c9ddc8a42e
This commit is contained in:
@@ -56,6 +56,16 @@ util::Result<void> ApplyArgsManOptions(const ArgsManager& args, ChainstateManage
|
||||
opts.worker_threads_num = std::clamp(script_threads - 1, 0, MAX_SCRIPTCHECK_THREADS);
|
||||
LogPrintf("Script verification uses %d additional threads\n", opts.worker_threads_num);
|
||||
|
||||
if (auto max_size = args.GetIntArg("-maxsigcachesize")) {
|
||||
// 1. When supplied with a max_size of 0, both the signature cache and
|
||||
// script execution cache create the minimum possible cache (2
|
||||
// elements). Therefore, we can use 0 as a floor here.
|
||||
// 2. Multiply first, divide after to avoid integer truncation.
|
||||
size_t clamped_size_each = std::max<int64_t>(*max_size, 0) * (1 << 20) / 2;
|
||||
opts.script_execution_cache_bytes = clamped_size_each;
|
||||
opts.signature_cache_bytes = clamped_size_each;
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
} // namespace node
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
// 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.
|
||||
|
||||
#include <node/validation_cache_args.h>
|
||||
|
||||
#include <kernel/validation_cache_sizes.h>
|
||||
|
||||
#include <common/args.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
|
||||
using kernel::ValidationCacheSizes;
|
||||
|
||||
namespace node {
|
||||
void ApplyArgsManOptions(const ArgsManager& argsman, ValidationCacheSizes& cache_sizes)
|
||||
{
|
||||
if (auto max_size = argsman.GetIntArg("-maxsigcachesize")) {
|
||||
// 1. When supplied with a max_size of 0, both InitSignatureCache and
|
||||
// InitScriptExecutionCache create the minimum possible cache (2
|
||||
// elements). Therefore, we can use 0 as a floor here.
|
||||
// 2. Multiply first, divide after to avoid integer truncation.
|
||||
size_t clamped_size_each = std::max<int64_t>(*max_size, 0) * (1 << 20) / 2;
|
||||
cache_sizes = {
|
||||
.signature_cache_bytes = clamped_size_each,
|
||||
.script_execution_cache_bytes = clamped_size_each,
|
||||
};
|
||||
}
|
||||
}
|
||||
} // namespace node
|
||||
@@ -1,17 +0,0 @@
|
||||
// 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_NODE_VALIDATION_CACHE_ARGS_H
|
||||
#define BITCOIN_NODE_VALIDATION_CACHE_ARGS_H
|
||||
|
||||
class ArgsManager;
|
||||
namespace kernel {
|
||||
struct ValidationCacheSizes;
|
||||
};
|
||||
|
||||
namespace node {
|
||||
void ApplyArgsManOptions(const ArgsManager& argsman, kernel::ValidationCacheSizes& cache_sizes);
|
||||
} // namespace node
|
||||
|
||||
#endif // BITCOIN_NODE_VALIDATION_CACHE_ARGS_H
|
||||
Reference in New Issue
Block a user