diff --git a/aggregator/src/aggregator.rs b/aggregator/src/aggregator.rs index 80c28817c..a2c0ac07b 100644 --- a/aggregator/src/aggregator.rs +++ b/aggregator/src/aggregator.rs @@ -797,7 +797,6 @@ impl Aggregator { task_config.query_config().query().try_into()?, vdaf_instance, vdaf_verify_key, - task_config.query_config().max_batch_query_count() as u64, Some(*task_config.task_expiration()), peer_aggregator.report_expiry_age().cloned(), task_config.query_config().min_batch_size() as u64, diff --git a/aggregator/src/aggregator/batch_mode.rs b/aggregator/src/aggregator/batch_mode.rs index f87fd309f..8bfaa24b7 100644 --- a/aggregator/src/aggregator/batch_mode.rs +++ b/aggregator/src/aggregator/batch_mode.rs @@ -14,7 +14,7 @@ use janus_messages::{ Role, }; use prio::vdaf; -use std::{collections::HashSet, hash::Hash}; +use std::hash::Hash; #[async_trait] pub trait UploadableBatchMode: BatchMode { @@ -124,13 +124,9 @@ impl CollectableBatchMode for TimeInterval { where A::AggregationParam: Send + Sync + Eq + Hash, { - // Check how distinct aggregation parameters appear in rows in the relevant table with an - // intersecting batch interval. Each distinct aggregation parameter consumes one unit of - // query count. - // - // https://www.ietf.org/archive/id/draft-ietf-ppm-dap-05.html#section-4.6.6 + // Compute the aggregation parameters that have already been collected for. let mut found_overlapping_nonequal_interval = false; - let agg_params = match task.role() { + let agg_params: Vec<_> = match task.role() { Role::Leader => tx .get_collection_jobs_intersecting_interval::( vdaf, @@ -145,7 +141,7 @@ impl CollectableBatchMode for TimeInterval { } job.take_aggregation_parameter() }) - .collect::>(), + .collect(), Role::Helper => tx .get_aggregate_share_jobs_intersecting_interval::( @@ -161,7 +157,7 @@ impl CollectableBatchMode for TimeInterval { }; job.take_aggregation_parameter() }) - .collect::>(), + .collect(), _ => panic!("Unexpected task role {:?}", task.role()), }; @@ -173,17 +169,13 @@ impl CollectableBatchMode for TimeInterval { )); } - // Check that the batch query count is being consumed appropriately. - let max_batch_query_count: usize = task.max_batch_query_count().try_into()?; - let query_count = agg_params.len() - + if agg_params.contains(aggregation_param) { - 0 - } else { - 1 - }; - if query_count > max_batch_query_count { + // Check that the batch has not already been queried with a distinct aggregation parameter. + if agg_params + .iter() + .any(|agg_param| agg_param != aggregation_param) + { return Err(datastore::Error::User( - Error::BatchQueriedTooManyTimes(*task.id(), query_count as u64).into(), + Error::BatchQueriedMultipleTimes(*task.id()).into(), )); } Ok(()) @@ -206,39 +198,32 @@ impl CollectableBatchMode for LeaderSelected { where A::AggregationParam: Send + Sync + Eq + Hash, { - // Check how distinct aggregation parameters appear in rows in the relevant table with an - // intersecting batch interval. Each distinct aggregation parameter consumes one unit of - // query count. - // - // https://www.ietf.org/archive/id/draft-ietf-ppm-dap-05.html#section-4.6.6 - let agg_params = match task.role() { + // Compute the aggregation parameters that have already been collected for. + let agg_params: Vec<_> = match task.role() { Role::Leader => tx .get_collection_jobs_by_batch_id::(vdaf, task.id(), batch_id) .await? .into_iter() .map(|job| job.take_aggregation_parameter()) - .collect::>(), + .collect(), Role::Helper => tx .get_aggregate_share_jobs_by_batch_id::(vdaf, task.id(), batch_id) .await? .into_iter() .map(|job| job.take_aggregation_parameter()) - .collect::>(), + .collect(), _ => panic!("Unexpected task role {:?}", task.role()), }; - let max_batch_query_count: usize = task.max_batch_query_count().try_into()?; - let query_count = agg_params.len() - + if agg_params.contains(aggregation_param) { - 0 - } else { - 1 - }; - if query_count > max_batch_query_count { + // Check that the batch has not already been queried with a distinct aggregation parameter. + if agg_params + .iter() + .any(|agg_param| agg_param != aggregation_param) + { return Err(datastore::Error::User( - Error::BatchQueriedTooManyTimes(*task.id(), query_count as u64).into(), + Error::BatchQueriedMultipleTimes(*task.id()).into(), )); } Ok(()) diff --git a/aggregator/src/aggregator/collection_job_driver.rs b/aggregator/src/aggregator/collection_job_driver.rs index f82f0bf3c..e4a90c55f 100644 --- a/aggregator/src/aggregator/collection_job_driver.rs +++ b/aggregator/src/aggregator/collection_job_driver.rs @@ -1246,7 +1246,7 @@ mod tests { .match_body(leader_request.get_encoded().unwrap()) .with_status(500) .with_header("Content-Type", "application/problem+json") - .with_body("{\"type\": \"urn:ietf:params:ppm:dap:error:batchQueriedTooManyTimes\"}") + .with_body("{\"type\": \"urn:ietf:params:ppm:dap:error:batchQueriedMultipleTimes\"}") .create_async() .await; @@ -1257,7 +1257,7 @@ mod tests { assert_matches!( error, Error::Http(error_response) => { - assert_matches!(error_response.dap_problem_type(), Some(DapProblemType::BatchQueriedTooManyTimes)); + assert_matches!(error_response.dap_problem_type(), Some(DapProblemType::BatchQueriedMultipleTimes)); assert_eq!(error_response.status(), StatusCode::INTERNAL_SERVER_ERROR); } ); diff --git a/aggregator/src/aggregator/collection_job_tests.rs b/aggregator/src/aggregator/collection_job_tests.rs index 394a246cc..b400545c2 100644 --- a/aggregator/src/aggregator/collection_job_tests.rs +++ b/aggregator/src/aggregator/collection_job_tests.rs @@ -29,7 +29,7 @@ use janus_core::{ use janus_messages::{ batch_mode::{BatchMode as BatchModeTrait, LeaderSelected, TimeInterval}, AggregateShareAad, AggregationJobStep, BatchId, BatchSelector, Collection, CollectionJobId, - CollectionReq, Interval, LeaderSelectedQuery, Query, Role, Time, + CollectionReq, Interval, Query, Role, Time, }; use prio::{ codec::{Decode, Encode}, @@ -331,7 +331,7 @@ async fn collection_job_success_leader_selected() { let helper_aggregate_share = dummy::AggregateShare(1); let aggregation_param = dummy::AggregationParam::default(); let request = CollectionReq::new( - Query::new_leader_selected(LeaderSelectedQuery::CurrentBatch), + Query::new_leader_selected(), aggregation_param.get_encoded().unwrap(), ); @@ -526,9 +526,9 @@ async fn collection_job_put_idempotence_time_interval() { #[tokio::test] async fn collection_job_put_idempotence_time_interval_varied_collection_id() { // This test sends repeated, identical collection requests with differing collection job IDs and - // validates that they are accepted. They should be accepted because calculation of the query - // count for max_batch_query_count testing is based on the number of distinct aggregation - // parameters that the batch has been collected against. + // validates that they are accepted. They should be accepted because the check for repeated + // collection should allow a batch to be repeatedly collected as long as it uses the same + // aggregation parameter each time. let test_case = setup_collection_job_test_case(Role::Leader, BatchMode::TimeInterval).await; test_case @@ -585,60 +585,6 @@ async fn collection_job_put_idempotence_time_interval_varied_collection_id() { .unwrap(); } -#[tokio::test] -async fn collection_job_put_idempotence_leader_selected_varied_collection_id() { - // This test sends repeated, identical collection requests with differing collection job IDs and - // validates that they are accepted. They should be accepted because calculation of the query - // count for max_batch_query_count testing is based on the number of distinct aggregation - // parameters that the batch has been collected against. - - let (test_case, batch_id, _, _) = - setup_leader_selected_current_batch_collection_job_test_case().await; - - let collection_job_ids = HashSet::from(random::<[CollectionJobId; 2]>()); - let request = CollectionReq::new( - Query::new_leader_selected(LeaderSelectedQuery::ByBatchId { batch_id }), - dummy::AggregationParam::default().get_encoded().unwrap(), - ); - - for collection_job_id in &collection_job_ids { - let response = test_case - .put_collection_job(collection_job_id, &request) - .await; - assert_eq!(response.status(), Some(Status::Created)); - } - - test_case - .datastore - .run_unnamed_tx(|tx| { - let task_id = *test_case.task.id(); - let collection_job_ids = collection_job_ids.clone(); - - Box::pin(async move { - let collection_jobs = tx - .get_collection_jobs_for_task::<0, LeaderSelected, dummy::Vdaf>( - &dummy::Vdaf::new(1), - &task_id, - ) - .await - .unwrap(); - - assert_eq!(collection_jobs.len(), 2); - assert_eq!( - collection_jobs - .into_iter() - .map(|job| *job.id()) - .collect::>(), - collection_job_ids - ); - - Ok(()) - }) - }) - .await - .unwrap(); -} - #[tokio::test] async fn collection_job_put_idempotence_time_interval_mutate_time_interval() { let test_case = setup_collection_job_test_case(Role::Leader, BatchMode::TimeInterval).await; @@ -722,13 +668,13 @@ async fn collection_job_put_idempotence_time_interval_mutate_aggregation_param() } #[tokio::test] -async fn collection_job_put_idempotence_leader_selected_current_batch() { +async fn collection_job_put_idempotence_leader_selected() { let (test_case, batch_id_1, batch_id_2, _) = setup_leader_selected_current_batch_collection_job_test_case().await; let collection_job_id = random(); let request = CollectionReq::new( - Query::new_leader_selected(LeaderSelectedQuery::CurrentBatch), + Query::new_leader_selected(), dummy::AggregationParam(0).get_encoded().unwrap(), ); let mut seen_batch_id = None; @@ -774,12 +720,12 @@ async fn collection_job_put_idempotence_leader_selected_current_batch() { } #[tokio::test] -async fn collection_job_put_idempotence_leader_selected_current_batch_mutate_aggregation_param() { +async fn collection_job_put_idempotence_leader_selected_mutate_aggregation_param() { let (test_case, _, _, _) = setup_leader_selected_current_batch_collection_job_test_case().await; let collection_job_id = random(); let request = CollectionReq::new( - Query::new_leader_selected(LeaderSelectedQuery::CurrentBatch), + Query::new_leader_selected(), dummy::AggregationParam(0).get_encoded().unwrap(), ); @@ -790,7 +736,7 @@ async fn collection_job_put_idempotence_leader_selected_current_batch_mutate_agg assert_eq!(response.status(), Some(Status::Created)); let mutated_request = CollectionReq::new( - Query::new_leader_selected(LeaderSelectedQuery::CurrentBatch), + Query::new_leader_selected(), dummy::AggregationParam(1).get_encoded().unwrap(), ); @@ -801,14 +747,14 @@ async fn collection_job_put_idempotence_leader_selected_current_batch_mutate_agg } #[tokio::test] -async fn collection_job_put_idempotence_leader_selected_current_batch_no_extra_reports() { +async fn collection_job_put_idempotence_leader_selected_no_extra_reports() { let (test_case, _batch_id_1, _batch_id_2, _) = setup_leader_selected_current_batch_collection_job_test_case().await; let collection_job_id_1 = random(); let collection_job_id_2 = random(); - let request = Arc::new(CollectionReq::new( - Query::new_leader_selected(LeaderSelectedQuery::CurrentBatch), + let request: Arc> = Arc::new(CollectionReq::new( + Query::new_leader_selected(), dummy::AggregationParam(0).get_encoded().unwrap(), )); @@ -843,120 +789,3 @@ async fn collection_job_put_idempotence_leader_selected_current_batch_no_extra_r .await; assert_eq!(response.status(), Some(Status::Created)); } - -#[tokio::test] -async fn collection_job_put_idempotence_leader_selected_by_batch_id() { - let test_case = setup_collection_job_test_case( - Role::Leader, - BatchMode::LeaderSelected { - max_batch_size: Some(10), - batch_time_window_size: None, - }, - ) - .await; - let batch_id = test_case - .setup_leader_selected_batch(test_case.clock.now(), 1) - .await; - - let collection_job_id = random(); - - let request = CollectionReq::new( - Query::new_leader_selected(LeaderSelectedQuery::ByBatchId { batch_id }), - dummy::AggregationParam(0).get_encoded().unwrap(), - ); - - for _ in 0..2 { - let response = test_case - .put_collection_job(&collection_job_id, &request) - .await; - - assert_eq!(response.status(), Some(Status::Created)); - } -} - -#[tokio::test] -async fn collection_job_put_idempotence_leader_selected_by_batch_id_mutate_batch_id() { - let test_case = setup_collection_job_test_case( - Role::Leader, - BatchMode::LeaderSelected { - max_batch_size: Some(10), - batch_time_window_size: None, - }, - ) - .await; - let first_batch_id = test_case - .setup_leader_selected_batch(test_case.clock.now(), 1) - .await; - let second_batch_id = test_case - .setup_leader_selected_batch(test_case.clock.now(), 1) - .await; - - let collection_job_id = random(); - - let response = test_case - .put_collection_job( - &collection_job_id, - &CollectionReq::new( - Query::new_leader_selected(LeaderSelectedQuery::ByBatchId { - batch_id: first_batch_id, - }), - dummy::AggregationParam(0).get_encoded().unwrap(), - ), - ) - .await; - assert_eq!(response.status(), Some(Status::Created)); - - let response = test_case - .put_collection_job( - &collection_job_id, - &CollectionReq::new( - Query::new_leader_selected(LeaderSelectedQuery::ByBatchId { - batch_id: second_batch_id, - }), - dummy::AggregationParam(0).get_encoded().unwrap(), - ), - ) - .await; - assert_eq!(response.status(), Some(Status::Conflict)); -} - -#[tokio::test] -async fn collection_job_put_idempotence_leader_selected_by_batch_id_mutate_aggregation_param() { - let test_case = setup_collection_job_test_case( - Role::Leader, - BatchMode::LeaderSelected { - max_batch_size: Some(10), - batch_time_window_size: None, - }, - ) - .await; - let batch_id = test_case - .setup_leader_selected_batch(test_case.clock.now(), 1) - .await; - - let collection_job_id = random(); - let first_aggregation_param = dummy::AggregationParam(0); - let second_aggregation_param = dummy::AggregationParam(1); - - let response = test_case - .put_collection_job( - &collection_job_id, - &CollectionReq::new( - Query::new_leader_selected(LeaderSelectedQuery::ByBatchId { batch_id }), - first_aggregation_param.get_encoded().unwrap(), - ), - ) - .await; - assert_eq!(response.status(), Some(Status::Created)); - - let response = test_case - .put_collection_job( - &collection_job_id, - &CollectionReq::new( - Query::new_leader_selected(LeaderSelectedQuery::ByBatchId { batch_id }), - second_aggregation_param.get_encoded().unwrap(), - ), - ) - .await; - assert_eq!(response.status(), Some(Status::Conflict)); -} diff --git a/aggregator/src/aggregator/error.rs b/aggregator/src/aggregator/error.rs index a16ac2d1d..c763aef5e 100644 --- a/aggregator/src/aggregator/error.rs +++ b/aggregator/src/aggregator/error.rs @@ -96,10 +96,10 @@ pub enum Error { /// sets of reports were aggregated. #[error("{0}")] BatchMismatch(Box), - /// Corresponds to `batchQueriedTooManyTimes` in DAP. A collect or aggregate share request was - /// rejected because the queries against a single batch exceed the task's `max_batch_query_count`. - #[error("task {0}: batch queried too many times ({1})")] - BatchQueriedTooManyTimes(TaskId, u64), + /// Corresponds to `batchQueriedMultipleTimes` in DAP. A collect or aggregate share request was + /// rejected because there was already a distinct query against the relevant batch. + #[error("task {0}: batch queried multiple times")] + BatchQueriedMultipleTimes(TaskId), /// A collect or aggregate share request was rejected because the batch overlaps with a /// previously collected one. #[error("task {0}: queried batch {1} overlaps with previously collected batch(es)")] @@ -300,7 +300,7 @@ impl Error { Error::InvalidBatchSize(_, _) => "invalid_batch_size", Error::Url(_) => "url", Error::BatchMismatch { .. } => "batch_mismatch", - Error::BatchQueriedTooManyTimes(_, _) => "batch_queried_too_many_times", + Error::BatchQueriedMultipleTimes(_) => "batch_queried_multiple_times", Error::BatchOverlap(_, _) => "batch_overlap", Error::Hpke(_) => "hpke", Error::TaskParameters(_) => "task_parameters", diff --git a/aggregator/src/aggregator/garbage_collector.rs b/aggregator/src/aggregator/garbage_collector.rs index c0178170d..b67762b8c 100644 --- a/aggregator/src/aggregator/garbage_collector.rs +++ b/aggregator/src/aggregator/garbage_collector.rs @@ -192,8 +192,8 @@ mod tests { }; use janus_messages::{ batch_mode::{LeaderSelected, TimeInterval}, - AggregationJobStep, Duration, HpkeCiphertext, HpkeConfigId, Interval, LeaderSelectedQuery, - Query, ReportIdChecksum, ReportMetadata, ReportShare, Role, Time, + AggregationJobStep, Duration, HpkeCiphertext, HpkeConfigId, Interval, Query, + ReportIdChecksum, ReportMetadata, ReportShare, Role, Time, }; use prio::vdaf::dummy; use rand::random; @@ -608,7 +608,7 @@ mod tests { tx.put_collection_job(&CollectionJob::<0, LeaderSelected, dummy::Vdaf>::new( *task.id(), random(), - Query::new_leader_selected(LeaderSelectedQuery::CurrentBatch), + Query::new_leader_selected(), dummy::AggregationParam(0), batch_id, CollectionJobState::Start, diff --git a/aggregator/src/aggregator/http_handlers.rs b/aggregator/src/aggregator/http_handlers.rs index cae9a4e83..0ffb389a7 100644 --- a/aggregator/src/aggregator/http_handlers.rs +++ b/aggregator/src/aggregator/http_handlers.rs @@ -131,8 +131,8 @@ async fn run_error_handler(error: &Error, mut conn: Conn) -> Conn { .with_task_id(&inner.task_id) .with_detail(&inner.to_string()), ), - Error::BatchQueriedTooManyTimes(task_id, _) => conn.with_problem_document( - &ProblemDocument::new_dap(DapProblemType::BatchQueriedTooManyTimes) + Error::BatchQueriedMultipleTimes(task_id) => conn.with_problem_document( + &ProblemDocument::new_dap(DapProblemType::BatchQueriedMultipleTimes) .with_task_id(task_id), ), Error::Hpke(_) diff --git a/aggregator/src/aggregator/http_handlers/tests/aggregate_share.rs b/aggregator/src/aggregator/http_handlers/tests/aggregate_share.rs index 9df3ac4cc..633efce55 100644 --- a/aggregator/src/aggregator/http_handlers/tests/aggregate_share.rs +++ b/aggregator/src/aggregator/http_handlers/tests/aggregate_share.rs @@ -160,7 +160,6 @@ async fn aggregate_share_request() { } = HttpHandlerTest::new().await; let task = TaskBuilder::new(BatchMode::TimeInterval, VdafInstance::Fake { rounds: 1 }) - .with_max_batch_query_count(1) .with_time_precision(Duration::from_seconds(500)) .with_min_batch_size(10) .build(); @@ -583,8 +582,8 @@ async fn aggregate_share_request() { take_problem_details(&mut test_conn).await, json!({ "status": Status::BadRequest as u16, - "type": "urn:ietf:params:ppm:dap:error:batchQueriedTooManyTimes", - "title": "The batch described by the query has been queried too many times.", + "type": "urn:ietf:params:ppm:dap:error:batchQueriedMultipleTimes", + "title": "The batch described by the query has been queried already.", "taskid": format!("{}", task.id()), }) ); diff --git a/aggregator/src/aggregator/http_handlers/tests/collection_job.rs b/aggregator/src/aggregator/http_handlers/tests/collection_job.rs index 258ca162e..75458fe50 100644 --- a/aggregator/src/aggregator/http_handlers/tests/collection_job.rs +++ b/aggregator/src/aggregator/http_handlers/tests/collection_job.rs @@ -525,7 +525,7 @@ async fn collection_job_get_request_no_such_collection_job() { } #[tokio::test] -async fn collection_job_put_request_batch_queried_too_many_times() { +async fn collection_job_put_request_batch_queried_multiple_times() { let test_case = setup_collection_job_test_case(Role::Leader, BatchMode::TimeInterval).await; let interval = test_case .setup_time_interval_batch(Time::from_seconds_since_epoch(0)) @@ -555,8 +555,8 @@ async fn collection_job_put_request_batch_queried_too_many_times() { take_problem_details(&mut test_conn).await, json!({ "status": Status::BadRequest as u16, - "type": "urn:ietf:params:ppm:dap:error:batchQueriedTooManyTimes", - "title": "The batch described by the query has been queried too many times.", + "type": "urn:ietf:params:ppm:dap:error:batchQueriedMultipleTimes", + "title": "The batch described by the query has been queried already.", "taskid": format!("{}", test_case.task.id()), }) ); diff --git a/aggregator/src/aggregator/http_handlers/tests/helper_e2e.rs b/aggregator/src/aggregator/http_handlers/tests/helper_e2e.rs index 53f094435..f97fcb549 100644 --- a/aggregator/src/aggregator/http_handlers/tests/helper_e2e.rs +++ b/aggregator/src/aggregator/http_handlers/tests/helper_e2e.rs @@ -41,7 +41,6 @@ async fn helper_aggregation_report_share_replay() { VdafInstance::Fake { rounds: 1 }, ) .with_min_batch_size(1) - .with_max_batch_query_count(1) .build(); let vdaf = dummy::Vdaf::new(1); let agg_param = dummy::AggregationParam(0); diff --git a/aggregator/src/aggregator/problem_details.rs b/aggregator/src/aggregator/problem_details.rs index 1ba26d8d9..f5d7f5e36 100644 --- a/aggregator/src/aggregator/problem_details.rs +++ b/aggregator/src/aggregator/problem_details.rs @@ -163,7 +163,7 @@ mod tests { DapProblemType::ReportTooEarly, DapProblemType::BatchInvalid, DapProblemType::InvalidBatchSize, - DapProblemType::BatchQueriedTooManyTimes, + DapProblemType::BatchQueriedMultipleTimes, DapProblemType::BatchMismatch, DapProblemType::UnauthorizedRequest, DapProblemType::BatchOverlap, @@ -297,8 +297,8 @@ mod tests { Some(DapProblemType::BatchMismatch), ), TestCase::new( - Box::new(|| Error::BatchQueriedTooManyTimes(random(), 99)), - Some(DapProblemType::BatchQueriedTooManyTimes), + Box::new(|| Error::BatchQueriedMultipleTimes(random())), + Some(DapProblemType::BatchQueriedMultipleTimes), ), ] .into_iter() diff --git a/aggregator/src/aggregator/taskprov_tests.rs b/aggregator/src/aggregator/taskprov_tests.rs index 4148eea9f..a98bdfbec 100644 --- a/aggregator/src/aggregator/taskprov_tests.rs +++ b/aggregator/src/aggregator/taskprov_tests.rs @@ -168,7 +168,6 @@ where .unwrap(); let time_precision = Duration::from_seconds(1); - let max_batch_query_count = 1; let min_batch_size = 1; let max_batch_size = 1; let task_expiration = clock.now().add(&Duration::from_hours(24).unwrap()).unwrap(); @@ -178,7 +177,6 @@ where "https://helper.example.com/".as_bytes().try_into().unwrap(), QueryConfig::new( time_precision, - max_batch_query_count, min_batch_size, TaskprovQuery::LeaderSelected { max_batch_size }, ), @@ -204,7 +202,6 @@ where .with_leader_aggregator_endpoint(Url::parse("https://leader.example.com/").unwrap()) .with_helper_aggregator_endpoint(Url::parse("https://helper.example.com/").unwrap()) .with_vdaf_verify_key(vdaf_verify_key) - .with_max_batch_query_count(max_batch_query_count as u64) .with_task_expiration(Some(task_expiration)) .with_report_expiry_age(peer_aggregator.report_expiry_age().copied()) .with_min_batch_size(min_batch_size as u64) @@ -664,7 +661,6 @@ async fn taskprov_opt_out_mismatched_task_id() { QueryConfig::new( Duration::from_seconds(1), 100, - 100, TaskprovQuery::LeaderSelected { max_batch_size: 100, }, @@ -744,7 +740,6 @@ async fn taskprov_opt_out_peer_aggregator_wrong_role() { QueryConfig::new( Duration::from_seconds(1), 100, - 100, TaskprovQuery::LeaderSelected { max_batch_size: 100, }, @@ -825,7 +820,6 @@ async fn taskprov_opt_out_peer_aggregator_does_not_exist() { QueryConfig::new( Duration::from_seconds(1), 100, - 100, TaskprovQuery::LeaderSelected { max_batch_size: 100, }, diff --git a/aggregator/src/binaries/janus_cli.rs b/aggregator/src/binaries/janus_cli.rs index 502420d0a..253e0c4d4 100644 --- a/aggregator/src/binaries/janus_cli.rs +++ b/aggregator/src/binaries/janus_cli.rs @@ -1345,7 +1345,6 @@ mod tests { bits: 2 role: Leader vdaf_verify_key: - max_batch_query_count: 1 task_expiration: 9000000000 min_batch_size: 10 time_precision: 300 @@ -1369,7 +1368,6 @@ mod tests { bits: 2 role: Helper vdaf_verify_key: - max_batch_query_count: 1 task_expiration: 9000000000 min_batch_size: 10 time_precision: 300 diff --git a/aggregator_api/src/models.rs b/aggregator_api/src/models.rs index 8085164c5..749dcfc60 100644 --- a/aggregator_api/src/models.rs +++ b/aggregator_api/src/models.rs @@ -74,8 +74,6 @@ pub(crate) struct PostTaskReq { /// The VDAF verification key used for this DAP task, as Base64 encoded bytes. Task ID is /// derived from the verify key. pub(crate) vdaf_verify_key: String, - /// The maximum number of times a given batch may be collected. - pub(crate) max_batch_query_count: u64, /// The time after which the task is considered invalid. pub(crate) task_expiration: Option