Skip to content

Commit

Permalink
partially revert changes from near#10792
Browse files Browse the repository at this point in the history
  • Loading branch information
telezhnaya committed Apr 5, 2024
1 parent ea7cfa4 commit 73aee47
Showing 1 changed file with 28 additions and 25 deletions.
53 changes: 28 additions & 25 deletions chain/chain/src/chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3081,32 +3081,35 @@ impl Chain {
fn get_execution_status(
&self,
outcomes: &[ExecutionOutcomeWithIdView],
transaction_hash: &CryptoHash,
) -> FinalExecutionStatus {
let mut awaiting_receipt_ids = HashSet::new();
let mut seen_receipt_ids = HashSet::new();
let mut result: FinalExecutionStatus = FinalExecutionStatus::NotStarted;
for outcome in outcomes {
seen_receipt_ids.insert(&outcome.id);
match &outcome.outcome.status {
ExecutionStatusView::Unknown => return FinalExecutionStatus::Started,
ExecutionStatusView::Failure(e) => return FinalExecutionStatus::Failure(e.clone()),
ExecutionStatusView::SuccessValue(v) => {
if result == FinalExecutionStatus::NotStarted {
// historically, we used the first SuccessValue we have seen
// let's continue sticking to it
result = FinalExecutionStatus::SuccessValue(v.clone());
let mut looking_for_id = *transaction_hash;
let num_outcomes = outcomes.len();
outcomes
.iter()
.find_map(|outcome_with_id| {
if outcome_with_id.id == looking_for_id {
match &outcome_with_id.outcome.status {
ExecutionStatusView::Unknown if num_outcomes == 1 => {
Some(FinalExecutionStatus::NotStarted)
}
ExecutionStatusView::Unknown => Some(FinalExecutionStatus::Started),
ExecutionStatusView::Failure(e) => {
Some(FinalExecutionStatus::Failure(e.clone()))
}
ExecutionStatusView::SuccessValue(v) => {
Some(FinalExecutionStatus::SuccessValue(v.clone()))
}
ExecutionStatusView::SuccessReceiptId(id) => {
looking_for_id = *id;
None
}
}
} else {
None
}
ExecutionStatusView::SuccessReceiptId(_) => {
awaiting_receipt_ids.extend(&outcome.outcome.receipt_ids);
}
}
}
return if awaiting_receipt_ids.is_subset(&seen_receipt_ids) {
result
} else {
FinalExecutionStatus::Started
};
})
.expect("results should resolve to a final outcome")
}

/// Collect all the execution outcomes existing at the current moment
Expand Down Expand Up @@ -3138,7 +3141,7 @@ impl Chain {
) -> Result<FinalExecutionOutcomeView, Error> {
let mut outcomes = Vec::new();
self.get_recursive_transaction_results(&mut outcomes, transaction_hash, true)?;
let status = self.get_execution_status(&outcomes);
let status = self.get_execution_status(&outcomes, transaction_hash);
let receipts_outcome = outcomes.split_off(1);
let transaction = self.chain_store.get_transaction(transaction_hash)?.ok_or_else(|| {
Error::DBNotFoundErr(format!("Transaction {} is not found", transaction_hash))
Expand Down Expand Up @@ -3170,7 +3173,7 @@ impl Chain {
)));
}

let status = self.get_execution_status(&outcomes);
let status = self.get_execution_status(&outcomes, transaction_hash);
let receipts_outcome = outcomes.split_off(1);
let transaction_outcome = outcomes.pop().unwrap();
Ok(FinalExecutionOutcomeView { status, transaction, transaction_outcome, receipts_outcome })
Expand Down

0 comments on commit 73aee47

Please sign in to comment.