use crate::enterprise::progress::{EnterpriseProgressCallback, poll_action};
use crate::error::Result;
use redis_enterprise::bdb::DatabaseUpgradeRequest;
use redis_enterprise::{Database, EnterpriseClient};
use std::time::Duration;
pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(600);
pub const DEFAULT_INTERVAL: Duration = Duration::from_secs(5);
pub async fn upgrade_database_and_wait(
client: &EnterpriseClient,
bdb_uid: u32,
request: &DatabaseUpgradeRequest,
timeout: Duration,
on_progress: Option<EnterpriseProgressCallback>,
) -> Result<Database> {
let action = client
.databases()
.upgrade_redis_version(bdb_uid, request.clone())
.await?;
poll_action(
client,
&action.action_uid,
timeout,
DEFAULT_INTERVAL,
on_progress,
)
.await?;
let db = client.databases().get(bdb_uid).await?;
Ok(db)
}
pub async fn upgrade_module_and_wait(
client: &EnterpriseClient,
bdb_uid: u32,
module_name: &str,
new_version: &str,
timeout: Duration,
on_progress: Option<EnterpriseProgressCallback>,
) -> Result<Database> {
let action = client
.databases()
.upgrade(bdb_uid, module_name, new_version)
.await?;
poll_action(
client,
&action.action_uid,
timeout,
DEFAULT_INTERVAL,
on_progress,
)
.await?;
let db = client.databases().get(bdb_uid).await?;
Ok(db)
}
pub async fn backup_database_and_wait(
client: &EnterpriseClient,
bdb_uid: u32,
timeout: Duration,
on_progress: Option<EnterpriseProgressCallback>,
) -> Result<()> {
let response = client.databases().backup(bdb_uid).await?;
if let Some(action_uid) = response.action_uid {
poll_action(client, &action_uid, timeout, DEFAULT_INTERVAL, on_progress).await?;
}
Ok(())
}
pub async fn import_database_and_wait(
client: &EnterpriseClient,
bdb_uid: u32,
import_location: &str,
flush: bool,
timeout: Duration,
on_progress: Option<EnterpriseProgressCallback>,
) -> Result<()> {
let response = client
.databases()
.import(bdb_uid, import_location, flush)
.await?;
if let Some(action_uid) = response.action_uid {
poll_action(client, &action_uid, timeout, DEFAULT_INTERVAL, on_progress).await?;
}
Ok(())
}
pub async fn flush_database_and_wait(
client: &EnterpriseClient,
bdb_uid: u32,
timeout: Duration,
on_progress: Option<EnterpriseProgressCallback>,
) -> Result<()> {
let response = client.databases().flush(bdb_uid).await?;
poll_action(
client,
&response.action_uid,
timeout,
DEFAULT_INTERVAL,
on_progress,
)
.await?;
Ok(())
}