redis_enterprise/
cm_settings.rs

1//! Cluster Manager configuration
2//!
3//! ## Overview
4//! - Configure CM settings
5//! - Manage cluster-wide parameters
6//! - Query configuration status
7
8use crate::client::RestClient;
9use crate::error::Result;
10use serde::{Deserialize, Serialize};
11use serde_json::Value;
12
13/// Cluster Manager settings
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct CmSettings {
16    /// Port number for the Cluster Manager service
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub cm_port: Option<u16>,
19    /// Session timeout for Cluster Manager connections in seconds
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub cm_session_timeout: Option<u32>,
22    /// Enable automatic recovery of failed databases
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub auto_recovery: Option<bool>,
25    /// Enable automatic failover for high availability
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub auto_failover: Option<bool>,
28    /// Enable slave high availability for replica databases
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub slave_ha: Option<bool>,
31    /// Grace period in seconds before triggering slave high availability
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub slave_ha_grace_period: Option<u32>,
34    /// Maximum number of simultaneous backup operations allowed
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub max_simultaneous_backups: Option<u32>,
37
38    #[serde(flatten)]
39    pub extra: Value,
40}
41
42/// Cluster Manager settings handler
43pub struct CmSettingsHandler {
44    client: RestClient,
45}
46
47impl CmSettingsHandler {
48    pub fn new(client: RestClient) -> Self {
49        CmSettingsHandler { client }
50    }
51
52    /// Get Cluster Manager settings
53    pub async fn get(&self) -> Result<CmSettings> {
54        self.client.get("/v1/cm_settings").await
55    }
56
57    /// Update Cluster Manager settings
58    pub async fn update(&self, settings: CmSettings) -> Result<CmSettings> {
59        self.client.put("/v1/cm_settings", &settings).await
60    }
61
62    /// Reset Cluster Manager settings to defaults
63    pub async fn reset(&self) -> Result<()> {
64        self.client.delete("/v1/cm_settings").await
65    }
66}