[next-0.10] admin api: fix logic in get cluster status

This commit is contained in:
Alex 2024-03-27 13:55:49 +01:00
parent 4eba32f29f
commit 25c196f34d
Signed by untrusted user: lx
GPG key ID: 0E496D15096376BE

View file

@ -70,18 +70,21 @@ pub async fn handle_get_cluster_status(garage: &Arc<Garage>) -> Result<Response<
); );
} }
Some(n) => { Some(n) => {
if n.role.is_none() {
n.role = Some(role); n.role = Some(role);
} }
} }
} }
} }
}
for ver in layout.versions().iter().rev().skip(1) { for ver in layout.versions().iter().rev().skip(1) {
for (id, _, role) in ver.roles.items().iter() { for (id, _, role) in ver.roles.items().iter() {
if let layout::NodeRoleV(Some(r)) = role { if let layout::NodeRoleV(Some(r)) = role {
if !nodes.contains_key(id) && r.capacity.is_some() { if r.capacity.is_some() {
if let Some(n) = nodes.get_mut(id) {
if n.role.is_none() {
n.draining = true;
}
} else {
nodes.insert( nodes.insert(
*id, *id,
NodeResp { NodeResp {
@ -94,6 +97,7 @@ pub async fn handle_get_cluster_status(garage: &Arc<Garage>) -> Result<Response<
} }
} }
} }
}
let mut nodes = nodes.into_values().collect::<Vec<_>>(); let mut nodes = nodes.into_values().collect::<Vec<_>>();
nodes.sort_by(|x, y| x.id.cmp(&y.id)); nodes.sort_by(|x, y| x.id.cmp(&y.id));