4624: Add "precommands" to benchmark r=dureuill a=dureuill

# Pull Request

## Related issue
Helps for https://github.com/meilisearch/meilisearch/issues/4493

## What does this PR do?
- Add support for precommands for cargo xtask bench
- update benchmark docs
- update workload files


Co-authored-by: Louis Dureuil <louis@meilisearch.com>
This commit is contained in:
meili-bors[bot] 2024-05-13 08:27:56 +00:00 committed by GitHub
commit 76bb6d565c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 71 additions and 24 deletions

View File

@ -187,8 +187,8 @@ They are JSON files with the following structure (comments are not actually supp
},
// Core of the workload.
// A list of commands to run sequentially.
// A command is a request to the Meilisearch instance that is executed while the profiling runs.
"commands": [
// Optional: A precommand is a request to the Meilisearch instance that is executed before the profiling runs.
"precommands": [
{
// Meilisearch route to call. `http://localhost:7700/` will be prepended.
"route": "indexes/movies/settings",
@ -224,8 +224,11 @@ They are JSON files with the following structure (comments are not actually supp
// - DontWait: run the next command without waiting the response to this one.
// - WaitForResponse: run the next command as soon as the response from the server is received.
// - WaitForTask: run the next command once **all** the Meilisearch tasks created up to now have finished processing.
"synchronous": "DontWait"
},
"synchronous": "WaitForTask"
}
],
// A command is a request to the Meilisearch instance that is executed while the profiling runs.
"commands": [
{
"route": "indexes/movies/documents",
"method": "POST",

View File

@ -54,7 +54,7 @@
"sha256": "27e25efd0b68b159b8b21350d9af76938710cb29ce0393fa71b41c4f3c630ffe"
}
},
"commands": [
"precommands": [
{
"route": "indexes/movies/settings",
"method": "PATCH",
@ -78,8 +78,10 @@
]
}
},
"synchronous": "DontWait"
},
"synchronous": "WaitForTask"
}
],
"commands": [
{
"route": "indexes/movies/documents",
"method": "POST",

View File

@ -11,7 +11,7 @@
"sha256": "5b6e4cb660bc20327776e8a33ea197b43d9ec84856710ead1cc87ab24df77de1"
}
},
"commands": [
"precommands": [
{
"route": "indexes/movies/settings",
"method": "PATCH",
@ -30,8 +30,10 @@
]
}
},
"synchronous": "DontWait"
},
"synchronous": "WaitForTask"
}
],
"commands": [
{
"route": "indexes/movies/documents",
"method": "POST",

View File

@ -11,7 +11,7 @@
"sha256": "d215e395e4240f12f03b8f1f68901eac82d9e7ded5b462cbf4a6b8efde76c6c6"
}
},
"commands": [
"precommands": [
{
"route": "experimental-features",
"method": "PATCH",
@ -55,7 +55,9 @@
}
},
"synchronous": "WaitForTask"
},
}
],
"commands": [
{
"route": "indexes/movies/documents",
"method": "POST",

View File

@ -11,7 +11,7 @@
"sha256": "d215e395e4240f12f03b8f1f68901eac82d9e7ded5b462cbf4a6b8efde76c6c6"
}
},
"commands": [
"precommands": [
{
"route": "experimental-features",
"method": "PATCH",
@ -49,7 +49,9 @@
"asset": "movies-100.json"
},
"synchronous": "WaitForTask"
},
}
],
"commands": [
{
"route": "indexes/movies/settings",
"method": "PATCH",

View File

@ -11,7 +11,7 @@
"sha256": "28c359a0956958af0ba204ec11bad3045a0864a10b4838914fea25a01724f84b"
}
},
"commands": [
"precommands": [
{
"route": "indexes/peoples/settings",
"method": "PATCH",
@ -59,7 +59,9 @@
"asset": "150k-people.json"
},
"synchronous": "WaitForTask"
},
}
],
"commands": [
{
"route": "indexes/peoples/settings",
"method": "PATCH",

View File

@ -11,7 +11,7 @@
"sha256": "28c359a0956958af0ba204ec11bad3045a0864a10b4838914fea25a01724f84b"
}
},
"commands": [
"precommands": [
{
"route": "indexes/peoples/settings",
"method": "PATCH",
@ -61,7 +61,9 @@
"asset": "150k-people.json"
},
"synchronous": "WaitForTask"
},
}
],
"commands": [
{
"route": "indexes/peoples/settings",
"method": "PATCH",

View File

@ -11,7 +11,7 @@
"sha256": "28c359a0956958af0ba204ec11bad3045a0864a10b4838914fea25a01724f84b"
}
},
"commands": [
"precommands": [
{
"route": "indexes/peoples/settings",
"method": "PATCH",
@ -61,7 +61,9 @@
"asset": "150k-people.json"
},
"synchronous": "WaitForTask"
},
}
],
"commands": [
{
"route": "indexes/peoples/settings",
"method": "PATCH",

View File

@ -11,7 +11,7 @@
"sha256": "28c359a0956958af0ba204ec11bad3045a0864a10b4838914fea25a01724f84b"
}
},
"commands": [
"precommands": [
{
"route": "indexes/peoples/settings",
"method": "PATCH",
@ -62,14 +62,18 @@
"asset": "150k-people.json"
},
"synchronous": "WaitForTask"
},
}
],
"commands": [
{
"route": "indexes/peoples/settings",
"method": "PATCH",
"body": {
"inline": {
"typoTolerance": {
"disableOnAttributes": ["featured_job_organization_name"]
"disableOnAttributes": [
"featured_job_organization_name"
]
}
}
},
@ -93,7 +97,22 @@
"body": {
"inline": {
"typoTolerance": {
"disableOnWords": ["Ben","Elowitz","Kevin","Flaherty", "Ron", "Dustin", "Owen", "Chris", "Mark", "Matt", "Peter", "Van", "Head", "of"]
"disableOnWords": [
"Ben",
"Elowitz",
"Kevin",
"Flaherty",
"Ron",
"Dustin",
"Owen",
"Chris",
"Mark",
"Matt",
"Peter",
"Van",
"Head",
"of"
]
}
}
},

View File

@ -22,6 +22,8 @@ pub struct Workload {
pub run_count: u16,
pub extra_cli_args: Vec<String>,
pub assets: BTreeMap<String, Asset>,
#[serde(default)]
pub precommands: Vec<super::command::Command>,
pub commands: Vec<super::command::Command>,
}
@ -37,6 +39,15 @@ 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))
{
super::command::run_batch(meili_client, batch, &workload.assets, &args.asset_folder)
.await?;
}
std::fs::create_dir_all(report_folder)
.with_context(|| format!("could not create report directory at {report_folder}"))?;