On 3/6/18 7:10 AM, Qu Wenruo wrote: > > > On 2018年03月03日 02:46, je...@suse.com wrote: >> From: Jeff Mahoney <je...@suse.com> >> >> Hi all - >> >> The following series addresses some usability issues with the qgroups UI. >> >> 1) Adds -W option so we can wait on a rescan completing without starting one. >> 2) Adds qgroup information to 'btrfs subvolume show' >> 3) Adds a -P option to show pathnames for first-level qgroups (or member >> of nested qgroups with -v) >> 4) Allows exporting the qgroup table in JSON format for use by external >> programs/scripts. > > Going to review the patchset in the following days, but I'm pretty > curious about this feature. > > Is there any plan to implement similar json interface for other tools? > Or just qgroup only yet?
Dave and I talked about this off-list yesterday. I had asked if perhaps we'd want things like "btrfs subvolume list" and "btrfs subvolume show", among other commands, to also offer JSON output. We agreed that the answer is "yes" and that we should use something like a global option like "--format=json" to do that, e.g. "btrfs --format=json qgroup show." I have patches partially worked up to implement that. The idea is that commands would define in their flags which output formats they accept. If the user requests an unsupported format, they would receive an error with usage, listing the accepted formats. Each command is responsible for outputting in a given format, but that doesn't mean we couldn't standardize on a common library for most commands. Dave and I discussed using libsmartcols for output since it supports tabular and JSON output. For qgroups show, where we want to provide different data structures for level 0 qgroups vs nested qgroups, it's unsuitable. For simple tables like 'subvolume show' or 'subvolume list' it could probably work well. One question I had was whether errors should be reported in the requested format. I'm inclined to say no and that's what my code does: errors are still reported in plaintext with a nonzero error code. -Jeff >> Jeff Mahoney (8): >> btrfs-progs: quota: Add -W option to rescan to wait without starting >> rescan >> btrfs-progs: qgroups: fix misleading index check >> btrfs-progs: constify pathnames passed as arguments >> btrfs-progs: qgroups: add pathname to show output >> btrfs-progs: qgroups: introduce and use info and limit structures >> btrfs-progs: qgroups: introduce btrfs_qgroup_query >> btrfs-progs: subvolume: add quota info to btrfs sub show >> btrfs-progs: qgroups: export qgroups usage information as JSON >> >> Documentation/btrfs-qgroup.asciidoc | 8 + >> Documentation/btrfs-quota.asciidoc | 10 +- >> Makefile.inc.in | 4 +- >> chunk-recover.c | 4 +- >> cmds-device.c | 2 +- >> cmds-fi-usage.c | 6 +- >> cmds-qgroup.c | 49 +++- >> cmds-quota.c | 21 +- >> cmds-rescue.c | 4 +- >> cmds-subvolume.c | 46 ++++ >> configure.ac | 6 + >> kerncompat.h | 1 + >> qgroup.c | 526 >> ++++++++++++++++++++++++++++++------ >> qgroup.h | 22 +- >> send-utils.c | 4 +- >> utils.c | 22 +- >> utils.h | 2 + >> 17 files changed, 621 insertions(+), 116 deletions(-) >> >
Description: OpenPGP digital signature