diff --git a/crates/xtask/src/bench/meili_process.rs b/crates/xtask/src/bench/meili_process.rs index 4b308a484..14c7e2e47 100644 --- a/crates/xtask/src/bench/meili_process.rs +++ b/crates/xtask/src/bench/meili_process.rs @@ -8,7 +8,7 @@ use tokio::time; use super::workload::BenchWorkload; use crate::common::assets::Asset; use crate::common::client::Client; -use crate::common::command::{run as run_command, Command, SyncMode}; +use crate::common::command::{health_command, run as run_command}; pub async fn kill(mut meilisearch: tokio::process::Child) { let Some(id) = meilisearch.id() else { return }; @@ -123,15 +123,6 @@ async fn wait_for_health( bail!("meilisearch is not responding") } -fn health_command() -> Command { - Command { - route: "/health".into(), - method: crate::common::client::Method::Get, - body: Default::default(), - synchronous: SyncMode::WaitForResponse, - } -} - pub fn delete_db() { let _ = std::fs::remove_dir_all("./_xtask_benchmark.ms"); } diff --git a/crates/xtask/src/bench/workload.rs b/crates/xtask/src/bench/workload.rs index 8c7254a83..9b9d3033c 100644 --- a/crates/xtask/src/bench/workload.rs +++ b/crates/xtask/src/bench/workload.rs @@ -15,7 +15,7 @@ use super::BenchDeriveArgs; use crate::bench::meili_process; use crate::common::assets::{self, Asset}; use crate::common::client::Client; -use crate::common::command::{run_batch as run_command_batch, Command, SyncMode}; +use crate::common::command::{run_commands, Command}; /// A bench workload. /// Not to be confused with [a test workload](crate::test::workload::Workload). @@ -32,7 +32,7 @@ pub struct BenchWorkload { pub commands: Vec, } -async fn run_commands( +async fn run_workload_commands( dashboard_client: &DashboardClient, logs_client: &Client, meili_client: &Client, @@ -44,13 +44,8 @@ async fn run_commands( let report_folder = &args.report_folder; let workload_name = &workload.name; - for batch in workload - .precommands - .as_slice() - .split_inclusive(|command| !matches!(command.synchronous, SyncMode::DontWait)) - { - run_command_batch(meili_client, batch, &workload.assets, &args.common.asset_folder).await?; - } + run_commands(meili_client, &workload.precommands, &workload.assets, &args.common.asset_folder) + .await?; std::fs::create_dir_all(report_folder) .with_context(|| format!("could not create report directory at {report_folder}"))?; @@ -60,13 +55,8 @@ async fn run_commands( let report_handle = start_report(logs_client, trace_filename, &workload.target).await?; - for batch in workload - .commands - .as_slice() - .split_inclusive(|command| !matches!(command.synchronous, SyncMode::DontWait)) - { - run_command_batch(meili_client, batch, &workload.assets, &args.common.asset_folder).await?; - } + run_commands(meili_client, &workload.commands, &workload.assets, &args.common.asset_folder) + .await?; let processor = stop_report(dashboard_client, logs_client, workload_uuid, report_filename, report_handle) @@ -165,7 +155,7 @@ async fn execute_run( ) .await?; - let processor = run_commands( + let processor = run_workload_commands( dashboard_client, logs_client, meili_client, diff --git a/crates/xtask/src/common/command.rs b/crates/xtask/src/common/command.rs index 2b960ee81..a99f3b75e 100644 --- a/crates/xtask/src/common/command.rs +++ b/crates/xtask/src/common/command.rs @@ -15,7 +15,7 @@ pub struct Command { #[serde(default)] pub body: Body, #[serde(default)] - pub synchronous: SyncMode, + synchronous: SyncMode, } #[derive(Default, Clone, Deserialize)] @@ -64,14 +64,14 @@ impl Display for Command { } #[derive(Default, Debug, Clone, Copy, Deserialize)] -pub enum SyncMode { +enum SyncMode { DontWait, #[default] WaitForResponse, WaitForTask, } -pub async fn run_batch( +async fn run_batch( client: &Client, batch: &[Command], assets: &BTreeMap, @@ -192,3 +192,27 @@ pub async fn run( Ok(()) } + +pub async fn run_commands( + client: &Client, + commands: &[Command], + assets: &BTreeMap, + asset_folder: &str, +) -> anyhow::Result<()> { + for batch in + commands.split_inclusive(|command| !matches!(command.synchronous, SyncMode::DontWait)) + { + run_batch(client, batch, assets, asset_folder).await?; + } + + Ok(()) +} + +pub fn health_command() -> Command { + Command { + route: "/health".into(), + method: crate::common::client::Method::Get, + body: Default::default(), + synchronous: SyncMode::WaitForResponse, + } +} diff --git a/crates/xtask/src/test/mod.rs b/crates/xtask/src/test/mod.rs index 67c9a972d..4a2c4fb52 100644 --- a/crates/xtask/src/test/mod.rs +++ b/crates/xtask/src/test/mod.rs @@ -1,9 +1,6 @@ +use crate::common::{args::CommonArgs, client::Client, logs::setup_logs}; use cargo_metadata::semver::Version; use clap::Parser; -use serde::Deserialize; - -use crate::common::command::Command; -use crate::common::{args::CommonArgs, client::Client, logs::setup_logs}; mod workload; @@ -19,13 +16,6 @@ pub struct TestDeriveArgs { initial_version: Version, } -#[derive(Deserialize)] -#[serde(untagged)] -pub enum CommandOrUpgrade { - Command(Command), - Upgrade { upgrade: Version }, -} - pub fn run(args: TestDeriveArgs) -> anyhow::Result<()> { setup_logs(&args.common.log_filter)?; diff --git a/crates/xtask/src/test/workload.rs b/crates/xtask/src/test/workload.rs index 3c88e1af4..7a80cdaa2 100644 --- a/crates/xtask/src/test/workload.rs +++ b/crates/xtask/src/test/workload.rs @@ -1,7 +1,15 @@ +use cargo_metadata::semver::Version; use serde::Deserialize; use std::collections::BTreeMap; -use crate::common::assets::Asset; +use crate::common::{assets::Asset, command::Command}; + +#[derive(Deserialize)] +#[serde(untagged)] +pub enum CommandOrUpgrade { + Command(Command), + Upgrade { upgrade: Version }, +} /// A test workload. /// Not to be confused with [a bench workload](crate::bench::workload::Workload). @@ -9,4 +17,5 @@ use crate::common::assets::Asset; pub struct TestWorkload { pub name: String, pub assets: BTreeMap, + pub commands: Vec, }