Add response updating logic

This commit is contained in:
Mubelotix
2025-08-26 10:59:12 +02:00
parent b2a72b0363
commit 4290901dea
10 changed files with 233 additions and 85 deletions

View File

@ -99,7 +99,7 @@ async fn wait_for_health(
asset_folder: &str,
) -> anyhow::Result<()> {
for i in 0..100 {
let res = run_command(client.clone(), health_command(), assets, asset_folder).await;
let res = run_command(client, &health_command(), assets, asset_folder, false).await;
if res.is_ok() {
// check that this is actually the current Meilisearch instance that answered us
if let Some(exit_code) =

View File

@ -6,7 +6,7 @@ mod workload;
use crate::common::args::CommonArgs;
use crate::common::logs::setup_logs;
use crate::common::workload::Workload;
use std::path::PathBuf;
use std::{path::PathBuf, sync::Arc};
use anyhow::{bail, Context};
use clap::Parser;
@ -89,11 +89,11 @@ pub fn run(args: BenchDeriveArgs) -> anyhow::Result<()> {
None,
)?;
let meili_client = Client::new(
let meili_client = Arc::new(Client::new(
Some("http://127.0.0.1:7700".into()),
args.common.master_key.as_deref(),
Some(std::time::Duration::from_secs(args.common.tasks_queue_timeout_secs)),
)?;
)?);
// enter runtime

View File

@ -2,10 +2,11 @@ use std::collections::BTreeMap;
use std::fs::File;
use std::io::{Seek as _, Write as _};
use std::path::Path;
use std::sync::Arc;
use anyhow::{bail, Context as _};
use futures_util::TryStreamExt as _;
use serde::Deserialize;
use serde::{Deserialize, Serialize};
use serde_json::json;
use tokio::task::JoinHandle;
use uuid::Uuid;
@ -19,7 +20,7 @@ use crate::common::command::{run_commands, Command};
/// A bench workload.
/// Not to be confused with [a test workload](crate::test::workload::Workload).
#[derive(Deserialize)]
#[derive(Serialize, Deserialize)]
pub struct BenchWorkload {
pub name: String,
pub run_count: u16,
@ -35,7 +36,7 @@ pub struct BenchWorkload {
async fn run_workload_commands(
dashboard_client: &DashboardClient,
logs_client: &Client,
meili_client: &Client,
meili_client: &Arc<Client>,
workload_uuid: Uuid,
workload: &BenchWorkload,
args: &BenchDeriveArgs,
@ -43,9 +44,10 @@ async fn run_workload_commands(
) -> anyhow::Result<JoinHandle<anyhow::Result<File>>> {
let report_folder = &args.report_folder;
let workload_name = &workload.name;
let assets = Arc::new(workload.assets.clone());
let asset_folder = args.common.asset_folder.clone().leak();
run_commands(meili_client, &workload.precommands, &workload.assets, &args.common.asset_folder)
.await?;
run_commands(meili_client, &workload.precommands, &assets, asset_folder, false).await?;
std::fs::create_dir_all(report_folder)
.with_context(|| format!("could not create report directory at {report_folder}"))?;
@ -55,8 +57,7 @@ async fn run_workload_commands(
let report_handle = start_report(logs_client, trace_filename, &workload.target).await?;
run_commands(meili_client, &workload.commands, &workload.assets, &args.common.asset_folder)
.await?;
run_commands(meili_client, &workload.commands, &assets, asset_folder, false).await?;
let processor =
stop_report(dashboard_client, logs_client, workload_uuid, report_filename, report_handle)
@ -71,7 +72,7 @@ pub async fn execute(
assets_client: &Client,
dashboard_client: &DashboardClient,
logs_client: &Client,
meili_client: &Client,
meili_client: &Arc<Client>,
invocation_uuid: Uuid,
master_key: Option<&str>,
workload: BenchWorkload,
@ -119,7 +120,7 @@ pub async fn execute(
async fn execute_run(
dashboard_client: &DashboardClient,
logs_client: &Client,
meili_client: &Client,
meili_client: &Arc<Client>,
workload_uuid: Uuid,
master_key: Option<&str>,
workload: &BenchWorkload,