use super::*;
impl Worker {
pub(super) fn scale_down(
&mut self,
def: &StackDef,
insts: &[Inst],
replicas: u32,
) -> Result<()> {
let extra: Vec<&Inst> = insts
.iter()
.filter(|i| i.slot > replicas || i.slot == 0)
.collect();
if extra.is_empty() {
return Ok(());
}
self.insts = insts.to_vec();
self.state = "updating".into();
self.message = Some(if replicas == 0 {
"stopping".into()
} else {
format!("scaling down to {replicas}")
});
self.publish_status(def);
for i in extra.iter().rev() {
self.log(&format!("scaling down: removing {}", i.name));
self.retire(&i.name)?;
self.publish_status(def);
}
Ok(())
}
}