diff --git a/crates/orchestrator/src/database/mod.rs b/crates/orchestrator/src/database/mod.rs index e9de6a06..fc513e7b 100644 --- a/crates/orchestrator/src/database/mod.rs +++ b/crates/orchestrator/src/database/mod.rs @@ -45,7 +45,7 @@ pub trait Database: Send + Sync { ) -> Result>; // TODO: can be extendible to support multiple status. - async fn get_jobs_by_status(&self, status: JobStatus) -> Result>; + async fn get_jobs_by_status(&self, status: JobStatus, limit_to_one: bool) -> Result>; } pub trait DatabaseConfig { diff --git a/crates/orchestrator/src/database/mongodb/mod.rs b/crates/orchestrator/src/database/mongodb/mod.rs index 33ed260a..9deb172c 100644 --- a/crates/orchestrator/src/database/mongodb/mod.rs +++ b/crates/orchestrator/src/database/mongodb/mod.rs @@ -5,7 +5,7 @@ use async_trait::async_trait; use color_eyre::eyre::eyre; use color_eyre::Result; use mongodb::bson::{Bson, Document}; -use mongodb::options::{FindOneOptions, UpdateOptions}; +use mongodb::options::{FindOneOptions, FindOptions, UpdateOptions}; use mongodb::{ bson, bson::doc, @@ -291,14 +291,18 @@ impl Database for MongoDb { Ok(results) } - async fn get_jobs_by_status(&self, job_status: JobStatus) -> Result> { + async fn get_jobs_by_status(&self, job_status: JobStatus, limit_to_one: bool) -> Result> { let filter = doc! { "job_status": bson::to_bson(&job_status)? }; + let mut find_options = None; + if limit_to_one { + find_options = Some(FindOptions::builder().limit(Some(1)).build()); + } let mut jobs = self .get_job_collection() - .find(filter, None) + .find(filter, find_options) .await .expect("Failed to fetch jobs by given job type and status"); diff --git a/crates/orchestrator/src/workers/mod.rs b/crates/orchestrator/src/workers/mod.rs index 664b5021..55fabcb5 100644 --- a/crates/orchestrator/src/workers/mod.rs +++ b/crates/orchestrator/src/workers/mod.rs @@ -28,7 +28,7 @@ pub trait Worker: Send + Sync { async fn is_worker_enabled(&self) -> Result> { let config = config().await; - let failed_da_jobs = config.database().get_jobs_by_status(JobStatus::VerificationFailed).await?; + let failed_da_jobs = config.database().get_jobs_by_status(JobStatus::VerificationFailed, true).await?; if !failed_da_jobs.is_empty() { return Ok(false); diff --git a/crates/orchestrator/src/workers/snos.rs b/crates/orchestrator/src/workers/snos.rs index ea84efdc..f9791c94 100644 --- a/crates/orchestrator/src/workers/snos.rs +++ b/crates/orchestrator/src/workers/snos.rs @@ -22,7 +22,7 @@ impl Worker for SnosWorker { let latest_block_number = provider.block_number().await?; let latest_block_processed_data = config .database() - .get_latest_job_by_type(JobType::SnosRun) + .get_last_successful_job_by_type(JobType::SnosRun) .await .unwrap() .map(|item| item.internal_id)