Retaining transaction logs when transaction plugin is loaded. (#22874)

Transaction logs are not being saved to the database through the plugin interface.

Summary of Changes

Retain the transaction logs when transaction notification plugin is loaded.

Fixes #
lijunwangs/solana-accountsdb-plugin-postgres#6
This commit is contained in:
Lijun Wang
2022-02-11 20:29:07 -08:00
committed by GitHub
parent 817f47d970
commit c04438be4b
5 changed files with 17 additions and 15 deletions

View File

@ -3040,6 +3040,7 @@ mod tests {
true, true,
None, None,
blockstore.clone(), blockstore.clone(),
false,
&Arc::new(AtomicBool::new(false)), &Arc::new(AtomicBool::new(false)),
); );
@ -3052,7 +3053,6 @@ mod tests {
0, 0,
Some(TransactionStatusSender { Some(TransactionStatusSender {
sender: transaction_status_sender, sender: transaction_status_sender,
enable_cpi_and_log_storage: false,
}), }),
&gossip_vote_sender, &gossip_vote_sender,
&QosService::new(Arc::new(RwLock::new(CostModel::default())), 1), &QosService::new(Arc::new(RwLock::new(CostModel::default())), 1),
@ -3199,6 +3199,7 @@ mod tests {
true, true,
None, None,
blockstore.clone(), blockstore.clone(),
false,
&Arc::new(AtomicBool::new(false)), &Arc::new(AtomicBool::new(false)),
); );
@ -3211,7 +3212,6 @@ mod tests {
0, 0,
Some(TransactionStatusSender { Some(TransactionStatusSender {
sender: transaction_status_sender, sender: transaction_status_sender,
enable_cpi_and_log_storage: false,
}), }),
&gossip_vote_sender, &gossip_vote_sender,
&QosService::new(Arc::new(RwLock::new(CostModel::default())), 1), &QosService::new(Arc::new(RwLock::new(CostModel::default())), 1),

View File

@ -1505,7 +1505,6 @@ fn initialize_rpc_transaction_history_services(
let (transaction_status_sender, transaction_status_receiver) = unbounded(); let (transaction_status_sender, transaction_status_receiver) = unbounded();
let transaction_status_sender = Some(TransactionStatusSender { let transaction_status_sender = Some(TransactionStatusSender {
sender: transaction_status_sender, sender: transaction_status_sender,
enable_cpi_and_log_storage,
}); });
let transaction_status_service = Some(TransactionStatusService::new( let transaction_status_service = Some(TransactionStatusService::new(
transaction_status_receiver, transaction_status_receiver,
@ -1513,6 +1512,7 @@ fn initialize_rpc_transaction_history_services(
enable_rpc_transaction_history, enable_rpc_transaction_history,
transaction_notifier.clone(), transaction_notifier.clone(),
blockstore.clone(), blockstore.clone(),
enable_cpi_and_log_storage,
exit, exit,
)); ));

View File

@ -1488,7 +1488,6 @@ pub struct TransactionStatusBatch {
#[derive(Clone)] #[derive(Clone)]
pub struct TransactionStatusSender { pub struct TransactionStatusSender {
pub sender: Sender<TransactionStatusMessage>, pub sender: Sender<TransactionStatusMessage>,
pub enable_cpi_and_log_storage: bool,
} }
impl TransactionStatusSender { impl TransactionStatusSender {
@ -1496,20 +1495,13 @@ impl TransactionStatusSender {
&self, &self,
bank: Arc<Bank>, bank: Arc<Bank>,
transactions: Vec<SanitizedTransaction>, transactions: Vec<SanitizedTransaction>,
mut execution_results: Vec<TransactionExecutionResult>, execution_results: Vec<TransactionExecutionResult>,
balances: TransactionBalancesSet, balances: TransactionBalancesSet,
token_balances: TransactionTokenBalancesSet, token_balances: TransactionTokenBalancesSet,
rent_debits: Vec<RentDebits>, rent_debits: Vec<RentDebits>,
) { ) {
let slot = bank.slot(); let slot = bank.slot();
if !self.enable_cpi_and_log_storage {
execution_results.iter_mut().for_each(|execution_result| {
if let TransactionExecutionResult::Executed(details) = execution_result {
details.log_messages.take();
details.inner_instructions.take();
}
});
}
if let Err(e) = self if let Err(e) = self
.sender .sender
.send(TransactionStatusMessage::Batch(TransactionStatusBatch { .send(TransactionStatusMessage::Batch(TransactionStatusBatch {

View File

@ -4330,6 +4330,7 @@ pub fn create_test_transactions_and_populate_blockstore(
true, true,
None, None,
blockstore, blockstore,
false,
&Arc::new(AtomicBool::new(false)), &Arc::new(AtomicBool::new(false)),
); );
@ -4343,7 +4344,6 @@ pub fn create_test_transactions_and_populate_blockstore(
Some( Some(
&solana_ledger::blockstore_processor::TransactionStatusSender { &solana_ledger::blockstore_processor::TransactionStatusSender {
sender: transaction_status_sender, sender: transaction_status_sender,
enable_cpi_and_log_storage: false,
}, },
), ),
Some(&replay_vote_sender), Some(&replay_vote_sender),

View File

@ -34,6 +34,7 @@ impl TransactionStatusService {
enable_rpc_transaction_history: bool, enable_rpc_transaction_history: bool,
transaction_notifier: Option<TransactionNotifierLock>, transaction_notifier: Option<TransactionNotifierLock>,
blockstore: Arc<Blockstore>, blockstore: Arc<Blockstore>,
enable_cpi_and_log_storage: bool,
exit: &Arc<AtomicBool>, exit: &Arc<AtomicBool>,
) -> Self { ) -> Self {
let exit = exit.clone(); let exit = exit.clone();
@ -50,6 +51,7 @@ impl TransactionStatusService {
enable_rpc_transaction_history, enable_rpc_transaction_history,
transaction_notifier.clone(), transaction_notifier.clone(),
&blockstore, &blockstore,
enable_cpi_and_log_storage,
) { ) {
break; break;
} }
@ -64,6 +66,7 @@ impl TransactionStatusService {
enable_rpc_transaction_history: bool, enable_rpc_transaction_history: bool,
transaction_notifier: Option<TransactionNotifierLock>, transaction_notifier: Option<TransactionNotifierLock>,
blockstore: &Arc<Blockstore>, blockstore: &Arc<Blockstore>,
enable_cpi_and_log_storage: bool,
) -> Result<(), RecvTimeoutError> { ) -> Result<(), RecvTimeoutError> {
match write_transaction_status_receiver.recv_timeout(Duration::from_secs(1))? { match write_transaction_status_receiver.recv_timeout(Duration::from_secs(1))? {
TransactionStatusMessage::Batch(TransactionStatusBatch { TransactionStatusMessage::Batch(TransactionStatusBatch {
@ -142,7 +145,7 @@ impl TransactionStatusService {
.collect(), .collect(),
); );
let loaded_addresses = transaction.get_loaded_addresses(); let loaded_addresses = transaction.get_loaded_addresses();
let transaction_status_meta = TransactionStatusMeta { let mut transaction_status_meta = TransactionStatusMeta {
status, status,
fee, fee,
pre_balances, pre_balances,
@ -163,6 +166,12 @@ impl TransactionStatusService {
&transaction, &transaction,
); );
} }
if !(enable_cpi_and_log_storage || transaction_notifier.is_some()) {
transaction_status_meta.log_messages.take();
transaction_status_meta.inner_instructions.take();
}
if enable_rpc_transaction_history { if enable_rpc_transaction_history {
if let Some(memos) = extract_and_fmt_memos(transaction.message()) { if let Some(memos) = extract_and_fmt_memos(transaction.message()) {
blockstore blockstore
@ -385,6 +394,7 @@ pub(crate) mod tests {
false, false,
Some(test_notifier.clone()), Some(test_notifier.clone()),
blockstore, blockstore,
false,
&exit, &exit,
); );