refactor(#2754): make the container weights Option, not a 0 sentinel
Encoding "not configured" as weight 0 worked (the writer omitted the line) but the type lied: 0 is not a legal cgroup v2 weight, and every reader had to know the sentinel. Use Option<u32> end to end instead — wire type, priv_client, HiveEnv, drop-in writer — so "unset" is a state of the type rather than a magic value. The nix options become nullOr, keeping their default of 80; null now expresses "leave the setting out of the drop-in entirely" declaratively, which is the useful shape on a host whose IO scheduler ignores io.weight anyway. Backward compat is unchanged: the fields stay #[serde(default)], so a request from an older hive-c0re deserialises to None and reproduces the pre-weights drop-in byte for byte. The test that pins that now passes None instead of 0.
This commit is contained in:
parent
e407fa93df
commit
5d3f2af75e
7 changed files with 59 additions and 51 deletions
|
|
@ -197,11 +197,15 @@ async fn main() -> Result<()> {
|
|||
if let Some(v) = agent_memory_max {
|
||||
sc.env.agent_memory_max = v;
|
||||
}
|
||||
// Passing the flag sets a weight; omitting it keeps whatever the
|
||||
// config file says (including `null` = don't emit the setting).
|
||||
// There's deliberately no flag spelling for "clear it" — that's
|
||||
// what the nix option's `null` is for.
|
||||
if let Some(v) = agent_cpu_weight {
|
||||
sc.env.agent_cpu_weight = v;
|
||||
sc.env.agent_cpu_weight = Some(v);
|
||||
}
|
||||
if let Some(v) = agent_io_weight {
|
||||
sc.env.agent_io_weight = v;
|
||||
sc.env.agent_io_weight = Some(v);
|
||||
}
|
||||
if let Some(v) = model_prices {
|
||||
sc.model_prices =
|
||||
|
|
|
|||
Loading…
Reference in a new issue