From c6d92bbc586b354daab7fbf742fa7216ef9ecafd Mon Sep 17 00:00:00 2001 From: librelad Date: Tue, 26 May 2026 21:39:22 +0100 Subject: [PATCH] perf(backup): drop sudo overhead from sourceBackupLocations (Phase 6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The location_loader's find ran through runFileOp (sudo -u libreportal), which forks a sudo shell purely for the find call. configs/backup/ locations/ is already manager-owned (not in the dockerinstall-owned containers tree), so the sudo step adds ~50 ms of process-creation overhead for zero security benefit. Plain `find` now, with a tiny [[ ! -r || ! -x ]] guard that falls back to runFileOp if someone relocates the dir to a non-traversable location. Same observable behaviour, ~50 ms saved per CLI invocation. This is the simpler half of Phase 6 — the libreportal_configs scan itself was already plain-find (only ~11 ms total for 22 files). The remaining costly scan is app_configs against /libreportal-containers/, which legitimately needs sudo because dockerinstall owns that tree. Precompiling its content is possible but adds invalidation complexity (updateConfigOption writes happen at runtime) — deferred for now; better return on simpler interventions. Signed-off-by: librelad --- scripts/backup/locations/location_loader.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/scripts/backup/locations/location_loader.sh b/scripts/backup/locations/location_loader.sh index 9e04d61..e936199 100644 --- a/scripts/backup/locations/location_loader.sh +++ b/scripts/backup/locations/location_loader.sh @@ -11,8 +11,18 @@ sourceBackupLocations() dir=$(backupLocationsDir) [[ ! -d "$dir" ]] && return 0 + # configs/backup/locations/ lives in the manager-owned configs tree (not + # the dockerinstall-owned containers tree), so a plain find works fine. + # runFileOp was adding ~50 ms of sudo-shell overhead per invocation for + # no benefit. Fall back to runFileOp only if the directory isn't readable + # for some reason (relocated tree, custom permissions, …). + local find_cmd=(find) + if [[ ! -r "$dir" || ! -x "$dir" ]] && declare -f runFileOp >/dev/null 2>&1; then + find_cmd=(runFileOp find) + fi + local cfg while IFS= read -r -d '' cfg; do [[ -f "$cfg" ]] && source "$cfg" - done < <(runFileOp find "$dir" -mindepth 2 -maxdepth 2 -name location.config -type f -print0 2>/dev/null) + done < <("${find_cmd[@]}" "$dir" -mindepth 2 -maxdepth 2 -name location.config -type f -print0 2>/dev/null) }