From dcdc21add63264cd0b6c49bb8062b37734a4fd87 Mon Sep 17 00:00:00 2001 From: Nacho Date: Fri, 20 Oct 2023 15:31:31 -0300 Subject: [PATCH] fix pending batches 404 --- core/lib/types/src/prover_server_api/mod.rs | 2 +- .../proof_data_handler/request_processor.rs | 19 ++++++++++--------- .../src/api_data_fetcher.rs | 3 ++- .../src/proof_gen_data_fetcher.rs | 6 +++++- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/core/lib/types/src/prover_server_api/mod.rs b/core/lib/types/src/prover_server_api/mod.rs index 84262b182c60..dc226f11d265 100644 --- a/core/lib/types/src/prover_server_api/mod.rs +++ b/core/lib/types/src/prover_server_api/mod.rs @@ -19,7 +19,7 @@ pub struct ProofGenerationDataRequest {} #[derive(Debug, Serialize, Deserialize)] pub enum ProofGenerationDataResponse { - Success(ProofGenerationData), + Success(Option), Error(String), } diff --git a/core/lib/zksync_core/src/proof_data_handler/request_processor.rs b/core/lib/zksync_core/src/proof_data_handler/request_processor.rs index 3fb41f3c2fc3..b750c669f84a 100644 --- a/core/lib/zksync_core/src/proof_data_handler/request_processor.rs +++ b/core/lib/zksync_core/src/proof_data_handler/request_processor.rs @@ -31,7 +31,6 @@ pub(crate) struct RequestProcessor { } pub(crate) enum RequestProcessorError { - NoPendingBatches, ObjectStore(ObjectStoreError), Sqlx(SqlxError), } @@ -39,10 +38,6 @@ pub(crate) enum RequestProcessorError { impl IntoResponse for RequestProcessorError { fn into_response(self) -> Response { let (status_code, message) = match self { - Self::NoPendingBatches => ( - StatusCode::NOT_FOUND, - "No pending batches to process".to_owned(), - ), RequestProcessorError::ObjectStore(err) => { tracing::error!("GCS error: {:?}", err); ( @@ -88,15 +83,19 @@ impl RequestProcessor { ) -> Result, RequestProcessorError> { tracing::info!("Received request for proof generation data: {:?}", request); - let l1_batch_number = self + let l1_batch_number_result = self .pool .access_storage() .await .unwrap() .proof_generation_dal() .get_next_block_to_be_proven(self.config.proof_generation_timeout()) - .await - .ok_or(RequestProcessorError::NoPendingBatches)?; + .await; + + let l1_batch_number = match l1_batch_number_result { + Some(number) => number, + None => return Ok(Json(ProofGenerationDataResponse::Success(None))), // no batches pending to be proven + }; let blob = self .blob_store @@ -125,7 +124,9 @@ impl RequestProcessor { l1_verifier_config, }; - Ok(Json(ProofGenerationDataResponse::Success(proof_gen_data))) + Ok(Json(ProofGenerationDataResponse::Success(Some( + proof_gen_data, + )))) } pub(crate) async fn submit_proof( diff --git a/prover/prover_fri_gateway/src/api_data_fetcher.rs b/prover/prover_fri_gateway/src/api_data_fetcher.rs index 7b3a814837cf..ceab384bb935 100644 --- a/prover/prover_fri_gateway/src/api_data_fetcher.rs +++ b/prover/prover_fri_gateway/src/api_data_fetcher.rs @@ -33,6 +33,7 @@ impl PeriodicApiStruct { Resp: DeserializeOwned, { tracing::info!("Sending request to {}", endpoint); + self.client .post(endpoint) .json(&request) @@ -104,4 +105,4 @@ pub(crate) trait PeriodicApi: Sync + Send { ) -> reqwest::Result; async fn handle_response(&self, job_id: Self::JobId, response: Self::Response); -} +} \ No newline at end of file diff --git a/prover/prover_fri_gateway/src/proof_gen_data_fetcher.rs b/prover/prover_fri_gateway/src/proof_gen_data_fetcher.rs index e2ac2e42dd93..1f00c7f74299 100644 --- a/prover/prover_fri_gateway/src/proof_gen_data_fetcher.rs +++ b/prover/prover_fri_gateway/src/proof_gen_data_fetcher.rs @@ -33,6 +33,7 @@ impl PeriodicApiStruct { impl PeriodicApi for PeriodicApiStruct { type JobId = (); type Response = ProofGenerationDataResponse; + const SERVICE_NAME: &'static str = "ProofGenDataFetcher"; async fn get_next_request(&self) -> Option<(Self::JobId, ProofGenerationDataRequest)> { @@ -49,7 +50,10 @@ impl PeriodicApi for PeriodicApiStruct { async fn handle_response(&self, _: (), response: Self::Response) { match response { - ProofGenerationDataResponse::Success(data) => { + ProofGenerationDataResponse::Success(None) => { + tracing::info!("There are currently no pending batches to be proven"); + } + ProofGenerationDataResponse::Success(Some(data)) => { tracing::info!("Received proof gen data for: {:?}", data.l1_batch_number); self.save_proof_gen_data(data).await; }