mirror_zfs/cmd
Rob Norris 35ec4b14ab zpool iostat: refresh pool list every interval
When running zpool iostat in interval mode, it would not notice any new
pools created or imported, and would forget any destroyed or exported,
so would not notice if they came back. This leads to outputting "no
pools available" every interval until killed.

It looks like this was at least intended to work; the comment above
zpool_do_iostat() indicates that it is expected to "deal with pool
creation/destruction" and that pool_list_update() would detect new
pools. That call however was removed in 3e43edd2c5, though its unclear
if that broke this behaviour and it wasn't noticed, or if it never
worked, or if something later broke it. That said, the lack of
pool_list_update() is only part of the reason it doesn't work properly.

The fundamental problem is that the various things involved in
refreshing or updating the list of pools would aggressively ignore,
remove, skip or fail on pools that stop existing, or that already exist.
Mostly this meant that once a pool is removed from the list, it will
never be seen again. Restoring pool_list_update() to the
zpool_do_iostat() loop only partially fixes this - it would find "new"
pools again, but only in the "all pools" (no args) mode, and because its
iterator callback add_pool() would abort the iterator if it already has
a pool listed, it would only add pools if there weren't any already.

So, this commit reworks the structure somewhat. pool_list_update()
becomes pool_list_refresh(), and will ensure the state of all pools in
the list are updated. In the "all pools" mode, it will also add new
pools and remove pools that disappear, but when a fixed list of pools is
used, the list doesn't change, only the state of the pools within it.

The rest of the commit is adjusting things for this much simpler
structure. Regardless of the mode in use, pool_list_refresh() will
always do the right thing, so the driver code can just get on with the
display.

Now that pools can appear and disappear, I've made it so the header (if
enabled) is re-printed when the list changes, so that its easier to see
what's happening if the column widths change.

Since this is all rather complicated, I've included tests for the "all
pools" and "set of pools" modes.

Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Igor Kozhukhov <igor@dilos.org>
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Closes #17786
2025-09-29 16:50:49 -07:00
..
raidz_test SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zdb zdb: add ZFS_KEYFORMAT_RAW support for -K option 2025-09-25 12:08:20 -07:00
zed zed: Add synchronous zedlets 2025-09-11 15:58:59 -07:00
zfs Add interface to interface spa_get_worst_case_min_alloc() function 2025-09-25 12:08:14 -07:00
zinject Multiple printf() size fixes (#17199) 2025-04-01 15:27:03 -07:00
zpool zpool iostat: refresh pool list every interval 2025-09-29 16:50:49 -07:00
zpool_influxdb SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zstream Install zarcstat and zarcsummary symlinks in Makefile 2025-09-09 17:05:30 -07:00
dbufstat.in SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
fsck.zfs.in cmd: move single-file binaries up, extract udev programs to udev/ 2022-05-10 10:20:34 -07:00
Makefile.am cmd: rename arcstat to zarcstat 2025-09-10 15:01:20 -07:00
mount_zfs.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zarcstat.in cmd: rename arcstat to zarcstat 2025-09-10 15:01:20 -07:00
zarcsummary cmd: rename arc_summary to zarcsummary 2025-09-10 15:01:16 -07:00
zfs_ids_to_path.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zgenhostid.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zhack.c Refactor zhack label repair and fix -c regression on nonzero TXG 2025-09-17 16:33:59 -07:00
zilstat.in ZIL: "crash" the ZIL if the pool suspends during fallback 2025-08-08 16:43:26 -07:00
ztest.c ZIL: pass commit errors back to ITX callbacks 2025-08-08 16:43:20 -07:00
zvol_wait zvol_wait logic may terminate prematurely 2022-10-11 12:12:04 -07:00