bank: TransactionLogCollector
- only push address mappings after pushing a log message
This commit is contained in:
committed by
mergify[bot]
parent
e558ad4c71
commit
41cc7af7cd
@ -3978,10 +3978,7 @@ impl Bank {
|
|||||||
if Self::can_commit(r) // Skip log collection for unprocessed transactions
|
if Self::can_commit(r) // Skip log collection for unprocessed transactions
|
||||||
&& transaction_log_collector_config.filter != TransactionLogCollectorFilter::None
|
&& transaction_log_collector_config.filter != TransactionLogCollectorFilter::None
|
||||||
{
|
{
|
||||||
let mut transaction_log_collector = self.transaction_log_collector.write().unwrap();
|
let mut filtered_mentioned_addresses = Vec::new();
|
||||||
let transaction_log_index = transaction_log_collector.logs.len();
|
|
||||||
|
|
||||||
let mut mentioned_address = false;
|
|
||||||
if !transaction_log_collector_config
|
if !transaction_log_collector_config
|
||||||
.mentioned_addresses
|
.mentioned_addresses
|
||||||
.is_empty()
|
.is_empty()
|
||||||
@ -3991,32 +3988,42 @@ impl Bank {
|
|||||||
.mentioned_addresses
|
.mentioned_addresses
|
||||||
.contains(key)
|
.contains(key)
|
||||||
{
|
{
|
||||||
transaction_log_collector
|
filtered_mentioned_addresses.push(*key);
|
||||||
.mentioned_address_map
|
|
||||||
.entry(*key)
|
|
||||||
.or_default()
|
|
||||||
.push(transaction_log_index);
|
|
||||||
mentioned_address = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let is_vote = is_simple_vote_transaction(tx);
|
let is_vote = is_simple_vote_transaction(tx);
|
||||||
let store = match transaction_log_collector_config.filter {
|
let store = match transaction_log_collector_config.filter {
|
||||||
TransactionLogCollectorFilter::All => !is_vote || mentioned_address,
|
TransactionLogCollectorFilter::All => {
|
||||||
|
!is_vote || !filtered_mentioned_addresses.is_empty()
|
||||||
|
}
|
||||||
TransactionLogCollectorFilter::AllWithVotes => true,
|
TransactionLogCollectorFilter::AllWithVotes => true,
|
||||||
TransactionLogCollectorFilter::None => false,
|
TransactionLogCollectorFilter::None => false,
|
||||||
TransactionLogCollectorFilter::OnlyMentionedAddresses => mentioned_address,
|
TransactionLogCollectorFilter::OnlyMentionedAddresses => {
|
||||||
|
!filtered_mentioned_addresses.is_empty()
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if store {
|
if store {
|
||||||
if let Some(log_messages) = transaction_log_messages.get(i).cloned().flatten() {
|
if let Some(log_messages) = transaction_log_messages.get(i).cloned().flatten() {
|
||||||
|
let mut transaction_log_collector =
|
||||||
|
self.transaction_log_collector.write().unwrap();
|
||||||
|
let transaction_log_index = transaction_log_collector.logs.len();
|
||||||
|
|
||||||
transaction_log_collector.logs.push(TransactionLogInfo {
|
transaction_log_collector.logs.push(TransactionLogInfo {
|
||||||
signature: *tx.signature(),
|
signature: *tx.signature(),
|
||||||
result: r.clone(),
|
result: r.clone(),
|
||||||
is_vote,
|
is_vote,
|
||||||
log_messages,
|
log_messages,
|
||||||
});
|
});
|
||||||
|
for key in filtered_mentioned_addresses.into_iter() {
|
||||||
|
transaction_log_collector
|
||||||
|
.mentioned_address_map
|
||||||
|
.entry(key)
|
||||||
|
.or_default()
|
||||||
|
.push(transaction_log_index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user