Skip to content

Commit 0ea3d72

Browse files
authored
Fix crashing on not enough free tasks and add better logging of simul… (#32)
* Fix crashing when not enough free tasks * Fix crashing on not enough free tasks and add better logging of simulated failures
1 parent a899425 commit 0ea3d72

File tree

6 files changed

+20
-4
lines changed

6 files changed

+20
-4
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

solana-transaction-utils/src/pack.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ impl PackedTransaction {
7878
.map(|a| a.pubkey)
7979
.collect_vec()
8080
})
81+
.collect::<std::collections::HashSet<_>>()
82+
.into_iter()
8183
.collect_vec();
8284
if signers.is_empty() {
8385
signers.push(Pubkey::default());

solana-transaction-utils/src/priority_fee.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use solana_sdk::{
88
signature::NullSigner,
99
transaction::VersionedTransaction,
1010
};
11+
use tracing::info;
1112

1213
use crate::error::Error;
1314

@@ -145,6 +146,7 @@ pub async fn compute_budget_for_instructions<C: AsRef<RpcClient>>(
145146
// Simulate the transaction to get the actual compute used
146147
let simulation_result = client.as_ref().simulate_transaction(&snub_tx).await?;
147148
if let Some(err) = simulation_result.value.err {
149+
info!(?simulation_result.value.logs, "simulation error");
148150
return Err(Error::SimulatedTransactionError(err));
149151
}
150152
let actual_compute_used = simulation_result.value.units_consumed.unwrap_or(200000);

solana-transaction-utils/src/queue.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use tokio::{
1515
sync::mpsc::{channel, Receiver, Sender},
1616
time::{interval, Interval},
1717
};
18+
use tracing::info;
1819

1920
use crate::{
2021
error::Error,
@@ -110,6 +111,10 @@ pub async fn create_transaction_queue<T: Send + Clone + 'static + Sync>(
110111
)
111112
.await?;
112113

114+
if let Some(err) = sim_result.value.err.clone() {
115+
info!(?err, ?sim_result.value.logs, "simulation error");
116+
}
117+
113118
// Scale up by 1.2 just to be sure it'll succeed.
114119
let compute_units =
115120
(sim_result.value.units_consumed.unwrap_or(1000000) as f64 * 1.2) as u32;

tuktuk-crank-turner/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "tuktuk-crank-turner"
3-
version = "0.2.15"
3+
version = "0.2.16"
44
authors.workspace = true
55
edition.workspace = true
66
license.workspace = true

tuktuk-crank-turner/src/task_processor.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,10 @@ impl TimedTask {
8181
Ok(result)
8282
}
8383

84-
pub async fn get_available_task_ids(&self, ctx: Arc<TaskContext>) -> anyhow::Result<Vec<u16>> {
84+
pub async fn get_available_task_ids(
85+
&self,
86+
ctx: Arc<TaskContext>,
87+
) -> Result<Vec<u16>, tuktuk_sdk::error::Error> {
8588
let task_queue = self.get_task_queue(ctx.clone()).await?;
8689
let mut in_progress = ctx.in_progress_tasks.lock().await;
8790
let mut task_ids = in_progress
@@ -163,7 +166,11 @@ impl TimedTask {
163166
return self.handle_ix_err(ctx.clone(), err).await;
164167
}
165168
let lookup_tables = maybe_lookup_tables.unwrap();
166-
let next_available = self.get_available_task_ids(ctx.clone()).await?;
169+
let maybe_next_available = self.get_available_task_ids(ctx.clone()).await;
170+
if let Err(err) = maybe_next_available {
171+
return self.handle_ix_err(ctx.clone(), err).await;
172+
}
173+
let next_available = maybe_next_available.unwrap();
167174
self.in_flight_task_ids = next_available.clone();
168175

169176
let maybe_run_ix = if let Some(cached_result) = self.cached_result.clone() {

0 commit comments

Comments
 (0)