1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
//! The `dumps` module allows the creation of database dumps.
//!
//! - Dumps are `.dump` files that can be used to launch Meilisearch.
//!
//! - Dumps are compatible between Meilisearch versions.
//!
//! - Creating a dump is also referred to as exporting it, whereas launching Meilisearch with a dump is referred to as importing it.
//!
//! - During a [dump export](Client::create_dump), all [indexes](crate::indexes::Index) of the current instance are exported—together with their documents and settings—and saved as a single `.dump` file.
//!
//! - During a dump import, all indexes contained in the indicated `.dump` file are imported along with their associated documents and [settings](crate::settings::Settings).
//! Any existing [index](crate::indexes::Index) with the same uid as an index in the dump file will be overwritten.
//!
//! - Dump imports are [performed at launch](https://www.meilisearch.com/docs/learn/configuration/instance_options#import-dump) using an option.
//!
//! # Example
//!
//! ```
//! # use meilisearch_sdk::{client::*, errors::*, dumps::*, dumps::*, task_info::*, tasks::*};
//! # use futures_await_test::async_test;
//! # use std::{thread::sleep, time::Duration};
//! # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async {
//! #
//! # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
//! # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
//! #
//! # let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap();
//!
//! // Create a dump
//! let task_info = client.create_dump().await.unwrap();
//! assert!(matches!(
//! task_info,
//! TaskInfo {
//! update_type: TaskType::DumpCreation { .. },
//! ..
//! }
//! ));
//! # });
//! ```
use crate::{client::Client, errors::Error, request::*, task_info::TaskInfo};
/// Dump related methods.
/// See the [dumps](crate::dumps) module.
impl<Http: HttpClient> Client<Http> {
/// Triggers a dump creation process.
///
/// Once the process is complete, a dump is created in the [dumps directory](https://www.meilisearch.com/docs/learn/configuration/instance_options#dump-directory).
/// If the dumps directory does not exist yet, it will be created.
///
/// # Example
///
/// ```
/// # use meilisearch_sdk::{client::*, errors::*, dumps::*, dumps::*, task_info::*, tasks::*};
/// # use futures_await_test::async_test;
/// # use std::{thread::sleep, time::Duration};
/// # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async {
/// #
/// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
/// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
/// #
/// # let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap();
/// #
/// let task_info = client.create_dump().await.unwrap();
///
/// assert!(matches!(
/// task_info,
/// TaskInfo {
/// update_type: TaskType::DumpCreation { .. },
/// ..
/// }
/// ));
/// # });
/// ```
pub async fn create_dump(&self) -> Result<TaskInfo, Error> {
self.http_client
.request::<(), (), TaskInfo>(
&format!("{}/dumps", self.host),
Method::Post {
query: (),
body: (),
},
202,
)
.await
}
}
/// Alias for [`create_dump`](Client::create_dump).
pub async fn create_dump<Http: HttpClient>(client: &Client<Http>) -> Result<TaskInfo, Error> {
client.create_dump().await
}
#[cfg(test)]
mod tests {
use super::*;
use crate::{client::*, tasks::*};
use meilisearch_test_macro::meilisearch_test;
use std::time::Duration;
#[meilisearch_test]
async fn test_dumps_success_creation(client: Client) -> Result<(), Error> {
let task = client
.create_dump()
.await?
.wait_for_completion(
&client,
Some(Duration::from_millis(1)),
Some(Duration::from_millis(6000)),
)
.await?;
assert!(matches!(task, Task::Succeeded { .. }));
Ok(())
}
#[meilisearch_test]
async fn test_dumps_correct_update_type(client: Client) -> Result<(), Error> {
let task_info = client.create_dump().await.unwrap();
assert!(matches!(
task_info,
TaskInfo {
update_type: TaskType::DumpCreation { .. },
..
}
));
Ok(())
}
}