Skip to content

Commit 6582c28

Browse files
authored
fix: improve handle task logic (#74)
1 parent 3e673ac commit 6582c28

3 files changed

Lines changed: 45 additions & 7 deletions

File tree

src/coordinator_handler/types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ pub struct GetTaskRequest {
114114
pub prover_height: Option<u64>,
115115
}
116116

117-
#[derive(Serialize, Deserialize, Clone)]
117+
#[derive(Serialize, Deserialize, Clone, Default)]
118118
pub struct GetTaskResponseData {
119119
pub uuid: String,
120120
pub task_id: String,

src/prover/builder.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,12 @@ where
6464
.map(|i| {
6565
let keys_dir = PathBuf::from(&self.cfg.keys_dir);
6666
if !keys_dir.exists() {
67-
std::fs::create_dir_all(&keys_dir)
68-
.map_err(|e| anyhow::anyhow!("failed to create keys directory {}: {e}", keys_dir.display()))?;
67+
std::fs::create_dir_all(&keys_dir).map_err(|e| {
68+
anyhow::anyhow!(
69+
"failed to create keys directory {}: {e}",
70+
keys_dir.display()
71+
)
72+
})?;
6973
}
7074
let key_path = keys_dir.join(i.to_string());
7175
KeySigner::new(&key_path)

src/prover/mod.rs

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use ethers_providers::Middleware;
1515
use proving_service::{ProveRequest, QueryTaskRequest, TaskStatus};
1616
use std::net::SocketAddr;
1717
use std::str::FromStr;
18+
use std::thread;
1819
use tokio::time::{sleep, Duration};
1920
use tokio::{sync::RwLock, task::JoinSet};
2021
use tracing::{error, info, instrument};
@@ -60,6 +61,7 @@ where
6061
provers.spawn(async move {
6162
self_clone.working_loop(i).await;
6263
});
64+
thread::sleep(Duration::from_secs(3)); // Sleep for 3 seconds to avoid overwhelming the l2geth/coordinator with requests.
6365
}
6466

6567
tokio::select! {
@@ -99,7 +101,9 @@ where
99101
let task_id = coordinator_task.clone().task_id;
100102
log::debug!("got previous task from db, task_id: {task_id}");
101103
if self.proving_service.read().await.is_local() {
102-
let proving_task = self.request_proving(&coordinator_task).await?;
104+
let proving_task = self
105+
.request_proving(coordinator_client, &coordinator_task)
106+
.await?;
103107
proving_task_id = proving_task.task_id
104108
}
105109
return self
@@ -108,7 +112,9 @@ where
108112
}
109113

110114
let coordinator_task = self.get_coordinator_task(coordinator_client).await?;
111-
let proving_task = self.request_proving(&coordinator_task).await?;
115+
let proving_task = self
116+
.request_proving(coordinator_client, &coordinator_task)
117+
.await?;
112118
self.handle_proving_progress(coordinator_client, &coordinator_task, proving_task.task_id)
113119
.await
114120
}
@@ -135,17 +141,45 @@ where
135141

136142
async fn request_proving(
137143
&self,
144+
coordinator_client: &CoordinatorClient,
138145
coordinator_task: &GetTaskResponseData,
139146
) -> anyhow::Result<proving_service::ProveResponse> {
140-
let proving_input = self.build_proving_input(coordinator_task).await?;
147+
let proving_input = match self.build_proving_input(coordinator_task).await {
148+
Ok(result) => result,
149+
Err(error) => {
150+
self.submit_proof(
151+
coordinator_client,
152+
coordinator_task,
153+
proving_service::QueryTaskResponse::default(),
154+
ProofStatus::Error,
155+
Some(format!("failed to build proving input: error {:?}", error)),
156+
)
157+
.await?;
158+
anyhow::bail!(
159+
"Failed to build proving input. task_type: {:?}, coordinator_task_uuid: {:?}, coordinator_task_id: {:?}, err: {:?}",
160+
coordinator_task.task_type,
161+
coordinator_task.uuid,
162+
coordinator_task.task_id,
163+
error,
164+
);
165+
}
166+
};
167+
141168
let proving_task = self
142169
.proving_service
143170
.write()
144171
.await
145172
.prove(proving_input)
146173
.await;
147-
148174
if let Some(error) = proving_task.error {
175+
self.submit_proof(
176+
coordinator_client,
177+
coordinator_task,
178+
proving_service::QueryTaskResponse::default(),
179+
ProofStatus::Error,
180+
Some(format!("failed to request proving: error {:?}", error)),
181+
)
182+
.await?;
149183
anyhow::bail!(
150184
"Failed to request proving_service to prove. task_type: {:?}, coordinator_task_uuid: {:?}, coordinator_task_id: {:?}, err: {:?}",
151185
coordinator_task.task_type,

0 commit comments

Comments
 (0)