Skip to content

Commit 88d66d8

Browse files
committed
chore: improve slot persister performance, clean up deps
1 parent 99f3122 commit 88d66d8

File tree

9 files changed

+35
-46
lines changed

9 files changed

+35
-46
lines changed

Cargo.lock

-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backfill_rpc/src/block_producer.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::{sync::Arc, time::Duration};
33
use async_trait::async_trait;
44
use entities::{
55
models::{RawBlockWithTransactions, TransactionInfo},
6-
utils::decode_encoded_transaction_with_status_meta,
6+
transaction_converters::decode_encoded_transaction_with_status_meta,
77
};
88
use interface::{error::StorageError, signature_persistence::BlockProducer};
99
use solana_client::rpc_config::RpcBlockConfig;

entities/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ pub mod api_req_params;
22
pub mod enums;
33
pub mod models;
44
pub mod schedule;
5-
pub mod utils;
5+
pub mod transaction_converters;

entities/src/models.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -451,13 +451,14 @@ impl From<RawBlockDeprecated> for RawBlock {
451451
.transactions
452452
.into_iter()
453453
.filter_map(|t| {
454-
crate::utils::decode_encoded_transaction_with_status_meta(t).and_then(
455-
|tx| {
456-
TransactionInfo::from_transaction_with_status_meta_and_slot(
457-
tx, value.slot,
458-
)
459-
},
454+
crate::transaction_converters::decode_encoded_transaction_with_status_meta(
455+
t,
460456
)
457+
.and_then(|tx| {
458+
TransactionInfo::from_transaction_with_status_meta_and_slot(
459+
tx, value.slot,
460+
)
461+
})
461462
})
462463
.collect(),
463464
},

entities/src/utils.rs entities/src/transaction_converters.rs

+20-23
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use solana_sdk::{
88
use solana_transaction_status::{
99
option_serializer::OptionSerializer, EncodedTransactionWithStatusMeta, InnerInstruction,
1010
InnerInstructions, TransactionStatusMeta, TransactionTokenBalance, TransactionWithStatusMeta,
11-
UiInstruction, VersionedTransactionWithStatusMeta,
11+
UiInstruction, UiTransactionTokenBalance, VersionedTransactionWithStatusMeta,
1212
};
1313

1414
pub fn decode_encoded_transaction_with_status_meta(
@@ -51,28 +51,10 @@ pub fn decode_encoded_transaction_with_status_meta(
5151
post_balances: m.post_balances,
5252
inner_instructions,
5353
log_messages: get(m.log_messages),
54-
pre_token_balances: get(m.pre_token_balances).map(|uttb| {
55-
uttb.into_iter()
56-
.map(|uttb| TransactionTokenBalance {
57-
account_index: uttb.account_index,
58-
mint: uttb.mint,
59-
ui_token_amount: uttb.ui_token_amount,
60-
owner: get(uttb.owner).unwrap_or_default(),
61-
program_id: get(uttb.program_id).unwrap_or_default(),
62-
})
63-
.collect()
64-
}),
65-
post_token_balances: get(m.post_token_balances).map(|uttb| {
66-
uttb.into_iter()
67-
.map(|uttb| TransactionTokenBalance {
68-
account_index: uttb.account_index,
69-
mint: uttb.mint,
70-
ui_token_amount: uttb.ui_token_amount,
71-
owner: Option::<String>::from(uttb.owner).unwrap_or_default(),
72-
program_id: Option::<String>::from(uttb.program_id).unwrap_or_default(),
73-
})
74-
.collect()
75-
}),
54+
pre_token_balances: get(m.pre_token_balances)
55+
.map(decode_transaction_token_balances),
56+
post_token_balances: get(m.post_token_balances)
57+
.map(decode_transaction_token_balances),
7658
rewards: m.rewards.into(),
7759
loaded_addresses: get(m.loaded_addresses)
7860
.map(|ula| LoadedAddresses {
@@ -105,3 +87,18 @@ pub fn decode_encoded_transaction_with_status_meta(
10587
None => None,
10688
}
10789
}
90+
91+
fn decode_transaction_token_balances(
92+
ui_transaction_token_balances: Vec<UiTransactionTokenBalance>,
93+
) -> Vec<TransactionTokenBalance> {
94+
ui_transaction_token_balances
95+
.into_iter()
96+
.map(|uttb| TransactionTokenBalance {
97+
account_index: uttb.account_index,
98+
mint: uttb.mint,
99+
ui_token_amount: uttb.ui_token_amount,
100+
owner: Option::<String>::from(uttb.owner).unwrap_or_default(),
101+
program_id: Option::<String>::from(uttb.program_id).unwrap_or_default(),
102+
})
103+
.collect()
104+
}

grpc/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ async-trait = { workspace = true }
1818
thiserror = { workspace = true }
1919
solana-transaction-status = { workspace = true }
2020
tracing = { workspace = true }
21-
rocks-db = { path = "../rocks-db" }
2221

2322
[dev-dependencies]
2423
mockall = { workspace = true }

grpc/src/client.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use interface::{
1111
error::StorageError,
1212
signature_persistence::BlockProducer,
1313
};
14-
use rocks_db::column::TypedColumn;
1514
use tonic::{
1615
transport::{Channel, Uri},
1716
Code, Status,
@@ -104,7 +103,7 @@ impl BlockProducer for Client {
104103
.await
105104
.map_err(|e| StorageError::Common(e.to_string()))
106105
.and_then(|response| {
107-
RawBlock::decode(response.into_inner().block.as_slice())
106+
bincode::deserialize::<RawBlock>(response.into_inner().block.as_slice())
108107
.map_err(|e| StorageError::Common(e.to_string()))
109108
.map(|raw_block| raw_block.block)
110109
})

nft_ingester/src/bin/slot_persister/main.rs

+5-9
Original file line numberDiff line numberDiff line change
@@ -452,23 +452,19 @@ async fn process_slots(
452452
successful_blocks.len()
453453
);
454454

455-
match target_db.raw_blocks.put_batch(successful_blocks.clone()).await {
455+
let projected_last_slot = successful_blocks.keys().max().copied().unwrap_or(0);
456+
let successful_blocks_len = successful_blocks.len();
457+
match target_db.raw_blocks.put_batch(std::mem::take(&mut successful_blocks)).await {
456458
Ok(_) => {
457-
let last_slot = successful_blocks.keys().max().cloned().unwrap_or(0);
458459
info!(
459460
"Successfully saved {} blocks to RocksDB. Last stored slot: {}",
460-
successful_blocks.len(),
461-
last_slot
461+
successful_blocks_len, projected_last_slot
462462
);
463463
break; // Move on to next chunk of `slots`
464464
},
465465
Err(e) => {
466466
// DB write failed
467-
error!(
468-
"Failed to save {} blocks to RocksDB: {}",
469-
successful_blocks.len(),
470-
e
471-
);
467+
error!("Failed to save {} blocks to RocksDB: {}", successful_blocks_len, e);
472468
batch_retries += 1;
473469
if batch_retries >= MAX_BATCH_RETRIES {
474470
panic!(

usecase/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,4 @@ thiserror = { workspace = true }
3333
bubblegum-batch-sdk = { workspace = true }
3434
solana-storage-proto = { workspace = true }
3535
prost = "0.11.9"
36-
prost-derive = "0.11.9"
3736
futures = { workspace = true }

0 commit comments

Comments
 (0)