hive-c0re: address review on btrfs qgroup usage parsing
Select the level-0 (`0/<subvolid>`) leaf qgroup row explicitly instead of taking the last data line, so usage parsing is unambiguous even if an operator has assigned the subvolume to a higher-level aggregate qgroup. `btrfs qgroup show -f <path>` already scopes the listing to qgroups impacting the given path (excluding ancestral qgroups, per btrfs-qgroup-show(8)); selecting the `0/` leaf among them pins it to the subvolume's own automatic usage qgroup. Also: case-insensitive match on the stable "quota not enabled" error fragment (wording varies across btrfs-progs versions), `# Errors` doc sections on the three public priv_client quota functions, and precise doc comments on the `-f` flag semantics.
This commit is contained in:
parent
9ff55399e5
commit
681e993626
3 changed files with 36 additions and 11 deletions
|
|
@ -671,10 +671,12 @@ async fn ensure_btrfs_quota() -> Result<(String, String)> {
|
|||
Ok((String::new(), String::new()))
|
||||
}
|
||||
|
||||
/// `ReadSubvolumeUsage` — return an agent subvolume's qgroup row
|
||||
/// `ReadSubvolumeUsage` — return an agent subvolume's qgroup rows
|
||||
/// (`btrfs qgroup show -f --raw <…/agent_name>`) verbatim in stdout for
|
||||
/// hive-c0re to parse. `-f` filters to the subvolume the path lives in, so
|
||||
/// the output is the single relevant row. See the wire doc.
|
||||
/// hive-c0re to parse. `-f` lists the qgroups impacting the given path,
|
||||
/// excluding ancestral qgroups (per btrfs-qgroup-show(8)) — so it scopes
|
||||
/// to this subvolume and never mixes in other agents'. hive-c0re then
|
||||
/// selects the level-0 (`0/<subvolid>`) leaf row. See the wire doc.
|
||||
async fn read_subvolume_usage(agent_name: &str) -> Result<(String, String)> {
|
||||
let agent_root = PathBuf::from(AGENT_STATE_ROOT).join(agent_name);
|
||||
let out = Command::new("btrfs")
|
||||
|
|
|
|||
Loading…
Reference in a new issue