Rename datacenters into zones (doc not yet updated)

This commit is contained in:
Alex Auvolat 2021-05-28 13:18:31 +02:00
parent b490ebc7f6
commit ddb2b29bfd
No known key found for this signature in database
GPG key ID: EDABF9711E244EB1
3 changed files with 22 additions and 22 deletions

View file

@ -18,6 +18,6 @@ garage status \
| grep UNCONFIGURED \
| grep -Po '^[0-9a-f]+' \
| while read id; do
garage node configure -d dc1 -c 1 $id
garage node configure -z dc1 -c 1 $id
done

View file

@ -72,9 +72,9 @@ pub struct ConfigureNodeOpt {
/// Node to configure (prefix of hexadecimal node id)
node_id: String,
/// Location (datacenter) of the node
#[structopt(short = "d", long = "datacenter")]
datacenter: Option<String>,
/// Location (zone or datacenter) of the node
#[structopt(short = "z", long = "zone")]
zone: Option<String>,
/// Capacity (in relative terms, use 1 to represent your smallest server)
#[structopt(short = "c", long = "capacity")]
@ -347,7 +347,7 @@ pub async fn cmd_status(
adv.state_info.hostname,
adv.addr,
cfg.tag,
cfg.datacenter,
cfg.zone,
cfg.capacity_string()
);
} else {
@ -374,7 +374,7 @@ pub async fn cmd_status(
adv.state_info.hostname,
adv.addr,
cfg.tag,
cfg.datacenter,
cfg.zone,
cfg.capacity_string(),
(now_msec() - adv.last_seen) / 1000,
);
@ -386,7 +386,7 @@ pub async fn cmd_status(
"{:?}\t{}\t{}\t{}\tnever seen",
id,
cfg.tag,
cfg.datacenter,
cfg.zone,
cfg.capacity_string(),
);
}
@ -467,9 +467,9 @@ pub async fn cmd_configure(
"Please specify a capacity with the -c flag, or set node explicitly as gateway with -g".into())),
};
NetworkConfigEntry {
datacenter: args
.datacenter
.expect("Please specifiy a datacenter with the -d flag"),
zone: args
.zone
.expect("Please specifiy a zone with the -z flag"),
capacity,
tag: args.tag.unwrap_or_default(),
}
@ -481,9 +481,9 @@ pub async fn cmd_configure(
_ => old.capacity,
};
NetworkConfigEntry {
datacenter: args
.datacenter
.unwrap_or_else(|| old.datacenter.to_string()),
zone: args
.zone
.unwrap_or_else(|| old.zone.to_string()),
capacity,
tag: args.tag.unwrap_or_else(|| old.tag.to_string()),
}

View file

@ -45,7 +45,7 @@ impl NetworkConfig {
pub struct NetworkConfigEntry {
/// Datacenter at which this entry belong. This infromation might be used to perform a better
/// geodistribution
pub datacenter: String,
pub zone: String,
/// The (relative) capacity of the node
/// If this is set to None, the node does not participate in storing data for the system
/// and is only active as an API gateway to other nodes
@ -109,13 +109,13 @@ impl Ring {
// Create a vector of partition indices (0 to 2**PARTITION_BITS-1)
let partitions_idx = (0usize..(1usize << PARTITION_BITS)).collect::<Vec<_>>();
let datacenters = config
let zones = config
.members
.iter()
.filter(|(_id, info)| info.capacity.is_some())
.map(|(_id, info)| info.datacenter.as_str())
.map(|(_id, info)| info.zone.as_str())
.collect::<HashSet<&str>>();
let n_datacenters = datacenters.len();
let n_zones = zones.len();
// Prepare ring
let mut partitions: Vec<Vec<(&Uuid, &NetworkConfigEntry)>> = partitions_idx
@ -174,13 +174,13 @@ impl Ring {
if partitions[qv].len() != rep {
continue;
}
let p_dcs = partitions[qv]
let p_zns = partitions[qv]
.iter()
.map(|(_id, info)| info.datacenter.as_str())
.map(|(_id, info)| info.zone.as_str())
.collect::<HashSet<&str>>();
if (p_dcs.len() < n_datacenters
&& !p_dcs.contains(&node_info.datacenter.as_str()))
|| (p_dcs.len() == n_datacenters
if (p_zns.len() < n_zones
&& !p_zns.contains(&node_info.zone.as_str()))
|| (p_zns.len() == n_zones
&& !partitions[qv].iter().any(|(id, _i)| id == node_id))
{
partitions[qv].push((node_id, node_info));