zfs/cmd/zed/zed.d
Tony Hutter 4a7a04630d zed: Add synchronous zedlets
Historically, ZED has blindly spawned off zedlets in parallel and never
worried about their completion order.  This means that you can
potentially have zedlets for event number 2 starting before zedlets for
event number 1 had finished.  Most of the time this is fine, and it
actually helps a lot when the system is getting spammed with hundreds
of events.

However, there are times when you want your zedlets to be executed
in sequence with the event ID.  That is where synchronous zedlets
come in.

ZED will wait for all previously spawned zedlets to finish before
running a synchronous zedlet.  Synchronous zedlets are guaranteed to be
the only zedlet running.  No other zedlets may run in parallel with a
synchronous zedlet.  Users should be careful to only use synchronous
zedlets when needed, since they decrease parallelism.

To make a zedlet synchronous, simply add a "-sync-" immediately
following the event name in the zedlet's file name:

	EVENT_NAME-sync-ZEDLETNAME.sh

For example, if you wanted a synchronous statechange script:

	statechange-sync-myzedlet.sh

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tony Hutter <hutter2@llnl.gov>
Closes #17335
2025-09-11 15:58:59 -07:00
..
.gitignore systemd mount generator and tracking ZEDLET 2018-04-06 14:11:09 -07:00
all-debug.sh zed: lets: all-debug: printenv -> env 2022-04-01 17:59:06 -07:00
all-syslog.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
data-notify.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
deadman-sync-slot_off.sh zed: Add synchronous zedlets 2025-09-11 15:58:59 -07:00
generic-notify.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
history_event-zfs-list-cacher.sh.in Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
Makefile.am zed: Add synchronous zedlets 2025-09-11 15:58:59 -07:00
pool_import-sync-led.sh zed: Add synchronous zedlets 2025-09-11 15:58:59 -07:00
README Fix broken URL 2017-02-15 11:15:38 -08:00
resilver_finish-notify.sh OpenZFS 5997 - FRU field not set during pool creation and never updated 2016-08-12 13:06:48 -07:00
resilver_finish-start-scrub.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
scrub_finish-notify.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
statechange-notify.sh SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
statechange-sync-led.sh zed: Add synchronous zedlets 2025-09-11 15:58:59 -07:00
statechange-sync-slot_off.sh zed: Add synchronous zedlets 2025-09-11 15:58:59 -07:00
trim_finish-notify.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
vdev_attach-sync-led.sh zed: Add synchronous zedlets 2025-09-11 15:58:59 -07:00
vdev_clear-sync-led.sh zed: Add synchronous zedlets 2025-09-11 15:58:59 -07:00
zed-functions.sh zed: prettify slack notification message 2025-08-11 09:44:51 -07:00
zed.rc zed: Add deadman-slot_off.sh zedlet 2024-05-29 10:46:41 -07:00

Shell scripts are the recommended choice for ZEDLETs that mostly call
other utilities and do relatively little data manipulation.

Shell scripts MUST work on both bash and dash.

Shell scripts MUST run cleanly through ShellCheck:
  http://www.shellcheck.net/

General functions reside in "zed-functions.sh".  Use them where applicable.

Additional references that may be of use:

  Google Shell Style Guide
  https://github.com/google/styleguide/blob/gh-pages/shell.xml

  Dash as /bin/sh
  https://wiki.ubuntu.com/DashAsBinSh

  Common shell script mistakes
  http://www.pixelbeat.org/programming/shell_script_mistakes.html

  Filenames and Pathnames in Shell: How to do it Correctly
  http://www.dwheeler.com/essays/filenames-in-shell.html

  Autoconf: Portable Shell Programming
  https://www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell

Please BE CONSISTENT with the existing style, check for errors,
minimize dependencies where possible, try to be portable,
and comment anything non-obvious.  Festina lente.