Skip to content

Commit 522f009

Browse files
lupin012canepat
andauthored
rpcdaemon: providers into Providers type (#2403)
Co-authored-by: canepat <16927169+canepat@users.noreply.github.com>
1 parent 0dcff8b commit 522f009

20 files changed

+72
-142
lines changed

cmd/dev/grpc_toolbox.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -990,10 +990,7 @@ int execute_temporal_kv_query(const std::string& target, KVQueryFunc<Q> query_fu
990990
db::kv::grpc::client::RemoteClient client{channel_factory,
991991
*grpc_context,
992992
&state_cache,
993-
rpc::ethdb::kv::block_provider(&eth_backend),
994-
rpc::ethdb::kv::block_number_from_txn_hash_provider(&eth_backend),
995-
rpc::ethdb::kv::block_number_from_block_hash_provider(&eth_backend),
996-
rpc::ethdb::kv::block_hash_from_block_number_provider(&eth_backend)};
993+
ethdb::kv::make_backend_providers(&eth_backend)};
997994
auto kv_service = client.service();
998995

999996
// NOLINTNEXTLINE(performance-unnecessary-value-param)

silkworm/db/chain/remote_chain_storage.cpp

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,8 @@
2828

2929
namespace silkworm::db::chain {
3030

31-
RemoteChainStorage::RemoteChainStorage(kv::api::Transaction& tx,
32-
BlockProvider block_provider,
33-
BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider,
34-
BlockNumberFromBlockHashProvider block_number_from_block_hash_provider,
35-
BlockHashFromBlockNumberProvider block_hash_from_number_provider)
36-
: tx_{tx},
37-
block_provider_{std::move(block_provider)},
38-
block_number_from_txn_hash_provider_{std::move(block_number_from_txn_hash_provider)},
39-
block_number_from_block_hash_provider_{std::move(block_number_from_block_hash_provider)},
40-
block_hash_from_number_provider_{std::move(block_hash_from_number_provider)} {}
31+
RemoteChainStorage::RemoteChainStorage(kv::api::Transaction& tx, Providers providers)
32+
: tx_{tx}, providers_{std::move(providers)} {}
4133

4234
Task<ChainConfig> RemoteChainStorage::read_chain_config() const {
4335
const auto genesis_block_hash{co_await read_canonical_block_hash(tx_, kEarliestBlockNumber)};
@@ -67,26 +59,26 @@ Task<std::optional<BlockNum>> RemoteChainStorage::read_block_number(const Hash&
6759
}
6860

6961
Task<bool> RemoteChainStorage::read_block(HashAsSpan hash, BlockNum number, bool read_senders, Block& block) const {
70-
co_return co_await block_provider_(number, hash, read_senders, block);
62+
co_return co_await providers_.block(number, hash, read_senders, block);
7163
}
7264

7365
Task<bool> RemoteChainStorage::read_block(const Hash& hash, BlockNum number, Block& block) const {
74-
co_return co_await block_provider_(number, hash.bytes, /*.read_senders=*/false, block);
66+
co_return co_await providers_.block(number, hash.bytes, /*.read_senders=*/false, block);
7567
}
7668

7769
Task<bool> RemoteChainStorage::read_block(const Hash& hash, Block& block) const {
7870
const BlockNum block_number = co_await read_header_number(tx_, hash);
79-
co_return co_await block_provider_(block_number, hash.bytes, /*.read_senders=*/false, block);
71+
co_return co_await providers_.block(block_number, hash.bytes, /*.read_senders=*/false, block);
8072
}
8173

8274
Task<bool> RemoteChainStorage::read_block(BlockNum number, bool read_senders, Block& block) const {
8375
const auto hash = co_await read_canonical_block_hash(tx_, number);
84-
co_return co_await block_provider_(number, hash.bytes, read_senders, block);
76+
co_return co_await providers_.block(number, hash.bytes, read_senders, block);
8577
}
8678

8779
Task<std::optional<BlockHeader>> RemoteChainStorage::read_header(BlockNum number, HashAsArray hash) const {
8880
Block block;
89-
const bool success = co_await block_provider_(number, hash, /*.read_senders=*/false, block);
81+
const bool success = co_await providers_.block(number, hash, /*.read_senders=*/false, block);
9082
std::optional<BlockHeader> header;
9183
if (success) {
9284
header = std::move(block.header);
@@ -109,7 +101,7 @@ Task<std::vector<BlockHeader>> RemoteChainStorage::read_sibling_headers(BlockNum
109101

110102
Task<bool> RemoteChainStorage::read_body(BlockNum number, HashAsArray hash, bool read_senders, BlockBody& body) const {
111103
Block block;
112-
const bool success = co_await block_provider_(number, hash, read_senders, block);
104+
const bool success = co_await providers_.block(number, hash, read_senders, block);
113105
if (!success) {
114106
co_return false;
115107
}
@@ -140,7 +132,7 @@ Task<std::optional<BlockHeader>> RemoteChainStorage::read_canonical_header(Block
140132
Task<bool> RemoteChainStorage::read_canonical_body(BlockNum number, BlockBody& body) const {
141133
Block block;
142134
const auto hash = co_await read_canonical_block_hash(tx_, number);
143-
const bool success = co_await block_provider_(number, hash.bytes, /*.read_senders=*/false, block);
135+
const bool success = co_await providers_.block(number, hash.bytes, /*.read_senders=*/false, block);
144136
if (!success) {
145137
co_return false;
146138
}
@@ -152,7 +144,7 @@ Task<bool> RemoteChainStorage::read_canonical_body(BlockNum number, BlockBody& b
152144

153145
Task<bool> RemoteChainStorage::read_canonical_block(BlockNum number, Block& block) const {
154146
const auto hash = co_await read_canonical_block_hash(tx_, number);
155-
const bool success = co_await block_provider_(number, hash.bytes, /*.read_senders=*/false, block);
147+
const bool success = co_await providers_.block(number, hash.bytes, /*.read_senders=*/false, block);
156148
if (!success) {
157149
co_return false;
158150
}
@@ -171,7 +163,7 @@ Task<bool> RemoteChainStorage::has_body(BlockNum number, const Hash& hash) const
171163

172164
Task<bool> RemoteChainStorage::read_rlp_transactions(BlockNum number, const evmc::bytes32& hash, std::vector<Bytes>& rlp_txs) const {
173165
Block block;
174-
const bool success = co_await block_provider_(number, hash.bytes, /*.read_senders=*/false, block);
166+
const bool success = co_await providers_.block(number, hash.bytes, /*.read_senders=*/false, block);
175167
if (!success) {
176168
co_return false;
177169
}
@@ -191,7 +183,7 @@ Task<std::optional<intx::uint256>> RemoteChainStorage::read_total_difficulty(con
191183
}
192184

193185
Task<std::optional<BlockNum>> RemoteChainStorage::read_block_number_by_transaction_hash(const evmc::bytes32& transaction_hash) const {
194-
co_return co_await block_number_from_txn_hash_provider_(transaction_hash.bytes);
186+
co_return co_await providers_.block_number_from_txn_hash(transaction_hash.bytes);
195187
}
196188

197189
} // namespace silkworm::db::chain

silkworm/db/chain/remote_chain_storage.hpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,20 @@ namespace silkworm::db::chain {
2929
using BlockProvider = std::function<Task<bool>(BlockNum, HashAsSpan, bool, Block&)>;
3030
using BlockNumberFromTxnHashProvider = std::function<Task<BlockNum>(HashAsSpan)>;
3131
using BlockNumberFromBlockHashProvider = std::function<Task<BlockNum>(HashAsSpan)>;
32-
using BlockHashFromBlockNumberProvider = std::function<Task<evmc::bytes32>(BlockNum)>;
32+
using CanonicalBlockHashFromNumberProvider = std::function<Task<evmc::bytes32>(BlockNum)>;
33+
34+
struct Providers {
35+
BlockProvider block;
36+
BlockNumberFromTxnHashProvider block_number_from_txn_hash;
37+
BlockNumberFromBlockHashProvider block_number_from_hash;
38+
CanonicalBlockHashFromNumberProvider canonical_block_hash_from_number;
39+
};
3340

3441
//! RemoteChainStorage must be used when blockchain data is remote with respect to the running component, i.e. it is
3542
//! in remote database (accessed via gRPC KV I/F) or remote snapshot files (accessed via gRPC ETHBACKEND I/F)
3643
class RemoteChainStorage : public ChainStorage {
3744
public:
38-
RemoteChainStorage(kv::api::Transaction& tx,
39-
BlockProvider block_provider,
40-
BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider,
41-
BlockNumberFromBlockHashProvider block_number_from_block_hash_provider,
42-
BlockHashFromBlockNumberProvider block_hash_from_number_provider);
45+
RemoteChainStorage(kv::api::Transaction& tx, Providers providers);
4346
~RemoteChainStorage() override = default;
4447

4548
[[nodiscard]] Task<ChainConfig> read_chain_config() const override;
@@ -82,10 +85,7 @@ class RemoteChainStorage : public ChainStorage {
8285

8386
private:
8487
kv::api::Transaction& tx_;
85-
BlockProvider block_provider_;
86-
BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider_;
87-
BlockNumberFromBlockHashProvider block_number_from_block_hash_provider_;
88-
BlockHashFromBlockNumberProvider block_hash_from_number_provider_;
88+
Providers providers_;
8989
};
9090

9191
} // namespace silkworm::db::chain

silkworm/db/chain/remote_chain_storage_test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ static Bytes kChainConfig{*from_hex(
4848

4949
struct RemoteChainStorageTest : public silkworm::test_util::ContextTestBase {
5050
test_util::MockTransaction transaction;
51-
RemoteChainStorage storage{transaction, {}, {}, {}, {}};
51+
RemoteChainStorage storage{transaction, Providers{}};
5252
};
5353

5454
TEST_CASE_METHOD(RemoteChainStorageTest, "read_chain_config") {

silkworm/db/kv/grpc/client/remote_client.cpp

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -41,35 +41,23 @@ class RemoteClientImpl final : public api::Service {
4141
RemoteClientImpl(const rpc::ChannelFactory& create_channel,
4242
agrpc::GrpcContext& grpc_context,
4343
api::StateCache* state_cache,
44-
chain::BlockProvider block_provider,
45-
chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider,
46-
chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider,
47-
chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider,
44+
chain::Providers providers,
4845
rpc::DisconnectHook on_disconnect)
4946
: channel_{create_channel()},
5047
stub_{proto::KV::NewStub(channel_)},
5148
grpc_context_{grpc_context},
5249
state_cache_{state_cache},
53-
block_provider_{std::move(block_provider)},
54-
block_number_from_txn_hash_provider_{std::move(block_number_from_txn_hash_provider)},
55-
block_number_from_block_hash_provider_{std::move(block_number_from_block_hash_provider)},
56-
block_hash_from_number_provider_{std::move(block_hash_from_number_provider)},
50+
providers_{std::move(providers)},
5751
on_disconnect_{std::move(on_disconnect)} {}
5852
RemoteClientImpl(std::unique_ptr<Stub> stub,
5953
agrpc::GrpcContext& grpc_context,
6054
api::StateCache* state_cache,
61-
chain::BlockProvider block_provider,
62-
chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider,
63-
chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider,
64-
chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider,
55+
chain::Providers providers,
6556
rpc::DisconnectHook on_disconnect)
6657
: stub_{std::move(stub)},
6758
grpc_context_{grpc_context},
6859
state_cache_{state_cache},
69-
block_provider_{std::move(block_provider)},
70-
block_number_from_txn_hash_provider_{std::move(block_number_from_txn_hash_provider)},
71-
block_number_from_block_hash_provider_{std::move(block_number_from_block_hash_provider)},
72-
block_hash_from_number_provider_{std::move(block_hash_from_number_provider)},
60+
providers_{std::move(providers)},
7361
on_disconnect_{std::move(on_disconnect)} {}
7462

7563
~RemoteClientImpl() override = default;
@@ -87,10 +75,7 @@ class RemoteClientImpl final : public api::Service {
8775
auto tx = std::make_unique<RemoteTransaction>(*stub_,
8876
grpc_context_,
8977
state_cache_,
90-
block_provider_,
91-
block_number_from_txn_hash_provider_,
92-
block_number_from_block_hash_provider_,
93-
block_hash_from_number_provider_);
78+
providers_);
9479
co_await tx->open();
9580
co_return tx;
9681
}
@@ -159,10 +144,7 @@ class RemoteClientImpl final : public api::Service {
159144
std::unique_ptr<Stub> stub_;
160145
agrpc::GrpcContext& grpc_context_;
161146
api::StateCache* state_cache_;
162-
chain::BlockProvider block_provider_;
163-
chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider_;
164-
chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider_;
165-
chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider_;
147+
chain::Providers providers_;
166148
rpc::DisconnectHook on_disconnect_;
167149
std::chrono::milliseconds min_backoff_timeout_{rpc::kDefaultMinBackoffReconnectTimeout};
168150
std::chrono::milliseconds max_backoff_timeout_{rpc::kDefaultMaxBackoffReconnectTimeout};
@@ -171,35 +153,23 @@ class RemoteClientImpl final : public api::Service {
171153
RemoteClient::RemoteClient(const rpc::ChannelFactory& create_channel,
172154
agrpc::GrpcContext& grpc_context,
173155
api::StateCache* state_cache,
174-
chain::BlockProvider block_provider,
175-
chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider,
176-
chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider,
177-
chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider,
156+
chain::Providers providers,
178157
rpc::DisconnectHook on_disconnect)
179158
: p_impl_{std::make_shared<RemoteClientImpl>(create_channel,
180159
grpc_context,
181160
state_cache,
182-
std::move(block_provider),
183-
std::move(block_number_from_txn_hash_provider),
184-
std::move(block_number_from_block_hash_provider),
185-
std::move(block_hash_from_number_provider),
161+
std::move(providers),
186162
std::move(on_disconnect))} {}
187163

188164
RemoteClient::RemoteClient(std::unique_ptr<Stub> stub,
189165
agrpc::GrpcContext& grpc_context,
190166
api::StateCache* state_cache,
191-
chain::BlockProvider block_provider,
192-
chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider,
193-
chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider,
194-
chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider,
167+
chain::Providers providers,
195168
rpc::DisconnectHook on_disconnect)
196169
: p_impl_{std::make_shared<RemoteClientImpl>(std::move(stub),
197170
grpc_context,
198171
state_cache,
199-
std::move(block_provider),
200-
std::move(block_number_from_txn_hash_provider),
201-
std::move(block_number_from_block_hash_provider),
202-
std::move(block_hash_from_number_provider),
172+
std::move(providers),
203173
std::move(on_disconnect))} {}
204174

205175
// Must be here (not in header) because RemoteClientImpl size is necessary for std::unique_ptr in PIMPL idiom

silkworm/db/kv/grpc/client/remote_client.hpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,13 @@ struct RemoteClient : public api::Client {
3838
const rpc::ChannelFactory& create_channel,
3939
agrpc::GrpcContext& grpc_context,
4040
api::StateCache* state_cache,
41-
chain::BlockProvider block_provider,
42-
chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider,
43-
chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider,
44-
chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider,
41+
chain::Providers providers,
4542
std::function<Task<void>()> on_disconnect = []() -> Task<void> { co_return; });
4643
RemoteClient(
4744
std::unique_ptr<::remote::KV::StubInterface> stub,
4845
agrpc::GrpcContext& grpc_context,
4946
api::StateCache* state_cache,
50-
chain::BlockProvider block_provider,
51-
chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider,
52-
chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider,
53-
chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider,
47+
chain::Providers providers,
5448
std::function<Task<void>()> on_disconnect = []() -> Task<void> { co_return; });
5549
~RemoteClient() override;
5650

silkworm/db/kv/grpc/client/remote_client_test.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,18 @@ struct RemoteClientTestRunner : public TestRunner<RemoteClient, StrictMockKVStub
4747
[](HashAsSpan) -> Task<BlockNum> { co_return 0; }};
4848
chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider{
4949
[](HashAsSpan) -> Task<BlockNum> { co_return 0; }};
50-
chain::BlockHashFromBlockNumberProvider block_hash_from_block_number_provider{
50+
chain::CanonicalBlockHashFromNumberProvider canonical_block_hash_from_number_provider{
5151
[](BlockNum) -> Task<evmc::bytes32> { co_return 0; }};
5252

5353
protected:
5454
RemoteClient make_api_client() override {
5555
return RemoteClient{std::move(stub_),
5656
grpc_context_,
5757
state_cache.get(),
58-
block_provider,
59-
block_number_from_txn_hash_provider,
60-
block_number_from_block_hash_provider,
61-
block_hash_from_block_number_provider};
58+
{block_provider,
59+
block_number_from_txn_hash_provider,
60+
block_number_from_block_hash_provider,
61+
canonical_block_hash_from_number_provider}};
6262
}
6363
};
6464

silkworm/db/kv/grpc/client/remote_transaction.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,9 @@ RemoteTransaction::RemoteTransaction(
3333
Stub& stub,
3434
agrpc::GrpcContext& grpc_context,
3535
api::StateCache* state_cache,
36-
chain::BlockProvider block_provider,
37-
chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider,
38-
chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider,
39-
chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider)
36+
chain::Providers providers)
4037
: BaseTransaction(state_cache),
41-
block_provider_{std::move(block_provider)},
42-
block_number_from_txn_hash_provider_{std::move(block_number_from_txn_hash_provider)},
43-
block_number_from_block_hash_provider_{std::move(block_number_from_block_hash_provider)},
44-
block_hash_from_number_provider_{std::move(block_hash_from_number_provider)},
38+
providers_{std::move(providers)},
4539
stub_{stub},
4640
grpc_context_{grpc_context},
4741
tx_rpc_{grpc_context_} {}
@@ -118,7 +112,7 @@ std::shared_ptr<silkworm::State> RemoteTransaction::create_state(boost::asio::an
118112
}
119113

120114
std::shared_ptr<chain::ChainStorage> RemoteTransaction::create_storage() {
121-
return std::make_shared<chain::RemoteChainStorage>(*this, block_provider_, block_number_from_txn_hash_provider_, block_number_from_block_hash_provider_, block_hash_from_number_provider_);
115+
return std::make_shared<chain::RemoteChainStorage>(*this, providers_);
122116
}
123117

124118
Task<api::DomainPointResult> RemoteTransaction::domain_get(api::DomainPointQuery&& query) { // NOLINT(*-rvalue-reference-param-not-moved)

0 commit comments

Comments
 (0)