fix: 30min wall-clock timeout on backup subprocess + global padding-top on .fc-content so views don't start under the sticky TopNav
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -37,12 +37,21 @@ def _backups_dir(images_root: Path | None = None) -> Path:
|
||||
return p
|
||||
|
||||
|
||||
_DEFAULT_SUBPROCESS_TIMEOUT_S = 30 * 60 # 30 minutes
|
||||
|
||||
|
||||
def _run_subprocess(cmd: list[str], **kwargs: Any):
|
||||
# Overridable for tests via monkeypatch.
|
||||
# Overridable for tests via monkeypatch. Hard wall-clock timeout
|
||||
# guards against pg_dump / tar / zstd hangs on NFS — without it the
|
||||
# task pretends to be 'running' forever (operator hit this 2026-05-
|
||||
# 23 with two backups stuck in MigrationRun). On timeout
|
||||
# subprocess.run raises TimeoutExpired which the caller surfaces as
|
||||
# a task error.
|
||||
return subprocess.run(
|
||||
cmd,
|
||||
capture_output=True,
|
||||
check=True,
|
||||
timeout=_DEFAULT_SUBPROCESS_TIMEOUT_S,
|
||||
**{k: v for k, v in kwargs.items() if not k.startswith("_")},
|
||||
)
|
||||
|
||||
|
||||
@@ -18,5 +18,11 @@ const route = useRoute()
|
||||
<style scoped>
|
||||
.fc-content {
|
||||
min-height: 100vh;
|
||||
/* Push initial viewport content below the sticky TopNav. Without
|
||||
this, some views' first rows / form fields / table headers can
|
||||
end up obscured by the navbar (depending on parent overflow
|
||||
context interacting with position: sticky). Scrolled-down content
|
||||
still slides under the nav — the gradient-fade design is intact. */
|
||||
padding-top: 64px;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user