aboutsummaryrefslogtreecommitdiff
path: root/src/garage/cli/layout.rs
diff options
context:
space:
mode:
authorMendes <mendes.oulamara@pm.me>2022-10-05 16:04:19 +0200
committerMendes <mendes.oulamara@pm.me>2022-10-05 16:04:19 +0200
commita951b6c45273e59b98f974937aebb8ada8816ab8 (patch)
treeda8f89d774929082936a947ae8d7462568ab6c4f /src/garage/cli/layout.rs
parentceac3713d6639f9170fc3b4475fae4a30b34483c (diff)
downloadgarage-a951b6c45273e59b98f974937aebb8ada8816ab8.tar.gz
garage-a951b6c45273e59b98f974937aebb8ada8816ab8.zip
Added a CLI command to update the parameters for the layout computation (for now, only the zone redundancy)
Diffstat (limited to 'src/garage/cli/layout.rs')
-rw-r--r--src/garage/cli/layout.rs35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs
index a5b838e7..6b86e46d 100644
--- a/src/garage/cli/layout.rs
+++ b/src/garage/cli/layout.rs
@@ -14,8 +14,8 @@ pub async fn cli_layout_command_dispatch(
rpc_host: NodeID,
) -> Result<(), Error> {
match cmd {
- LayoutOperation::Assign(configure_opt) => {
- cmd_assign_role(system_rpc_endpoint, rpc_host, configure_opt).await
+ LayoutOperation::Assign(assign_opt) => {
+ cmd_assign_role(system_rpc_endpoint, rpc_host, assign_opt).await
}
LayoutOperation::Remove(remove_opt) => {
cmd_remove_role(system_rpc_endpoint, rpc_host, remove_opt).await
@@ -27,6 +27,9 @@ pub async fn cli_layout_command_dispatch(
LayoutOperation::Revert(revert_opt) => {
cmd_revert_layout(system_rpc_endpoint, rpc_host, revert_opt).await
}
+ LayoutOperation::Config(config_opt) => {
+ cmd_config_layout(system_rpc_endpoint, rpc_host, config_opt).await
+ }
}
}
@@ -245,6 +248,34 @@ pub async fn cmd_revert_layout(
Ok(())
}
+pub async fn cmd_config_layout(
+ rpc_cli: &Endpoint<SystemRpc, ()>,
+ rpc_host: NodeID,
+ config_opt: ConfigLayoutOpt,
+) -> Result<(), Error> {
+ let mut layout = fetch_layout(rpc_cli, rpc_host).await?;
+
+ match config_opt.redundancy {
+ None => (),
+ Some(r) => {
+ if r > layout.replication_factor {
+ println!("The zone redundancy must be smaller or equal to the \
+ replication factor ({}).", layout.replication_factor);
+ }
+ else if r < 1 {
+ println!("The zone redundancy must be at least 1.");
+ }
+ else {
+ layout.parameters.update(LayoutParameters{ zone_redundancy: r });
+ println!("The new zone redundancy has been staged.");
+ }
+ }
+ }
+
+ send_layout(rpc_cli, rpc_host, layout).await?;
+ Ok(())
+}
+
// --- utility ---
pub async fn fetch_layout(