diff --git a/Cargo.lock b/Cargo.lock index 1db907aa0420..7f4f5d652d97 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7836,7 +7836,7 @@ dependencies = [ [[package]] name = "zk_evm" version = "1.5.0" -source = "git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.5.0#9bbf7ffd2c38ee8b9667e96eaf0c111037fe976f" +source = "git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.5.0#0c5cdca00cca4fa0a8c49147a11048c24f8a4b12" dependencies = [ "anyhow", "lazy_static", diff --git a/core/lib/basic_types/src/basic_fri_types.rs b/core/lib/basic_types/src/basic_fri_types.rs index ce9e8f330da6..33d4fafa5905 100644 --- a/core/lib/basic_types/src/basic_fri_types.rs +++ b/core/lib/basic_types/src/basic_fri_types.rs @@ -184,6 +184,13 @@ impl TryFrom for AggregationRound { } } +#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq, Hash)] +pub struct JobIdentifiers { + pub circuit_id: u8, + pub aggregation_round: u8, + pub protocol_version: u16, +} + #[cfg(test)] mod tests { use super::*; diff --git a/core/lib/basic_types/src/prover_dal.rs b/core/lib/basic_types/src/prover_dal.rs index 690a5b7d7166..2d3d6f085e06 100644 --- a/core/lib/basic_types/src/prover_dal.rs +++ b/core/lib/basic_types/src/prover_dal.rs @@ -26,15 +26,21 @@ pub struct FriProverJobMetadata { } #[derive(Debug, Clone, Copy, Default)] -pub struct JobCountStatistics { +pub struct ExtendedJobCountStatistics { pub queued: usize, pub in_progress: usize, pub failed: usize, pub successful: usize, } -impl Add for JobCountStatistics { - type Output = JobCountStatistics; +#[derive(Debug, Clone, Copy, Default)] +pub struct JobCountStatistics { + pub queued: usize, + pub in_progress: usize, +} + +impl Add for ExtendedJobCountStatistics { + type Output = ExtendedJobCountStatistics; fn add(self, rhs: Self) -> Self::Output { Self { diff --git a/core/node/house_keeper/src/prover/queue_reporter/fri_proof_compressor_queue_reporter.rs b/core/node/house_keeper/src/prover/queue_reporter/fri_proof_compressor_queue_reporter.rs index 06f7a357e893..ce7d7467bcc9 100644 --- a/core/node/house_keeper/src/prover/queue_reporter/fri_proof_compressor_queue_reporter.rs +++ b/core/node/house_keeper/src/prover/queue_reporter/fri_proof_compressor_queue_reporter.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use async_trait::async_trait; use prover_dal::{Prover, ProverDal}; use zksync_dal::ConnectionPool; @@ -24,7 +26,9 @@ impl FriProofCompressorQueueReporter { } } - async fn get_job_statistics(pool: &ConnectionPool) -> JobCountStatistics { + async fn get_job_statistics( + pool: &ConnectionPool, + ) -> HashMap { pool.connection() .await .unwrap() @@ -41,25 +45,24 @@ impl PeriodicJob for FriProofCompressorQueueReporter { async fn run_routine_task(&mut self) -> anyhow::Result<()> { let stats = Self::get_job_statistics(&self.pool).await; - if stats.queued > 0 { - tracing::info!( - "Found {} free {} in progress proof compressor jobs", - stats.queued, - stats.in_progress - ); - } + for (protocol_version, stats) in &stats { + if stats.queued > 0 { + tracing::info!( + "Found {} free {} in progress proof compressor jobs for protocol version {}", + stats.queued, + stats.in_progress, + protocol_version + ); + } - PROVER_FRI_METRICS.proof_compressor_jobs[&( - JobStatus::Queued, - ProtocolVersionId::current_prover_version().to_string(), - )] - .set(stats.queued as u64); + PROVER_FRI_METRICS.proof_compressor_jobs + [&(JobStatus::Queued, protocol_version.to_string())] + .set(stats.queued as u64); - PROVER_FRI_METRICS.proof_compressor_jobs[&( - JobStatus::InProgress, - ProtocolVersionId::current_prover_version().to_string(), - )] - .set(stats.in_progress as u64); + PROVER_FRI_METRICS.proof_compressor_jobs + [&(JobStatus::InProgress, protocol_version.to_string())] + .set(stats.in_progress as u64); + } let oldest_not_compressed_batch = self .pool diff --git a/core/node/house_keeper/src/prover/queue_reporter/fri_prover_queue_reporter.rs b/core/node/house_keeper/src/prover/queue_reporter/fri_prover_queue_reporter.rs index 1b4ea5de6781..b3b04a519b29 100644 --- a/core/node/house_keeper/src/prover/queue_reporter/fri_prover_queue_reporter.rs +++ b/core/node/house_keeper/src/prover/queue_reporter/fri_prover_queue_reporter.rs @@ -40,7 +40,7 @@ impl PeriodicJob for FriProverQueueReporter { let mut conn = self.prover_connection_pool.connection().await.unwrap(); let stats = conn.fri_prover_jobs_dal().get_prover_jobs_stats().await; - for ((circuit_id, aggregation_round), stats) in stats.into_iter() { + for (job_identifiers, stats) in &stats { // BEWARE, HERE BE DRAGONS. // In database, the `circuit_id` stored is the circuit for which the aggregation is done, // not the circuit which is running. @@ -48,32 +48,35 @@ impl PeriodicJob for FriProverQueueReporter { // This can aggregate multiple leaf nodes (which may belong to different circuits). // This reporting is a hacky forced way to use `circuit_id` 2 which will solve auto scalers. // A proper fix will be later provided to solve this at database level. - let circuit_id = if aggregation_round == 2 { + let circuit_id = if job_identifiers.aggregation_round == 2 { 2 } else { - circuit_id + job_identifiers.circuit_id }; let group_id = self .config - .get_group_id_for_circuit_id_and_aggregation_round(circuit_id, aggregation_round) + .get_group_id_for_circuit_id_and_aggregation_round( + circuit_id, + job_identifiers.aggregation_round, + ) .unwrap_or(u8::MAX); FRI_PROVER_METRICS.report_prover_jobs( "queued", circuit_id, - aggregation_round, + job_identifiers.aggregation_round, group_id, - ProtocolVersionId::current_prover_version(), + ProtocolVersionId::try_from(job_identifiers.protocol_version).unwrap(), stats.queued as u64, ); FRI_PROVER_METRICS.report_prover_jobs( "in_progress", circuit_id, - aggregation_round, + job_identifiers.aggregation_round, group_id, - ProtocolVersionId::current_prover_version(), + ProtocolVersionId::try_from(job_identifiers.protocol_version).unwrap(), stats.in_progress as u64, ); } diff --git a/core/node/house_keeper/src/prover/queue_reporter/fri_witness_generator_queue_reporter.rs b/core/node/house_keeper/src/prover/queue_reporter/fri_witness_generator_queue_reporter.rs index 5f251a7136eb..886edca93501 100644 --- a/core/node/house_keeper/src/prover/queue_reporter/fri_witness_generator_queue_reporter.rs +++ b/core/node/house_keeper/src/prover/queue_reporter/fri_witness_generator_queue_reporter.rs @@ -25,63 +25,65 @@ impl FriWitnessGeneratorQueueReporter { } } - async fn get_job_statistics(&self) -> HashMap { + async fn get_job_statistics( + &self, + ) -> HashMap<(AggregationRound, ProtocolVersionId), JobCountStatistics> { let mut conn = self.pool.connection().await.unwrap(); - HashMap::from([ - ( - AggregationRound::BasicCircuits, - conn.fri_witness_generator_dal() - .get_witness_jobs_stats(AggregationRound::BasicCircuits) - .await, - ), - ( - AggregationRound::LeafAggregation, - conn.fri_witness_generator_dal() - .get_witness_jobs_stats(AggregationRound::LeafAggregation) - .await, - ), - ( - AggregationRound::NodeAggregation, - conn.fri_witness_generator_dal() - .get_witness_jobs_stats(AggregationRound::NodeAggregation) - .await, - ), - ( - AggregationRound::RecursionTip, - conn.fri_witness_generator_dal() - .get_witness_jobs_stats(AggregationRound::RecursionTip) - .await, - ), - ( - AggregationRound::Scheduler, - conn.fri_witness_generator_dal() - .get_witness_jobs_stats(AggregationRound::Scheduler) - .await, - ), - ]) + let mut result = HashMap::new(); + result.extend( + conn.fri_witness_generator_dal() + .get_witness_jobs_stats(AggregationRound::BasicCircuits) + .await, + ); + result.extend( + conn.fri_witness_generator_dal() + .get_witness_jobs_stats(AggregationRound::LeafAggregation) + .await, + ); + result.extend( + conn.fri_witness_generator_dal() + .get_witness_jobs_stats(AggregationRound::NodeAggregation) + .await, + ); + result.extend( + conn.fri_witness_generator_dal() + .get_witness_jobs_stats(AggregationRound::RecursionTip) + .await, + ); + result.extend( + conn.fri_witness_generator_dal() + .get_witness_jobs_stats(AggregationRound::Scheduler) + .await, + ); + result } } -fn emit_metrics_for_round(round: AggregationRound, stats: JobCountStatistics) { +fn emit_metrics_for_round( + round: AggregationRound, + protocol_version: ProtocolVersionId, + stats: &JobCountStatistics, +) { if stats.queued > 0 || stats.in_progress > 0 { tracing::trace!( - "Found {} free and {} in progress {:?} FRI witness generators jobs", + "Found {} free and {} in progress {:?} FRI witness generators jobs for protocol version {}", stats.queued, stats.in_progress, - round + round, + protocol_version ); } SERVER_METRICS.witness_generator_jobs_by_round[&( "queued", format!("{:?}", round), - ProtocolVersionId::current_prover_version().to_string(), + protocol_version.to_string(), )] .set(stats.queued as u64); SERVER_METRICS.witness_generator_jobs_by_round[&( "in_progress", format!("{:?}", round), - ProtocolVersionId::current_prover_version().to_string(), + protocol_version.to_string(), )] .set(stats.in_progress as u64); } @@ -92,31 +94,31 @@ impl PeriodicJob for FriWitnessGeneratorQueueReporter { async fn run_routine_task(&mut self) -> anyhow::Result<()> { let stats_for_all_rounds = self.get_job_statistics().await; - let mut aggregated = JobCountStatistics::default(); - for (round, stats) in stats_for_all_rounds { - emit_metrics_for_round(round, stats); - aggregated = aggregated + stats; - } + let mut aggregated = HashMap::::new(); + for ((round, protocol_version), stats) in stats_for_all_rounds { + emit_metrics_for_round(round, protocol_version, &stats); - if aggregated.queued > 0 { - tracing::trace!( - "Found {} free {} in progress witness generators jobs", - aggregated.queued, - aggregated.in_progress - ); + let entry = aggregated.entry(protocol_version).or_default(); + entry.queued += stats.queued; + entry.in_progress += stats.in_progress; } - SERVER_METRICS.witness_generator_jobs[&( - "queued", - ProtocolVersionId::current_prover_version().to_string(), - )] - .set(aggregated.queued as u64); + for (protocol_version, stats) in &aggregated { + if stats.queued > 0 || stats.in_progress > 0 { + tracing::trace!( + "Found {} free {} in progress witness generators jobs for protocol version {}", + stats.queued, + stats.in_progress, + protocol_version + ); + } - SERVER_METRICS.witness_generator_jobs[&( - "in_progress", - ProtocolVersionId::current_prover_version().to_string(), - )] - .set(aggregated.in_progress as u64); + SERVER_METRICS.witness_generator_jobs[&("queued", protocol_version.to_string())] + .set(stats.queued as u64); + + SERVER_METRICS.witness_generator_jobs[&("in_progress", protocol_version.to_string())] + .set(stats.in_progress as u64); + } Ok(()) } diff --git a/core/node/metadata_calculator/src/helpers.rs b/core/node/metadata_calculator/src/helpers.rs index 25ceb6286ab4..896f77e8775f 100644 --- a/core/node/metadata_calculator/src/helpers.rs +++ b/core/node/metadata_calculator/src/helpers.rs @@ -642,10 +642,10 @@ impl L1BatchWithLogs { }); let reads = protective_reads.into_iter().map(TreeInstruction::Read); - // `writes` and `reads` are already sorted, we only need to merge them. writes - .merge_by(reads, |a, b| a.key() <= b.key()) - .collect::>() + .chain(reads) + .sorted_by_key(|tree_instruction| tree_instruction.key()) + .collect() } else { // Otherwise, load writes' data from other tables. Self::extract_storage_logs_from_db(storage, l1_batch_number, protective_reads).await? diff --git a/infrastructure/zk/src/format_sql.ts b/infrastructure/zk/src/format_sql.ts index 1e2bd2261c54..ba1bf263e4cc 100644 --- a/infrastructure/zk/src/format_sql.ts +++ b/infrastructure/zk/src/format_sql.ts @@ -87,6 +87,7 @@ function formatOneLineQuery(line: string): string { return prefix + '\n' + formattedQuery + '\n' + suffix; } + async function formatFile(filePath: string, check: boolean) { const content = await fs.promises.readFile(filePath, { encoding: 'utf-8' }); let linesToQuery = null; @@ -157,7 +158,9 @@ async function formatFile(filePath: string, check: boolean) { export async function formatSqlxQueries(check: boolean) { process.chdir(`${process.env.ZKSYNC_HOME}`); - const { stdout: filesRaw } = await utils.exec('find core/lib/dal -type f -name "*.rs"'); + const { stdout: filesRaw } = await utils.exec( + 'find core/lib/dal -type f -name "*.rs" && find prover/prover_dal -type f -name "*.rs"' + ); const files = filesRaw.trim().split('\n'); const formatResults = await Promise.all(files.map((file) => formatFile(file, check))); if (check) { diff --git a/prover/Cargo.lock b/prover/Cargo.lock index eb143bac1807..fadf1eb6e61f 100644 --- a/prover/Cargo.lock +++ b/prover/Cargo.lock @@ -4666,6 +4666,14 @@ dependencies = [ "zksync_db_connection", ] +[[package]] +name = "prover_version" +version = "0.1.0" +dependencies = [ + "hex", + "zksync_types", +] + [[package]] name = "ptr_meta" version = "0.1.4" diff --git a/prover/Cargo.toml b/prover/Cargo.toml index ca1f97d75b83..138e4c0523f2 100644 --- a/prover/Cargo.toml +++ b/prover/Cargo.toml @@ -12,6 +12,7 @@ members = [ "prover_fri_gateway", "proof_fri_compressor", "prover_cli", + "prover_version", ] resolver = "2" diff --git a/prover/prover_cli/src/commands/status/batch.rs b/prover/prover_cli/src/commands/status/batch.rs index 6f52170444a5..0279fd658f60 100644 --- a/prover/prover_cli/src/commands/status/batch.rs +++ b/prover/prover_cli/src/commands/status/batch.rs @@ -8,7 +8,7 @@ use prover_dal::{Connection, ConnectionPool, Prover, ProverDal}; use zksync_types::{ basic_fri_types::AggregationRound, prover_dal::{ - BasicWitnessGeneratorJobInfo, JobCountStatistics, LeafWitnessGeneratorJobInfo, + BasicWitnessGeneratorJobInfo, ExtendedJobCountStatistics, LeafWitnessGeneratorJobInfo, NodeWitnessGeneratorJobInfo, ProofCompressionJobInfo, ProverJobFriInfo, ProverJobStatus, RecursionTipWitnessGeneratorJobInfo, SchedulerWitnessGeneratorJobInfo, }, @@ -383,7 +383,7 @@ fn display_prover_jobs_info(prover_jobs_info: Vec) { } fn display_job_status_count(jobs: Vec) { - let mut jobs_counts = JobCountStatistics::default(); + let mut jobs_counts = ExtendedJobCountStatistics::default(); let total_jobs = jobs.len(); jobs.iter().for_each(|job| match job.status { ProverJobStatus::Queued => jobs_counts.queued += 1, diff --git a/prover/prover_dal/.sqlx/query-48070aa2fe226a63fd4b0f6c21967cbce0215b4a2eeeb41f92c300080934d018.json b/prover/prover_dal/.sqlx/query-02f2010c60dfa5b93d3f2ee7594579b23540815afa1c6a8d4c36bba951861fe7.json similarity index 82% rename from prover/prover_dal/.sqlx/query-48070aa2fe226a63fd4b0f6c21967cbce0215b4a2eeeb41f92c300080934d018.json rename to prover/prover_dal/.sqlx/query-02f2010c60dfa5b93d3f2ee7594579b23540815afa1c6a8d4c36bba951861fe7.json index 6e86a76d7341..b076553ff34e 100644 --- a/prover/prover_dal/.sqlx/query-48070aa2fe226a63fd4b0f6c21967cbce0215b4a2eeeb41f92c300080934d018.json +++ b/prover/prover_dal/.sqlx/query-02f2010c60dfa5b93d3f2ee7594579b23540815afa1c6a8d4c36bba951861fe7.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT\n circuit_id,\n id\n FROM\n prover_jobs_fri\n WHERE\n l1_batch_number = $1\n AND is_node_final_proof = true\n AND status = 'successful'\n ORDER BY\n circuit_id ASC\n ", + "query": "\n SELECT\n circuit_id,\n id\n FROM\n prover_jobs_fri\n WHERE\n l1_batch_number = $1\n AND is_node_final_proof = TRUE\n AND status = 'successful'\n ORDER BY\n circuit_id ASC\n ", "describe": { "columns": [ { @@ -24,5 +24,5 @@ false ] }, - "hash": "48070aa2fe226a63fd4b0f6c21967cbce0215b4a2eeeb41f92c300080934d018" + "hash": "02f2010c60dfa5b93d3f2ee7594579b23540815afa1c6a8d4c36bba951861fe7" } diff --git a/prover/prover_dal/.sqlx/query-0aad3107c7bc18eba553dc9d2aa87fd298947384bcb1f4c9e479ea11fe21c3dc.json b/prover/prover_dal/.sqlx/query-0aad3107c7bc18eba553dc9d2aa87fd298947384bcb1f4c9e479ea11fe21c3dc.json deleted file mode 100644 index c40cd0343af9..000000000000 --- a/prover/prover_dal/.sqlx/query-0aad3107c7bc18eba553dc9d2aa87fd298947384bcb1f4c9e479ea11fe21c3dc.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "DELETE FROM gpu_prover_queue_fri", - "describe": { - "columns": [], - "parameters": { - "Left": [] - }, - "nullable": [] - }, - "hash": "0aad3107c7bc18eba553dc9d2aa87fd298947384bcb1f4c9e479ea11fe21c3dc" -} diff --git a/prover/prover_dal/.sqlx/query-98564dee7e6ffb75e90c4d2c0381df42d7ba4d34a1362d471d3528468926c491.json b/prover/prover_dal/.sqlx/query-147e61e0ff8ce225b7fadc1ea0ef63b24a5d95e45908be338c00a034f7a82083.json similarity index 55% rename from prover/prover_dal/.sqlx/query-98564dee7e6ffb75e90c4d2c0381df42d7ba4d34a1362d471d3528468926c491.json rename to prover/prover_dal/.sqlx/query-147e61e0ff8ce225b7fadc1ea0ef63b24a5d95e45908be338c00a034f7a82083.json index e1aef7a6adc3..e681ac6a1a34 100644 --- a/prover/prover_dal/.sqlx/query-98564dee7e6ffb75e90c4d2c0381df42d7ba4d34a1362d471d3528468926c491.json +++ b/prover/prover_dal/.sqlx/query-147e61e0ff8ce225b7fadc1ea0ef63b24a5d95e45908be338c00a034f7a82083.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE recursion_tip_witness_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $3\n WHERE\n l1_batch_number = (\n SELECT\n l1_batch_number\n FROM\n recursion_tip_witness_jobs_fri\n WHERE\n status = 'queued'\n AND protocol_version = $1\n AND protocol_version_patch = $2\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n recursion_tip_witness_jobs_fri.l1_batch_number\n ", + "query": "\n UPDATE recursion_tip_witness_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $3\n WHERE\n l1_batch_number = (\n SELECT\n l1_batch_number\n FROM\n recursion_tip_witness_jobs_fri\n WHERE\n status = 'queued'\n AND protocol_version = $1\n AND protocol_version_patch = $2\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n recursion_tip_witness_jobs_fri.l1_batch_number\n ", "describe": { "columns": [ { @@ -20,5 +20,5 @@ false ] }, - "hash": "98564dee7e6ffb75e90c4d2c0381df42d7ba4d34a1362d471d3528468926c491" + "hash": "147e61e0ff8ce225b7fadc1ea0ef63b24a5d95e45908be338c00a034f7a82083" } diff --git a/prover/prover_dal/.sqlx/query-1849cfa3167eed2809e7724a63198f5e2450cc4faee2f80b37fbd5626324dbeb.json b/prover/prover_dal/.sqlx/query-1849cfa3167eed2809e7724a63198f5e2450cc4faee2f80b37fbd5626324dbeb.json new file mode 100644 index 000000000000..38db4847ddde --- /dev/null +++ b/prover/prover_dal/.sqlx/query-1849cfa3167eed2809e7724a63198f5e2450cc4faee2f80b37fbd5626324dbeb.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "\n DELETE FROM gpu_prover_queue_fri\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "1849cfa3167eed2809e7724a63198f5e2450cc4faee2f80b37fbd5626324dbeb" +} diff --git a/prover/prover_dal/.sqlx/query-18a14b47eaac25e8a446530da97c5fa3bc52bdf0cde06a6dbd40ed5362b61535.json b/prover/prover_dal/.sqlx/query-18a14b47eaac25e8a446530da97c5fa3bc52bdf0cde06a6dbd40ed5362b61535.json new file mode 100644 index 000000000000..957df12c566a --- /dev/null +++ b/prover/prover_dal/.sqlx/query-18a14b47eaac25e8a446530da97c5fa3bc52bdf0cde06a6dbd40ed5362b61535.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "\n DELETE FROM prover_jobs_fri_archive\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "18a14b47eaac25e8a446530da97c5fa3bc52bdf0cde06a6dbd40ed5362b61535" +} diff --git a/prover/prover_dal/.sqlx/query-2934fc4d671a14a08d607a17e1eff078938074aed4a4f0da24f0338ce2b04154.json b/prover/prover_dal/.sqlx/query-2934fc4d671a14a08d607a17e1eff078938074aed4a4f0da24f0338ce2b04154.json deleted file mode 100644 index 0915faf80f67..000000000000 --- a/prover/prover_dal/.sqlx/query-2934fc4d671a14a08d607a17e1eff078938074aed4a4f0da24f0338ce2b04154.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n proof_compression_jobs_fri (l1_batch_number, fri_proof_blob_url, status, created_at, updated_at, protocol_version, protocol_version_patch)\n VALUES\n ($1, $2, $3, NOW(), NOW(), $4, $5)\n ON CONFLICT (l1_batch_number) DO NOTHING\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Text", - "Text", - "Int4", - "Int4" - ] - }, - "nullable": [] - }, - "hash": "2934fc4d671a14a08d607a17e1eff078938074aed4a4f0da24f0338ce2b04154" -} diff --git a/prover/prover_dal/.sqlx/query-342831ef46c3792cfddd10f699d1c8c049e7e162b09c3d653206a89365446fdf.json b/prover/prover_dal/.sqlx/query-342831ef46c3792cfddd10f699d1c8c049e7e162b09c3d653206a89365446fdf.json deleted file mode 100644 index 49f8e43e4e5d..000000000000 --- a/prover/prover_dal/.sqlx/query-342831ef46c3792cfddd10f699d1c8c049e7e162b09c3d653206a89365446fdf.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n prover_jobs_fri (\n l1_batch_number,\n circuit_id,\n circuit_blob_url,\n aggregation_round,\n sequence_number,\n depth,\n is_node_final_proof,\n protocol_version,\n status,\n created_at,\n updated_at,\n protocol_version_patch\n )\n VALUES\n ($1, $2, $3, $4, $5, $6, $7, $8, 'queued', NOW(), NOW(), $9)\n ON CONFLICT (l1_batch_number, aggregation_round, circuit_id, depth, sequence_number) DO\n UPDATE\n SET\n updated_at = NOW()\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Int2", - "Text", - "Int2", - "Int4", - "Int4", - "Bool", - "Int4", - "Int4" - ] - }, - "nullable": [] - }, - "hash": "342831ef46c3792cfddd10f699d1c8c049e7e162b09c3d653206a89365446fdf" -} diff --git a/prover/prover_dal/.sqlx/query-3ae5d20066035f93cf8e421a55060846e2e2e9c131c5857f977500e012f7141b.json b/prover/prover_dal/.sqlx/query-3ae5d20066035f93cf8e421a55060846e2e2e9c131c5857f977500e012f7141b.json deleted file mode 100644 index fbc8db58e918..000000000000 --- a/prover/prover_dal/.sqlx/query-3ae5d20066035f93cf8e421a55060846e2e2e9c131c5857f977500e012f7141b.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n DELETE FROM\n prover_jobs_fri\n WHERE\n l1_batch_number = $1;\n \n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [] - }, - "hash": "3ae5d20066035f93cf8e421a55060846e2e2e9c131c5857f977500e012f7141b" -} diff --git a/prover/prover_dal/.sqlx/query-412ef600a2f6025d8c22c2df8a497ed410fa47b268a66f1fc56d469c06ae50af.json b/prover/prover_dal/.sqlx/query-412ef600a2f6025d8c22c2df8a497ed410fa47b268a66f1fc56d469c06ae50af.json new file mode 100644 index 000000000000..f4d5f62a2615 --- /dev/null +++ b/prover/prover_dal/.sqlx/query-412ef600a2f6025d8c22c2df8a497ed410fa47b268a66f1fc56d469c06ae50af.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "\n DELETE FROM prover_fri_protocol_versions\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "412ef600a2f6025d8c22c2df8a497ed410fa47b268a66f1fc56d469c06ae50af" +} diff --git a/prover/prover_dal/.sqlx/query-afc541dc4d550db9a2dacc6d65dd4f092115da1d00dc2122efae9cf070fcb266.json b/prover/prover_dal/.sqlx/query-542af2ff4259182310363ac0213592895215e22fd4cf0dfe69b83277f8d05db3.json similarity index 86% rename from prover/prover_dal/.sqlx/query-afc541dc4d550db9a2dacc6d65dd4f092115da1d00dc2122efae9cf070fcb266.json rename to prover/prover_dal/.sqlx/query-542af2ff4259182310363ac0213592895215e22fd4cf0dfe69b83277f8d05db3.json index c828eb1ca565..4b3c28b9ab71 100644 --- a/prover/prover_dal/.sqlx/query-afc541dc4d550db9a2dacc6d65dd4f092115da1d00dc2122efae9cf070fcb266.json +++ b/prover/prover_dal/.sqlx/query-542af2ff4259182310363ac0213592895215e22fd4cf0dfe69b83277f8d05db3.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT\n recursion_scheduler_level_vk_hash,\n recursion_node_level_vk_hash,\n recursion_leaf_level_vk_hash,\n recursion_circuits_set_vks_hash\n FROM\n prover_fri_protocol_versions\n ORDER BY\n id DESC\n LIMIT 1\n ", + "query": "\n SELECT\n recursion_scheduler_level_vk_hash,\n recursion_node_level_vk_hash,\n recursion_leaf_level_vk_hash,\n recursion_circuits_set_vks_hash\n FROM\n prover_fri_protocol_versions\n ORDER BY\n id DESC\n LIMIT\n 1\n ", "describe": { "columns": [ { @@ -34,5 +34,5 @@ false ] }, - "hash": "afc541dc4d550db9a2dacc6d65dd4f092115da1d00dc2122efae9cf070fcb266" + "hash": "542af2ff4259182310363ac0213592895215e22fd4cf0dfe69b83277f8d05db3" } diff --git a/prover/prover_dal/.sqlx/query-7ac4fe1dcf659f448828e9352cfd6c3b3abeee23bd6099111901547cffccacdc.json b/prover/prover_dal/.sqlx/query-7ac4fe1dcf659f448828e9352cfd6c3b3abeee23bd6099111901547cffccacdc.json deleted file mode 100644 index 975f24fddc8f..000000000000 --- a/prover/prover_dal/.sqlx/query-7ac4fe1dcf659f448828e9352cfd6c3b3abeee23bd6099111901547cffccacdc.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "DELETE FROM prover_jobs_fri_archive", - "describe": { - "columns": [], - "parameters": { - "Left": [] - }, - "nullable": [] - }, - "hash": "7ac4fe1dcf659f448828e9352cfd6c3b3abeee23bd6099111901547cffccacdc" -} diff --git a/prover/prover_dal/.sqlx/query-dccb1bb8250716e8b82714c77f7998b9fa0434d590eecab8448e89be853e5352.json b/prover/prover_dal/.sqlx/query-860846c9bcad1edd1a2906542c178815e29440592b2bb00adacf02730b526458.json similarity index 68% rename from prover/prover_dal/.sqlx/query-dccb1bb8250716e8b82714c77f7998b9fa0434d590eecab8448e89be853e5352.json rename to prover/prover_dal/.sqlx/query-860846c9bcad1edd1a2906542c178815e29440592b2bb00adacf02730b526458.json index b3927e9d1198..f3ed6e34148d 100644 --- a/prover/prover_dal/.sqlx/query-dccb1bb8250716e8b82714c77f7998b9fa0434d590eecab8448e89be853e5352.json +++ b/prover/prover_dal/.sqlx/query-860846c9bcad1edd1a2906542c178815e29440592b2bb00adacf02730b526458.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = 'queued',\n error = 'Manually requeued',\n attempts = 2,\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n l1_batch_number = $1\n AND attempts >= $2\n AND (status = 'in_progress' OR status = 'failed')\n RETURNING\n status,\n attempts\n ", + "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = 'queued',\n error = 'Manually requeued',\n attempts = 2,\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n l1_batch_number = $1\n AND attempts >= $2\n AND (\n status = 'in_progress'\n OR status = 'failed'\n )\n RETURNING\n status,\n attempts\n ", "describe": { "columns": [ { @@ -25,5 +25,5 @@ false ] }, - "hash": "dccb1bb8250716e8b82714c77f7998b9fa0434d590eecab8448e89be853e5352" + "hash": "860846c9bcad1edd1a2906542c178815e29440592b2bb00adacf02730b526458" } diff --git a/prover/prover_dal/.sqlx/query-87a73aa95a85efeb065428f9e56e085ea80cf93c2fd66fd3949aab428bbdc560.json b/prover/prover_dal/.sqlx/query-87a73aa95a85efeb065428f9e56e085ea80cf93c2fd66fd3949aab428bbdc560.json new file mode 100644 index 000000000000..d95b4f7f6f20 --- /dev/null +++ b/prover/prover_dal/.sqlx/query-87a73aa95a85efeb065428f9e56e085ea80cf93c2fd66fd3949aab428bbdc560.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "\n DELETE FROM prover_jobs_fri\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "87a73aa95a85efeb065428f9e56e085ea80cf93c2fd66fd3949aab428bbdc560" +} diff --git a/prover/prover_dal/.sqlx/query-9269eb45936418a37a92ab124161d048cc0c3e8f549690469d53249925e53e90.json b/prover/prover_dal/.sqlx/query-9269eb45936418a37a92ab124161d048cc0c3e8f549690469d53249925e53e90.json new file mode 100644 index 000000000000..425904df82f8 --- /dev/null +++ b/prover/prover_dal/.sqlx/query-9269eb45936418a37a92ab124161d048cc0c3e8f549690469d53249925e53e90.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n proof_compression_jobs_fri (l1_batch_number, fri_proof_blob_url, status, created_at, updated_at, protocol_version, protocol_version_patch)\n VALUES\n ($1, $2, $3, NOW(), NOW(), $4, $5)\n ON CONFLICT (l1_batch_number) DO NOTHING\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Text", + "Text", + "Int4", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "9269eb45936418a37a92ab124161d048cc0c3e8f549690469d53249925e53e90" +} diff --git a/prover/prover_dal/.sqlx/query-9375645f2c854f98c2fd628bd27356f9e77694131bd093163feb4f4a513de9d0.json b/prover/prover_dal/.sqlx/query-9375645f2c854f98c2fd628bd27356f9e77694131bd093163feb4f4a513de9d0.json deleted file mode 100644 index 0ea0b74e3f9c..000000000000 --- a/prover/prover_dal/.sqlx/query-9375645f2c854f98c2fd628bd27356f9e77694131bd093163feb4f4a513de9d0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n DELETE FROM\n prover_jobs_fri_archive\n WHERE\n l1_batch_number = $1;\n \n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [] - }, - "hash": "9375645f2c854f98c2fd628bd27356f9e77694131bd093163feb4f4a513de9d0" -} diff --git a/prover/prover_dal/.sqlx/query-8980174300deb4bca5291c6c554c85ebd58e9d071b075cccd4794c3194efa43e.json b/prover/prover_dal/.sqlx/query-9b713312b539b4eefa58346f0070767a2cd4488e670674cd9149f7a332c0198d.json similarity index 90% rename from prover/prover_dal/.sqlx/query-8980174300deb4bca5291c6c554c85ebd58e9d071b075cccd4794c3194efa43e.json rename to prover/prover_dal/.sqlx/query-9b713312b539b4eefa58346f0070767a2cd4488e670674cd9149f7a332c0198d.json index 2dd3a28386cc..2609a2ee0cfc 100644 --- a/prover/prover_dal/.sqlx/query-8980174300deb4bca5291c6c554c85ebd58e9d071b075cccd4794c3194efa43e.json +++ b/prover/prover_dal/.sqlx/query-9b713312b539b4eefa58346f0070767a2cd4488e670674cd9149f7a332c0198d.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE recursion_tip_witness_jobs_fri\n SET\n status = 'queued'\n WHERE\n l1_batch_number IN (\n SELECT\n prover_jobs_fri.l1_batch_number\n FROM\n prover_jobs_fri\n JOIN recursion_tip_witness_jobs_fri rtwj ON prover_jobs_fri.l1_batch_number = rtwj.l1_batch_number\n WHERE\n rtwj.status = 'waiting_for_proofs'\n AND prover_jobs_fri.status = 'successful'\n AND prover_jobs_fri.aggregation_round = $1\n AND prover_jobs_fri.is_node_final_proof = true\n GROUP BY\n prover_jobs_fri.l1_batch_number,\n rtwj.number_of_final_node_jobs\n HAVING\n COUNT(*) = rtwj.number_of_final_node_jobs\n )\n RETURNING\n l1_batch_number;\n ", + "query": "\n UPDATE recursion_tip_witness_jobs_fri\n SET\n status = 'queued'\n WHERE\n l1_batch_number IN (\n SELECT\n prover_jobs_fri.l1_batch_number\n FROM\n prover_jobs_fri\n JOIN recursion_tip_witness_jobs_fri rtwj ON prover_jobs_fri.l1_batch_number = rtwj.l1_batch_number\n WHERE\n rtwj.status = 'waiting_for_proofs'\n AND prover_jobs_fri.status = 'successful'\n AND prover_jobs_fri.aggregation_round = $1\n AND prover_jobs_fri.is_node_final_proof = TRUE\n GROUP BY\n prover_jobs_fri.l1_batch_number,\n rtwj.number_of_final_node_jobs\n HAVING\n COUNT(*) = rtwj.number_of_final_node_jobs\n )\n RETURNING\n l1_batch_number;\n ", "describe": { "columns": [ { @@ -18,5 +18,5 @@ false ] }, - "hash": "8980174300deb4bca5291c6c554c85ebd58e9d071b075cccd4794c3194efa43e" + "hash": "9b713312b539b4eefa58346f0070767a2cd4488e670674cd9149f7a332c0198d" } diff --git a/prover/prover_dal/.sqlx/query-9cc6cb602bb0752b51238cfbd568355ae88264eacd2a0c09b116159e76823401.json b/prover/prover_dal/.sqlx/query-9cc6cb602bb0752b51238cfbd568355ae88264eacd2a0c09b116159e76823401.json new file mode 100644 index 000000000000..229d79f74c17 --- /dev/null +++ b/prover/prover_dal/.sqlx/query-9cc6cb602bb0752b51238cfbd568355ae88264eacd2a0c09b116159e76823401.json @@ -0,0 +1,32 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n protocol_version,\n COUNT(*) FILTER (\n WHERE\n status = 'queued'\n ) AS queued,\n COUNT(*) FILTER (\n WHERE\n status = 'in_progress'\n ) AS in_progress\n FROM\n proof_compression_jobs_fri\n GROUP BY\n status,\n protocol_version\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "protocol_version", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "queued", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "in_progress", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + true, + null, + null + ] + }, + "hash": "9cc6cb602bb0752b51238cfbd568355ae88264eacd2a0c09b116159e76823401" +} diff --git a/prover/prover_dal/.sqlx/query-a91c0489a8830a3dbd628c75aca22e807dcfd1ff4cda8b59ddedb5c44ee34df6.json b/prover/prover_dal/.sqlx/query-a91c0489a8830a3dbd628c75aca22e807dcfd1ff4cda8b59ddedb5c44ee34df6.json deleted file mode 100644 index 000ee666c7f2..000000000000 --- a/prover/prover_dal/.sqlx/query-a91c0489a8830a3dbd628c75aca22e807dcfd1ff4cda8b59ddedb5c44ee34df6.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "DELETE FROM proof_compression_jobs_fri", - "describe": { - "columns": [], - "parameters": { - "Left": [] - }, - "nullable": [] - }, - "hash": "a91c0489a8830a3dbd628c75aca22e807dcfd1ff4cda8b59ddedb5c44ee34df6" -} diff --git a/prover/prover_dal/.sqlx/query-aff36fccb6408f736085c64eefda3c0d59703299479d3626b22ab648d675ce40.json b/prover/prover_dal/.sqlx/query-aff36fccb6408f736085c64eefda3c0d59703299479d3626b22ab648d675ce40.json deleted file mode 100644 index dd39cf64b868..000000000000 --- a/prover/prover_dal/.sqlx/query-aff36fccb6408f736085c64eefda3c0d59703299479d3626b22ab648d675ce40.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "DELETE FROM prover_jobs_fri", - "describe": { - "columns": [], - "parameters": { - "Left": [] - }, - "nullable": [] - }, - "hash": "aff36fccb6408f736085c64eefda3c0d59703299479d3626b22ab648d675ce40" -} diff --git a/prover/prover_dal/.sqlx/query-b568f9cb9c2bd53b5dcde15f368a9dc31c7d51476f18cffa80cad653298ad252.json b/prover/prover_dal/.sqlx/query-b568f9cb9c2bd53b5dcde15f368a9dc31c7d51476f18cffa80cad653298ad252.json new file mode 100644 index 000000000000..03d268477904 --- /dev/null +++ b/prover/prover_dal/.sqlx/query-b568f9cb9c2bd53b5dcde15f368a9dc31c7d51476f18cffa80cad653298ad252.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "\n DELETE FROM proof_compression_jobs_fri\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "b568f9cb9c2bd53b5dcde15f368a9dc31c7d51476f18cffa80cad653298ad252" +} diff --git a/prover/prover_dal/.sqlx/query-dbdbbac302a5141d7b5872261cf8594219903833fc051aac278a3b79e5d58dce.json b/prover/prover_dal/.sqlx/query-dbdbbac302a5141d7b5872261cf8594219903833fc051aac278a3b79e5d58dce.json deleted file mode 100644 index b471e5cff51d..000000000000 --- a/prover/prover_dal/.sqlx/query-dbdbbac302a5141d7b5872261cf8594219903833fc051aac278a3b79e5d58dce.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n id,\n protocol_version_patch\n FROM\n prover_fri_protocol_versions\n WHERE\n recursion_circuits_set_vks_hash = $1\n AND recursion_leaf_level_vk_hash = $2\n AND recursion_node_level_vk_hash = $3\n AND recursion_scheduler_level_vk_hash = $4\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - }, - { - "ordinal": 1, - "name": "protocol_version_patch", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Bytea", - "Bytea", - "Bytea", - "Bytea" - ] - }, - "nullable": [ - false, - false - ] - }, - "hash": "dbdbbac302a5141d7b5872261cf8594219903833fc051aac278a3b79e5d58dce" -} diff --git a/prover/prover_dal/.sqlx/query-dcde8cc1a522b90a03c25f2fc5b855d36a2d280a5a021155a8d6aafe7b9689c9.json b/prover/prover_dal/.sqlx/query-dcde8cc1a522b90a03c25f2fc5b855d36a2d280a5a021155a8d6aafe7b9689c9.json new file mode 100644 index 000000000000..42710feda153 --- /dev/null +++ b/prover/prover_dal/.sqlx/query-dcde8cc1a522b90a03c25f2fc5b855d36a2d280a5a021155a8d6aafe7b9689c9.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "\n DELETE FROM prover_jobs_fri_archive\n WHERE\n l1_batch_number = $1;\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + }, + "hash": "dcde8cc1a522b90a03c25f2fc5b855d36a2d280a5a021155a8d6aafe7b9689c9" +} diff --git a/prover/prover_dal/.sqlx/query-36375be0667ab6241a3f6432e802279dcfd0261dc58f20fb3454a4d5146a561a.json b/prover/prover_dal/.sqlx/query-e3194873d24e67f8d0e98bf8bf2d4f9a3b98458746972c9860fb9473947d59ff.json similarity index 71% rename from prover/prover_dal/.sqlx/query-36375be0667ab6241a3f6432e802279dcfd0261dc58f20fb3454a4d5146a561a.json rename to prover/prover_dal/.sqlx/query-e3194873d24e67f8d0e98bf8bf2d4f9a3b98458746972c9860fb9473947d59ff.json index b8bfb19ac2d5..0264238ee484 100644 --- a/prover/prover_dal/.sqlx/query-36375be0667ab6241a3f6432e802279dcfd0261dc58f20fb3454a4d5146a561a.json +++ b/prover/prover_dal/.sqlx/query-e3194873d24e67f8d0e98bf8bf2d4f9a3b98458746972c9860fb9473947d59ff.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'queued',\n error = 'Manually requeued',\n attempts = 2,\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n l1_batch_number = $1\n AND attempts >= $2\n AND (status = 'in_progress' OR status = 'failed')\n RETURNING\n id,\n status,\n attempts,\n circuit_id\n ", + "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'queued',\n error = 'Manually requeued',\n attempts = 2,\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n l1_batch_number = $1\n AND attempts >= $2\n AND (\n status = 'in_progress'\n OR status = 'failed'\n )\n RETURNING\n id,\n status,\n attempts,\n circuit_id\n ", "describe": { "columns": [ { @@ -37,5 +37,5 @@ false ] }, - "hash": "36375be0667ab6241a3f6432e802279dcfd0261dc58f20fb3454a4d5146a561a" + "hash": "e3194873d24e67f8d0e98bf8bf2d4f9a3b98458746972c9860fb9473947d59ff" } diff --git a/prover/prover_dal/.sqlx/query-e495b78add1c942d89d806e228093a4eb2ee0284aa89bca1ba958f470a2d6254.json b/prover/prover_dal/.sqlx/query-e495b78add1c942d89d806e228093a4eb2ee0284aa89bca1ba958f470a2d6254.json new file mode 100644 index 000000000000..6594b6ee76c9 --- /dev/null +++ b/prover/prover_dal/.sqlx/query-e495b78add1c942d89d806e228093a4eb2ee0284aa89bca1ba958f470a2d6254.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "\n DELETE FROM prover_jobs_fri\n WHERE\n l1_batch_number = $1;\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + }, + "hash": "e495b78add1c942d89d806e228093a4eb2ee0284aa89bca1ba958f470a2d6254" +} diff --git a/prover/prover_dal/.sqlx/query-aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45.json b/prover/prover_dal/.sqlx/query-edd1c3d3b31e63c839dba1cd00e983cda046c798eb22a08909099cbbb397fef9.json similarity index 57% rename from prover/prover_dal/.sqlx/query-aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45.json rename to prover/prover_dal/.sqlx/query-edd1c3d3b31e63c839dba1cd00e983cda046c798eb22a08909099cbbb397fef9.json index 614b853c6250..c1cb118bd5f5 100644 --- a/prover/prover_dal/.sqlx/query-aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45.json +++ b/prover/prover_dal/.sqlx/query-edd1c3d3b31e63c839dba1cd00e983cda046c798eb22a08909099cbbb397fef9.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT\n COUNT(*) AS \"count!\",\n circuit_id AS \"circuit_id!\",\n aggregation_round AS \"aggregation_round!\",\n status AS \"status!\"\n FROM\n prover_jobs_fri\n WHERE\n status <> 'skipped'\n AND status <> 'successful'\n GROUP BY\n circuit_id,\n aggregation_round,\n status\n ", + "query": "\n SELECT\n COUNT(*) AS \"count!\",\n circuit_id AS \"circuit_id!\",\n aggregation_round AS \"aggregation_round!\",\n status AS \"status!\",\n protocol_version AS \"protocol_version!\"\n FROM\n prover_jobs_fri\n WHERE\n status = 'queued'\n OR status = 'in_progress'\n GROUP BY\n circuit_id,\n aggregation_round,\n status,\n protocol_version\n ", "describe": { "columns": [ { @@ -22,6 +22,11 @@ "ordinal": 3, "name": "status!", "type_info": "Text" + }, + { + "ordinal": 4, + "name": "protocol_version!", + "type_info": "Int4" } ], "parameters": { @@ -31,8 +36,9 @@ null, false, false, - false + false, + true ] }, - "hash": "aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45" + "hash": "edd1c3d3b31e63c839dba1cd00e983cda046c798eb22a08909099cbbb397fef9" } diff --git a/prover/prover_dal/.sqlx/query-f99c34313e2717ec74b4f274e33dae905acac53b46eeaeb059d23e48a71df3b4.json b/prover/prover_dal/.sqlx/query-f99c34313e2717ec74b4f274e33dae905acac53b46eeaeb059d23e48a71df3b4.json new file mode 100644 index 000000000000..c0c2637fe5ae --- /dev/null +++ b/prover/prover_dal/.sqlx/query-f99c34313e2717ec74b4f274e33dae905acac53b46eeaeb059d23e48a71df3b4.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n prover_jobs_fri (\n l1_batch_number,\n circuit_id,\n circuit_blob_url,\n aggregation_round,\n sequence_number,\n depth,\n is_node_final_proof,\n protocol_version,\n status,\n created_at,\n updated_at,\n protocol_version_patch\n )\n VALUES\n ($1, $2, $3, $4, $5, $6, $7, $8, 'queued', NOW(), NOW(), $9)\n ON CONFLICT (l1_batch_number, aggregation_round, circuit_id, depth, sequence_number) DO\n UPDATE\n SET\n updated_at = NOW()\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int2", + "Text", + "Int2", + "Int4", + "Int4", + "Bool", + "Int4", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "f99c34313e2717ec74b4f274e33dae905acac53b46eeaeb059d23e48a71df3b4" +} diff --git a/prover/prover_dal/.sqlx/query-fc15423c4eef939d0b47f1cf068d375fd4baf93f109270cbab3ee4e61cfb2c67.json b/prover/prover_dal/.sqlx/query-fc15423c4eef939d0b47f1cf068d375fd4baf93f109270cbab3ee4e61cfb2c67.json deleted file mode 100644 index b10e1c0681ee..000000000000 --- a/prover/prover_dal/.sqlx/query-fc15423c4eef939d0b47f1cf068d375fd4baf93f109270cbab3ee4e61cfb2c67.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "DELETE FROM prover_fri_protocol_versions", - "describe": { - "columns": [], - "parameters": { - "Left": [] - }, - "nullable": [] - }, - "hash": "fc15423c4eef939d0b47f1cf068d375fd4baf93f109270cbab3ee4e61cfb2c67" -} diff --git a/prover/prover_dal/src/fri_gpu_prover_queue_dal.rs b/prover/prover_dal/src/fri_gpu_prover_queue_dal.rs index d4230d8eaf45..8cb5a7ad4163 100644 --- a/prover/prover_dal/src/fri_gpu_prover_queue_dal.rs +++ b/prover/prover_dal/src/fri_gpu_prover_queue_dal.rs @@ -239,17 +239,25 @@ impl FriGpuProverQueueDal<'_, '_> { pub async fn delete_gpu_prover_queue_fri( &mut self, ) -> sqlx::Result { - sqlx::query!("DELETE FROM gpu_prover_queue_fri") - .execute(self.storage.conn()) - .await + sqlx::query!( + r#" + DELETE FROM gpu_prover_queue_fri + "# + ) + .execute(self.storage.conn()) + .await } pub async fn delete_gpu_prover_queue_fri_archive( &mut self, ) -> sqlx::Result { - sqlx::query!("DELETE FROM gpu_prover_queue_fri") - .execute(self.storage.conn()) - .await + sqlx::query!( + r#" + DELETE FROM gpu_prover_queue_fri + "# + ) + .execute(self.storage.conn()) + .await } pub async fn delete(&mut self) -> sqlx::Result { diff --git a/prover/prover_dal/src/fri_proof_compressor_dal.rs b/prover/prover_dal/src/fri_proof_compressor_dal.rs index 7d4ef1462bc3..bd7e40521c7d 100644 --- a/prover/prover_dal/src/fri_proof_compressor_dal.rs +++ b/prover/prover_dal/src/fri_proof_compressor_dal.rs @@ -1,7 +1,6 @@ #![doc = include_str!("../doc/FriProofCompressorDal.md")] use std::{collections::HashMap, str::FromStr, time::Duration}; -use sqlx::Row; use zksync_basic_types::{ protocol_version::{ProtocolSemanticVersion, ProtocolVersionId, VersionPatch}, prover_dal::{ @@ -26,22 +25,22 @@ impl FriProofCompressorDal<'_, '_> { protocol_version: ProtocolSemanticVersion, ) { sqlx::query!( - r#" - INSERT INTO - proof_compression_jobs_fri (l1_batch_number, fri_proof_blob_url, status, created_at, updated_at, protocol_version, protocol_version_patch) - VALUES - ($1, $2, $3, NOW(), NOW(), $4, $5) - ON CONFLICT (l1_batch_number) DO NOTHING - "#, - i64::from(block_number.0), - fri_proof_blob_url, - ProofCompressionJobStatus::Queued.to_string(), - protocol_version.minor as i32, - protocol_version.patch.0 as i32 - ) - .fetch_optional(self.storage.conn()) - .await - .unwrap(); + r#" + INSERT INTO + proof_compression_jobs_fri (l1_batch_number, fri_proof_blob_url, status, created_at, updated_at, protocol_version, protocol_version_patch) + VALUES + ($1, $2, $3, NOW(), NOW(), $4, $5) + ON CONFLICT (l1_batch_number) DO NOTHING + "#, + i64::from(block_number.0), + fri_proof_blob_url, + ProofCompressionJobStatus::Queued.to_string(), + protocol_version.minor as i32, + protocol_version.patch.0 as i32 + ) + .fetch_optional(self.storage.conn()) + .await + .unwrap(); } pub async fn skip_proof_compression_job(&mut self, block_number: L1BatchNumber) { @@ -244,25 +243,39 @@ impl FriProofCompressorDal<'_, '_> { .unwrap(); } - pub async fn get_jobs_stats(&mut self) -> JobCountStatistics { - let mut results: HashMap = sqlx::query( - "SELECT COUNT(*) as \"count\", status as \"status\" \ - FROM proof_compression_jobs_fri \ - GROUP BY status", + pub async fn get_jobs_stats(&mut self) -> HashMap { + sqlx::query!( + r#" + SELECT + protocol_version, + COUNT(*) FILTER ( + WHERE + status = 'queued' + ) AS queued, + COUNT(*) FILTER ( + WHERE + status = 'in_progress' + ) AS in_progress + FROM + proof_compression_jobs_fri + GROUP BY + status, + protocol_version + "#, ) .fetch_all(self.storage.conn()) .await .unwrap() .into_iter() - .map(|row| (row.get("status"), row.get::("count"))) - .collect::>(); - - JobCountStatistics { - queued: results.remove("queued").unwrap_or(0i64) as usize, - in_progress: results.remove("in_progress").unwrap_or(0i64) as usize, - failed: results.remove("failed").unwrap_or(0i64) as usize, - successful: results.remove("successful").unwrap_or(0i64) as usize, - } + .map(|row| { + let key = ProtocolVersionId::try_from(row.protocol_version.unwrap() as u16).unwrap(); + let value = JobCountStatistics { + queued: row.queued.unwrap() as usize, + in_progress: row.in_progress.unwrap() as usize, + }; + (key, value) + }) + .collect() } pub async fn get_oldest_not_compressed_batch(&mut self) -> Option { @@ -384,9 +397,13 @@ impl FriProofCompressorDal<'_, '_> { } pub async fn delete(&mut self) -> sqlx::Result { - sqlx::query!("DELETE FROM proof_compression_jobs_fri") - .execute(self.storage.conn()) - .await + sqlx::query!( + r#" + DELETE FROM proof_compression_jobs_fri + "# + ) + .execute(self.storage.conn()) + .await } pub async fn requeue_stuck_jobs_for_batch( @@ -407,7 +424,10 @@ impl FriProofCompressorDal<'_, '_> { WHERE l1_batch_number = $1 AND attempts >= $2 - AND (status = 'in_progress' OR status = 'failed') + AND ( + status = 'in_progress' + OR status = 'failed' + ) RETURNING status, attempts diff --git a/prover/prover_dal/src/fri_protocol_versions_dal.rs b/prover/prover_dal/src/fri_protocol_versions_dal.rs index 1b3030832cac..07c34a0e53e7 100644 --- a/prover/prover_dal/src/fri_protocol_versions_dal.rs +++ b/prover/prover_dal/src/fri_protocol_versions_dal.rs @@ -106,7 +106,8 @@ impl FriProtocolVersionsDal<'_, '_> { prover_fri_protocol_versions ORDER BY id DESC - LIMIT 1 + LIMIT + 1 "#, ) .fetch_one(self.storage.conn()) @@ -129,8 +130,12 @@ impl FriProtocolVersionsDal<'_, '_> { } pub async fn delete(&mut self) -> sqlx::Result { - sqlx::query!("DELETE FROM prover_fri_protocol_versions") - .execute(self.storage.conn()) - .await + sqlx::query!( + r#" + DELETE FROM prover_fri_protocol_versions + "# + ) + .execute(self.storage.conn()) + .await } } diff --git a/prover/prover_dal/src/fri_prover_dal.rs b/prover/prover_dal/src/fri_prover_dal.rs index 1a6064d6561e..c8c414c6c394 100644 --- a/prover/prover_dal/src/fri_prover_dal.rs +++ b/prover/prover_dal/src/fri_prover_dal.rs @@ -2,7 +2,7 @@ use std::{collections::HashMap, convert::TryFrom, str::FromStr, time::Duration}; use zksync_basic_types::{ - basic_fri_types::{AggregationRound, CircuitIdRoundTuple}, + basic_fri_types::{AggregationRound, CircuitIdRoundTuple, JobIdentifiers}, protocol_version::{ProtocolSemanticVersion, ProtocolVersionId, VersionPatch}, prover_dal::{ correct_circuit_id, FriProverJobMetadata, JobCountStatistics, ProverJobFriInfo, @@ -362,29 +362,29 @@ impl FriProverDal<'_, '_> { protocol_version: ProtocolSemanticVersion, ) { sqlx::query!( - r#" - INSERT INTO - prover_jobs_fri ( - l1_batch_number, - circuit_id, - circuit_blob_url, - aggregation_round, - sequence_number, - depth, - is_node_final_proof, - protocol_version, - status, - created_at, - updated_at, - protocol_version_patch - ) - VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, 'queued', NOW(), NOW(), $9) - ON CONFLICT (l1_batch_number, aggregation_round, circuit_id, depth, sequence_number) DO - UPDATE - SET - updated_at = NOW() - "#, + r#" + INSERT INTO + prover_jobs_fri ( + l1_batch_number, + circuit_id, + circuit_blob_url, + aggregation_round, + sequence_number, + depth, + is_node_final_proof, + protocol_version, + status, + created_at, + updated_at, + protocol_version_patch + ) + VALUES + ($1, $2, $3, $4, $5, $6, $7, $8, 'queued', NOW(), NOW(), $9) + ON CONFLICT (l1_batch_number, aggregation_round, circuit_id, depth, sequence_number) DO + UPDATE + SET + updated_at = NOW() + "#, i64::from(l1_batch_number.0), i16::from(circuit_id), circuit_blob_url, @@ -395,64 +395,55 @@ impl FriProverDal<'_, '_> { protocol_version.minor as i32, protocol_version.patch.0 as i32, ) - .execute(self.storage.conn()) - .await - .unwrap(); + .execute(self.storage.conn()) + .await + .unwrap(); } - pub async fn get_prover_jobs_stats(&mut self) -> HashMap<(u8, u8), JobCountStatistics> { + pub async fn get_prover_jobs_stats(&mut self) -> HashMap { { - sqlx::query!( + let rows = sqlx::query!( r#" SELECT COUNT(*) AS "count!", circuit_id AS "circuit_id!", aggregation_round AS "aggregation_round!", - status AS "status!" + status AS "status!", + protocol_version AS "protocol_version!" FROM prover_jobs_fri WHERE - status <> 'skipped' - AND status <> 'successful' + status = 'queued' + OR status = 'in_progress' GROUP BY circuit_id, aggregation_round, - status + status, + protocol_version "# ) .fetch_all(self.storage.conn()) .await - .unwrap() - .into_iter() - .map(|row| { - ( - row.circuit_id, - row.aggregation_round, - row.status, - row.count as usize, - ) - }) - .fold( - HashMap::new(), - |mut acc, (circuit_id, aggregation_round, status, value)| { - let stats = acc - .entry((circuit_id as u8, aggregation_round as u8)) - .or_insert(JobCountStatistics { - queued: 0, - in_progress: 0, - failed: 0, - successful: 0, - }); - match status.as_ref() { - "queued" => stats.queued = value, - "in_progress" => stats.in_progress = value, - "failed" => stats.failed = value, - "successful" => stats.successful = value, - _ => (), - } - acc - }, - ) + .unwrap(); + + let mut result = HashMap::new(); + + for row in &rows { + let stats: &mut JobCountStatistics = result + .entry(JobIdentifiers { + circuit_id: row.circuit_id as u8, + aggregation_round: row.aggregation_round as u8, + protocol_version: row.protocol_version as u16, + }) + .or_default(); + match row.status.as_ref() { + "queued" => stats.queued = row.count as usize, + "in_progress" => stats.in_progress = row.count as usize, + _ => (), + } + } + + result } } @@ -637,7 +628,7 @@ impl FriProverDal<'_, '_> { prover_jobs_fri WHERE l1_batch_number = $1 - AND is_node_final_proof = true + AND is_node_final_proof = TRUE AND status = 'successful' ORDER BY circuit_id ASC @@ -726,11 +717,9 @@ impl FriProverDal<'_, '_> { ) -> sqlx::Result { sqlx::query!( r#" - DELETE FROM - prover_jobs_fri + DELETE FROM prover_jobs_fri WHERE l1_batch_number = $1; - "#, i64::from(l1_batch_number.0) ) @@ -744,11 +733,9 @@ impl FriProverDal<'_, '_> { ) -> sqlx::Result { sqlx::query!( r#" - DELETE FROM - prover_jobs_fri_archive + DELETE FROM prover_jobs_fri_archive WHERE l1_batch_number = $1; - "#, i64::from(l1_batch_number.0) ) @@ -767,17 +754,25 @@ impl FriProverDal<'_, '_> { } pub async fn delete_prover_jobs_fri(&mut self) -> sqlx::Result { - sqlx::query!("DELETE FROM prover_jobs_fri") - .execute(self.storage.conn()) - .await + sqlx::query!( + r#" + DELETE FROM prover_jobs_fri + "# + ) + .execute(self.storage.conn()) + .await } pub async fn delete_prover_jobs_fri_archive( &mut self, ) -> sqlx::Result { - sqlx::query!("DELETE FROM prover_jobs_fri_archive") - .execute(self.storage.conn()) - .await + sqlx::query!( + r#" + DELETE FROM prover_jobs_fri_archive + "# + ) + .execute(self.storage.conn()) + .await } pub async fn delete(&mut self) -> sqlx::Result { @@ -803,7 +798,10 @@ impl FriProverDal<'_, '_> { WHERE l1_batch_number = $1 AND attempts >= $2 - AND (status = 'in_progress' OR status = 'failed') + AND ( + status = 'in_progress' + OR status = 'failed' + ) RETURNING id, status, diff --git a/prover/prover_dal/src/fri_witness_generator_dal.rs b/prover/prover_dal/src/fri_witness_generator_dal.rs index a7704969a936..e2042f202aaf 100644 --- a/prover/prover_dal/src/fri_witness_generator_dal.rs +++ b/prover/prover_dal/src/fri_witness_generator_dal.rs @@ -895,7 +895,7 @@ impl FriWitnessGeneratorDal<'_, '_> { rtwj.status = 'waiting_for_proofs' AND prover_jobs_fri.status = 'successful' AND prover_jobs_fri.aggregation_round = $1 - AND prover_jobs_fri.is_node_final_proof = true + AND prover_jobs_fri.is_node_final_proof = TRUE GROUP BY prover_jobs_fri.l1_batch_number, rtwj.number_of_final_node_jobs @@ -1099,7 +1099,7 @@ impl FriWitnessGeneratorDal<'_, '_> { SELECT l1_batch_number FROM - recursion_tip_witness_jobs_fri + recursion_tip_witness_jobs_fri WHERE status = 'queued' AND protocol_version = $1 @@ -1365,30 +1365,39 @@ impl FriWitnessGeneratorDal<'_, '_> { pub async fn get_witness_jobs_stats( &mut self, aggregation_round: AggregationRound, - ) -> JobCountStatistics { + ) -> HashMap<(AggregationRound, ProtocolVersionId), JobCountStatistics> { let table_name = Self::input_table_name_for(aggregation_round); let sql = format!( r#" - SELECT COUNT(*) as "count", status as "status" - FROM {} - GROUP BY status + SELECT + protocol_version, + COUNT(*) FILTER (WHERE status = 'queued') as queued, + COUNT(*) FILTER (WHERE status = 'in_progress') as in_progress + FROM + {} + GROUP BY + protocol_version "#, table_name, ); - let mut results: HashMap = sqlx::query(&sql) + sqlx::query(&sql) .fetch_all(self.storage.conn()) .await .unwrap() .into_iter() - .map(|row| (row.get("status"), row.get::("count"))) - .collect::>(); - - JobCountStatistics { - queued: results.remove("queued").unwrap_or(0i64) as usize, - in_progress: results.remove("in_progress").unwrap_or(0i64) as usize, - failed: results.remove("failed").unwrap_or(0i64) as usize, - successful: results.remove("successful").unwrap_or(0i64) as usize, - } + .map(|row| { + let key = ( + aggregation_round, + ProtocolVersionId::try_from(row.get::("protocol_version") as u16) + .unwrap(), + ); + let value = JobCountStatistics { + queued: row.get::("queued") as usize, + in_progress: row.get::("in_progress") as usize, + }; + (key, value) + }) + .collect() } fn input_table_name_for(aggregation_round: AggregationRound) -> &'static str { @@ -1449,7 +1458,7 @@ impl FriWitnessGeneratorDal<'_, '_> { l1_batch_number, merkle_tree_paths_blob_url: row.merkle_tree_paths_blob_url, attempts: row.attempts as u32, - status: WitnessJobStatus::from_str(&row.status).unwrap(), + status: row.status.parse::().unwrap(), error: row.error, created_at: row.created_at, updated_at: row.updated_at, diff --git a/prover/prover_version/Cargo.toml b/prover/prover_version/Cargo.toml new file mode 100644 index 000000000000..82f585b4e946 --- /dev/null +++ b/prover/prover_version/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "prover_version" +version.workspace = true +edition.workspace = true +authors.workspace = true +homepage.workspace = true +repository.workspace = true +license.workspace = true +keywords.workspace = true +categories.workspace = true + +[dependencies] +hex.workspace = true +zksync_types.workspace = true diff --git a/prover/prover_version/src/main.rs b/prover/prover_version/src/main.rs new file mode 100644 index 000000000000..3ed931240d9f --- /dev/null +++ b/prover/prover_version/src/main.rs @@ -0,0 +1,5 @@ +use zksync_types::ProtocolVersionId; + +fn main() { + println!("{}", ProtocolVersionId::current_prover_version()); +}