fix(shared-ols): review fixes — watcher starvation, atomic render, O(N) chown, safe meta parse
Addresses the local code-review on the OLS-tier images: - [HIGH] ols-htaccess-watcher.sh: the debounce drain read ALL inotify events unfiltered, so on a busy multi-tenant server it never timed out and the restart was STARVED (rewrite changes silently never applied). Now coalesces with a hard DEBOUNCE-bounded window. Verified under continuous noise. - [HIGH] render-shared-ols-config.sh: built httpd_config.conf in-place across several appends, so a concurrent OLS restart (watcher) or parallel render could read a half-written config and 503 the whole tier. Now flock-serialized, built in a temp file and atomically moved into place; refuses to publish empty. - [MED] render + entrypoint: replaced recursive chown of the whole conf tree (O(N-sites) on every single-site change / boot) with a targeted chown of just the file written. - [MED] render: parse site.meta with sed instead of sourcing it (do not execute panel-written data as shell). - [cleanup] removed the unused configs/shared-ols/vhconf.tpl (the panel copy is the single source; the image never read it). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -52,7 +52,22 @@ while read -r fname; do
|
||||
.htaccess) ;;
|
||||
*) continue ;;
|
||||
esac
|
||||
## Drain further events for DEBOUNCE seconds (coalesce the burst), then act.
|
||||
while read -r -t "$DEBOUNCE" _; do :; done
|
||||
## A tenant .htaccess changed. Coalesce the save-burst, then restart ONCE.
|
||||
##
|
||||
## The coalesce is HARD-BOUNDED to DEBOUNCE seconds: a previous version blocked
|
||||
## on `read -t DEBOUNCE` which, on a busy multi-tenant server, never timed out
|
||||
## (unrelated file writes under $WATCH_ROOT kept resetting it) — so the restart
|
||||
## was starved and rewrite changes silently never applied. Here we read further
|
||||
## events only until the deadline OR ~2s of total quiet, whichever comes first,
|
||||
## so continuous activity can delay us by at most DEBOUNCE. do_restart's FLOOR
|
||||
## then rate-limits across consecutive bursts.
|
||||
deadline=$(( $(date +%s) + DEBOUNCE ))
|
||||
while [ "$(date +%s)" -lt "$deadline" ]; do
|
||||
if read -r -t 2 _; then
|
||||
continue # more activity — keep coalescing toward the deadline
|
||||
else
|
||||
break # ~2s of total quiet — the burst has settled
|
||||
fi
|
||||
done
|
||||
do_restart
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user