version-travel: session record, evidence B/C/D/R, 09 decision 42, 07 §6.5 decision, register 339 -> 336, STATUS (D4)
gates / gates (push) Successful in 26s
gates / gates (push) Successful in 26s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -580,7 +580,20 @@ is not a listed item, is refused — proven live 2026-09-25). **The box never de
|
||||
|
||||
**Read-only view.** The file browser shows each kept item under „Megőrzött adatok", one `:ro` bind per item, and
|
||||
follows the list at the next sync (a write is refused: `Read-only file system`, proven live). Not yet readable there:
|
||||
a folder its app owns with mode 0770 (nextcloud, `www-data`) — R-691.
|
||||
a folder its app owns with mode 0770 (nextcloud, `www-data`) — R-691 — **until controller v0.275.0.**
|
||||
|
||||
**[DESIGN] How the view reads a folder another user owns** — *decided by CC unattended 2026-09-26 — operator may
|
||||
reverse.* *One sentence:* how does the read-only view open a 0770 kept folder owned by another user without touching
|
||||
the household's files? **Options:** (a) a read-only ACL on the folder; (b) run the file browser as root; (c) a second
|
||||
viewer container running as the owner; (d) the file browser joins the folder's OWNING GROUP (`group_add`).
|
||||
**Costs:** (a) changes the household's files' metadata — nextcloud checks its data folder's mode after a Load, and
|
||||
the brief forbids it; (b) the whole file browser (read-write on the household's userdata) as root; (c) a new container,
|
||||
route and login for one view; (d) the group also applies to the view's other mounts — so root's group (0) and the
|
||||
view's own (1000) are never added, and only a group-READABLE folder's group is. **Why (d):** the kept binds stay
|
||||
`:ro` (a write is refused by the mount), nothing on disk changes, and it is one compose line the sync already writes.
|
||||
Limit: a file inside that is owner-only (0600) stays unreadable. Also: a language switch now re-syncs the file browser
|
||||
so the source's name („Megőrzött adatok" / "Kept data") follows the box's language. Controller v0.275.0,
|
||||
`audits/version-travel-2026-09-26/D3/`.
|
||||
|
||||
Evidence: `audits/night-2026-09-26/E/` (E1 spike, E5 live proof).
|
||||
|
||||
|
||||
@@ -466,6 +466,18 @@ R-636's louder repeated alarm.
|
||||
without world data is a smaller product; the internet dependence is at first start, which the update's own
|
||||
health wait and undo already cover.
|
||||
|
||||
### 2026-09-26/27 — decisions taken by CC unattended (version-travel brief)
|
||||
|
||||
42. **The next PostgreSQL apps: paperless-ngx → 18, tandoor → 17** — *decided by CC unattended 2026-09-27 — operator
|
||||
may reverse.* *One sentence:* which major does each app's conversion target? **Options:** (a) 17 for both — no
|
||||
mount change; (b) 18 for both; (c) per app, from what the app's own upstream runs (decision 37's reasoning).
|
||||
**Costs:** (a) paperless converts twice (its upstream compose ships `postgres:18` at `/var/lib/postgresql`);
|
||||
(b) tandoor would run a major its own upstream compose (`postgres:16-alpine`) and its Django (5.2.16) have not
|
||||
documented; (c) two different targets to remember. **Why (c):** decision 37 said one conversion is better than
|
||||
two WHEN the upstream runs the newer major — paperless's does (18, Django ~5.2.5, psycopg 3); tandoor's does not,
|
||||
and 17 is the newest major its Django documents, with no mount change. Read 2026-09-27 from each upstream's
|
||||
compose and requirements (`audits/version-travel-2026-09-26/B/`). Reversible: the catalog pins the major.
|
||||
|
||||
---
|
||||
|
||||
## 3b. ANSWERED 2026-09-23 — the seven questions Slices 6 and 7 needed
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
# DRILL — 2026-09-26/27: a backup's data and its version travel together; the next PostgreSQL apps; adventurelog; leftovers
|
||||
|
||||
Brief: "a backup's data and its version always travel together; the next PostgreSQL apps; adventurelog; small leftovers".
|
||||
Architecture read before any claim: `07-backup-architecture.md` §6 (now §6.6 added), `09-update-architecture.md` §3
|
||||
decisions 13–42, §5.3, §6.4 parts 4, 5, 10. Evidence: `audits/version-travel-2026-09-26/`.
|
||||
|
||||
## Not done, or changed
|
||||
|
||||
- **One controller release (v0.275.0), not two**, with Parts A, D2–D4 and **R-699** (found live during Part B, filed and
|
||||
fixed). Live proofs ran on `0.275.0-rc1` (identical except R-699); 0.275.0 itself ran the adventurelog box proof.
|
||||
- **The session paused ~17 h** (usage limit) between the build and the live proof. In that gap the box's own night ran the
|
||||
engine step on docmost, which became the shape-2 live proof — observed, not pressed.
|
||||
- **R-691 (2) NOT built** — Load does not look at the off-site copy. (1) built and red-proofed, **not live-proven** (no
|
||||
nextcloud kept folder existed on 9202).
|
||||
- **Part B moved 2 apps** (paperless-ngx, tandoor). calcom and claper were not attempted (no seed route in the fixtures).
|
||||
- **adventurelog's health fix is a DROP of the override, not `/usr/bin/node`**: no single node path works on both versions
|
||||
(measured). It rides the image move in the same commit, as asked.
|
||||
- **Off-site restore NOT exercised live** (9202 has no off-site target; the boxes that do are fenced). Unit-tested.
|
||||
- **The conversion-copy RELEASE on a real 18 dump not observed** — due on 9202 after tonight's 00:30 data run.
|
||||
- **D1's scheduled restore-test cycle on demo-hp**: due ~18:28 CEST, read into `D1/D1-cycle-demo-hp.txt` if the session is
|
||||
still alive; otherwise it is the first thing to read.
|
||||
- **Part E (night watch) not done.**
|
||||
- D4 is **not ruled**: option A is built and in force (STATUS).
|
||||
|
||||
## Claims in the brief, judged
|
||||
|
||||
1. *`CaptureRecoveryUnit` rewrites `compose/` and `image_pins` before the data is refreshed* — **TRUE** (measured: the
|
||||
refresh 2 min after the update rewrote both; the dumps stayed).
|
||||
2. *A restore replays the database's raw volume tar before the SQL dump* — **TRUE** (`restore_unit.go`; live: the 16 datadir
|
||||
tar replaced the volume first).
|
||||
3. *The 18 definition over a 16 tar does X* — **REFUSED by the engine, and the app was left DOWN**: `postgres:18` refused the
|
||||
old layout, the replay timed out, the start failed. Not "a fresh cluster with the SQL".
|
||||
4. *A restored version older than the ladder would jump* — **TRUE for a person's press, FALSE for the automatic leg**
|
||||
(`LegSkipOlderThanLadder` already refuses). The page now says the box will not update it by itself.
|
||||
5. *`07` says nothing on which version a restore brings back* — **TRUE** for `07` (only `09` §5.3 said the restore pins to
|
||||
the unit's compose). `07` §6.6 now says it.
|
||||
|
||||
## A — the data and its version (R-696)
|
||||
|
||||
A1 spike (`A1/README.md`) → A2–A4 built (stamps, the definition kept with its data, restore guard, off-site definition,
|
||||
data times on all three tiers, release needs a dump on the new major) → red-proofs RP1–RP6 (`A5-redproofs/`) → live
|
||||
(`A5-live/README.md`): shape 2 in the box's own night (restore offered 00:30 = the data; restore back whole at 16 with the
|
||||
sentence „A(z) docmost visszaállt a(z) 2026-09-27 02:30-i mentésből, a(z) docmost:0.96.0, postgres:16-alpine,
|
||||
redis:7-alpine verzióra. Elérhető frissítés: a doboz lépésenként hozza naprakészre."; climb again 55 s); shape 1 (back
|
||||
whole at 0.95.0, "No pending database migrations"; climb 46 s). A7: 42 of 42 ladder digests resolve; filed R-698.
|
||||
|
||||
## B, C, D
|
||||
|
||||
B: `B/README.md` — paperless-ngx → 18 and tandoor → 17, both venues, engine gate ALLOWED, catalog `46affe0`, `53b84ca`.
|
||||
C: `C/README.md` — adventurelog v0.13.0, catalog `06ea7da`. D1 agent v0.135.0 (signed delivery to both hosts); D2 R-695;
|
||||
D3 R-691 (1); D4 R-694 (per-app measurement, 6 of 7 keep the login in their data).
|
||||
|
||||
## Teardown
|
||||
|
||||
- **Machine:** bench LXC 9401 created and destroyed (hostname checked), template removed. 9202: docmost, tandoor and
|
||||
adventurelog removed through the product; paperless-ngx (standing) now on PostgreSQL 18 like the live catalog, its kept
|
||||
16 copy waiting for the release; back on the LIVE catalog (`controller.yaml.pre-vt0926`), controller 0.275.0. Drill repo
|
||||
reset to live `main` (`f1a7d6c`).
|
||||
- **Host:** demo-hp `pct list` 9201 + 9202 only; `local` and `nvme-scratch` as before the bench.
|
||||
- **Hub:** global floor 0.275.0 (declared MinAgent 0.131.0); two signed `agent_update` jobs consumed; no customer or
|
||||
appliance created.
|
||||
|
||||
## Register
|
||||
|
||||
Before: **339 rows / 682,159 B** (the brief's count). Opened R-697, R-698, R-699; closed R-655, R-689, R-694, R-695, R-696,
|
||||
R-699 (moved to `CLOSED-ITEMS.md`); narrowed R-691 (to its (2)) and R-463 (3 of 11 moved). After: **336 rows / 678,058 B**.
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
# R-699 red-proof — a definition-only unit accepted (v0.274.0 / rc1 shape)
|
||||
a_version_travel_test.go:595: the precondition accepted tier 1 at 2026-09-27 09:43:08 +0000 UTC — a unit with no data is not a copy
|
||||
--- FAIL: TestR699_ADefinitionOnlyUnitIsNotAPreconditionCopy (0.00s)
|
||||
FAIL
|
||||
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/backup 0.008s
|
||||
FAIL
|
||||
@@ -0,0 +1,7 @@
|
||||
VMID Status Lock Name
|
||||
9201 running demo-hp
|
||||
9202 running demo-hp-scratch
|
||||
local dir active 40453376 22919900 15446360 56.66%
|
||||
nvme-scratch dir active 983379700 75028908 858324180 7.63%
|
||||
total used free shared buff/cache available
|
||||
Mem: 29 6 11 0 12 23
|
||||
@@ -0,0 +1,8 @@
|
||||
download of 'http://download.proxmox.com/images/system/debian-13-standard_13.6-1_amd64.tar.zst' to '/var/lib/vz/template/cache/debian-13-standard_13.6-1_amd64.tar.zst' finished
|
||||
Creating SSH host key 'ssh_host_ecdsa_key' - this may take some time ...
|
||||
done: SHA256:NNo2rVOhZjaTMhKYXI2z7nZzWZe672bnB+EkWCOFvQE root@upgrade-harness
|
||||
192.168.0.124/24
|
||||
Docker version 26.1.5+dfsg1, build a72d7cd
|
||||
Docker Compose version 2.26.1-4
|
||||
Python 3.13.5
|
||||
net-ok
|
||||
@@ -0,0 +1,8 @@
|
||||
hostname: upgrade-harness
|
||||
purging CT 9401 from related configurations..
|
||||
destroyed-9401
|
||||
VMID Status Lock Name
|
||||
9201 running demo-hp
|
||||
9202 running demo-hp-scratch
|
||||
local dir active 40453376 22942648 15423612 56.71%
|
||||
nvme-scratch dir active 983379700 75279156 858073932 7.66%
|
||||
@@ -0,0 +1,14 @@
|
||||
# B — the next PostgreSQL apps (2026-09-27)
|
||||
|
||||
Targets (`09` §3 decision 42, read from each upstream): paperless-ngx → 18 (upstream compose ships `postgres:18` at
|
||||
`/var/lib/postgresql`, Django ~5.2.5, psycopg 3); tandoor → 17 (upstream compose ships `postgres:16-alpine`; Django 5.2.16
|
||||
documents up to 17). calcom and claper were not taken (no seed route in the fixtures); outline, rallly, zipline have none (R-624).
|
||||
|
||||
| app | bench (LXC 9401, `apps/<app>/bench/`) | box 9202 (`apps/<app>/box/`) |
|
||||
|---|---|---|
|
||||
| paperless-ngx | converted 35.4 s, check equal over 72 tables, seed ✓; memory anon peaks: webserver 40.0 %, postgres 3.8 %; 0 restarts | precondition: Tier 2 copy of 00:30Z; converted 16 → 18 in 10.6 s (72 tables, 812 rows equal); done 64.6 s; seed ✓; pre-conversion copy KEPT |
|
||||
| tandoor | converted 23.6 s, 100 tables equal, seed ✓; tandoor app anon peak 78.7 % (cgroup 97.8 % = file cache), postgres 5.1 % | converted 16 → 17 in 11.4 s (100 tables, 687 rows equal); done 52.3 s; seed ✓ — this run found R-699 |
|
||||
|
||||
Written into the live catalog by `upgrade-test.py --write-ladder` (`46affe0`, `53b84ca`); the engine gate printed ALLOWED for both.
|
||||
Bench created and destroyed this session (`B1-bench-create.txt`, `B9-bench-destroy.txt`). demo-hp runs paperless-ngx: its
|
||||
automatic leg converts it on its next night (controller 0.275.0).
|
||||
+166
@@ -0,0 +1,166 @@
|
||||
[09:33:45] scratch drive folders cleared before FROM (R-656): none existed
|
||||
[09:33:45] MV-paperless-ngx: deploying paperless-ngx at FROM {'paperless-webserver': 'ghcr.io/paperless-ngx/paperless-ngx:2.20.15', 'paperless-postgres': 'postgres:16-alpine', 'paperless-redis': 'redis:7-alpine'}
|
||||
[09:35:37] FROM settled=True in 62.2s :: {"paperless-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "paperless-redis": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "paperless-webserver": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[09:35:37] fixture: the BOX walk's own (Django), through upgrade_boxport
|
||||
[09:35:45] paperless-webserver: createsuperuser :: Superuser created successfully.
|
||||
[09:35:51] paperless-webserver: seeded superuser drill248892
|
||||
[09:36:03] paperless-webserver: readback of the seeded account found=True
|
||||
[09:36:03] C1 (seed reads back BEFORE): True
|
||||
[09:36:04] MV-paperless-ngx: PostgreSQL major move {'service': 'paperless-postgres', 'engine': 'postgres', 'from': 16, 'to': 18} — converting on the bench before the swap
|
||||
[09:36:39] CONVERTED paperless-postgres PostgreSQL 16 -> 18 in 35.4s (dump 0.63s / 246453 B, load 2.59s, check equal over 72 tables)
|
||||
[09:36:39] MV-paperless-ngx: swapping to TO {'paperless-webserver': 'ghcr.io/paperless-ngx/paperless-ngx:2.20.15', 'paperless-postgres': 'postgres:18-alpine', 'paperless-redis': 'redis:7-alpine'}
|
||||
[09:36:50] TO up -d rc=0
|
||||
[09:37:22] TO settled=True in 31.5s :: {"paperless-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "paperless-redis": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "paperless-webserver": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[09:37:22] engine state paperless-postgres: 18
|
||||
[09:37:22] migration lines observed: 4
|
||||
[09:37:33] paperless-webserver: readback of the seeded account found=True
|
||||
[09:37:33] RESULT (seed reads back AFTER): True
|
||||
[09:37:33] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:8000
|
||||
[09:37:48] + 15s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=5M kills=0 rs=0 paperless-webserver=535M/1280M peak=630M kills=0 rs=0 reqs=298
|
||||
[09:38:04] + 30s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=5M kills=0 rs=0 paperless-webserver=536M/1280M peak=630M kills=0 rs=0 reqs=594
|
||||
[09:38:19] + 46s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=5M kills=0 rs=0 paperless-webserver=536M/1280M peak=630M kills=0 rs=0 reqs=888
|
||||
[09:38:34] + 61s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=5M kills=0 rs=0 paperless-webserver=535M/1280M peak=630M kills=0 rs=0 reqs=1184
|
||||
[09:38:49] + 76s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=5M kills=0 rs=0 paperless-webserver=535M/1280M peak=630M kills=0 rs=0 reqs=1480
|
||||
[09:39:04] + 91s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=536M/1280M peak=630M kills=0 rs=0 reqs=1776
|
||||
[09:39:19] + 106s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=536M/1280M peak=630M kills=0 rs=0 reqs=2072
|
||||
[09:39:35] + 121s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=535M/1280M peak=630M kills=0 rs=0 reqs=2366
|
||||
[09:39:50] + 136s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=536M/1280M peak=630M kills=0 rs=0 reqs=2662
|
||||
[09:40:05] + 152s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=2958
|
||||
[09:40:20] + 167s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=532M/1280M peak=630M kills=0 rs=0 reqs=3254
|
||||
[09:40:35] + 182s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=3550
|
||||
[09:40:50] + 197s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=3843
|
||||
[09:41:06] + 212s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=4139
|
||||
[09:41:21] + 227s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=4434
|
||||
[09:41:36] + 243s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=4730
|
||||
[09:41:51] + 258s paperless-postgres=123M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=5026
|
||||
[09:42:06] + 273s paperless-postgres=124M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=5322
|
||||
[09:42:21] + 288s paperless-postgres=126M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=5618
|
||||
[09:42:36] + 303s paperless-postgres=126M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=5914
|
||||
[09:42:52] + 318s paperless-postgres=128M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=534M/1280M peak=630M kills=0 rs=0 reqs=6208
|
||||
[09:43:07] + 334s paperless-postgres=129M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=6502
|
||||
[09:43:22] + 349s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=6798
|
||||
[09:43:37] + 364s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=7095
|
||||
[09:43:52] + 379s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=7392
|
||||
[09:44:07] + 394s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=7686
|
||||
[09:44:23] + 409s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=7982
|
||||
[09:44:38] + 424s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=8278
|
||||
[09:44:53] + 440s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=8576
|
||||
[09:45:08] + 455s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=8874
|
||||
[09:45:23] + 470s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=9168
|
||||
[09:45:39] + 485s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=9464
|
||||
[09:45:54] + 500s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=9760
|
||||
[09:46:09] + 516s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=534M/1280M peak=630M kills=0 rs=0 reqs=10056
|
||||
[09:46:24] + 531s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=10352
|
||||
[09:46:39] + 546s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=10648
|
||||
[09:46:54] + 561s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=10944
|
||||
[09:47:10] + 576s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=11240
|
||||
[09:47:25] + 591s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=534M/1280M peak=630M kills=0 rs=0 reqs=11536
|
||||
[09:47:40] + 607s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=11832
|
||||
[09:47:40] memory watch: killed=False tight=[] requests=11832 codes={'302': 11832}
|
||||
[09:47:40] MV-paperless-ngx: ABORT — putting the FROM images back
|
||||
[09:50:50] ABORT: the app did NOT come back (rc=1, 180.5s)
|
||||
{
|
||||
"harness_version": 4,
|
||||
"edge": "MV-paperless-ngx",
|
||||
"app": "paperless-ngx",
|
||||
"note": "night 2026-09-23 within-a-major move: paperless-postgres=postgres:18-alpine",
|
||||
"from": {
|
||||
"paperless-webserver": "ghcr.io/paperless-ngx/paperless-ngx:2.20.15",
|
||||
"paperless-postgres": "postgres:16-alpine",
|
||||
"paperless-redis": "redis:7-alpine"
|
||||
},
|
||||
"to": {
|
||||
"paperless-webserver": "ghcr.io/paperless-ngx/paperless-ngx:2.20.15",
|
||||
"paperless-postgres": "postgres:18-alpine",
|
||||
"paperless-redis": "redis:7-alpine"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "\u001b[2Kpaperless-webserver | [init-migrations] Apply database migrations...",
|
||||
"abort": "refuses",
|
||||
"abort_detail": "less-postgres | The files belonging to this database system will be owned by user \"postgres\".\n\u001b[2Kpaperless-postgres | This user must also own the server process.\n\u001b[2Kpaperless-postgres | \n\u001b[2Kpaperless-postgres | initdb: error: directory \"/var/lib/postgresql/data\" exists but is not empty\n\u001b[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory \"/var/lib/postgresql/data\" or run initdb with an argument other than \"/var/lib/postgresql/data\".\n\u001b[2Kpaperless-postgres | The database cluster will be initialized with locale \"en_US.utf8\".\n\u001b[2Kpaperless-postgres | The default database encoding has accordingly been set to \"UTF8\".\n\u001b[2Kpaperless-postgres | The default text search configuration will be set to \"english\".\n\u001b[2Kpaperless-postgres | \n\u001b[2Kpaperless-postgres | Data page checksums are disabled.\n\u001b[2Kpaperless-postgres |",
|
||||
"engine_state_after": {
|
||||
"paperless-postgres": {
|
||||
"image": "postgres:18-alpine",
|
||||
"probe": "datadir major version",
|
||||
"answer": "18",
|
||||
"probe_rc": 0
|
||||
}
|
||||
},
|
||||
"memory": {
|
||||
"soak_s": 606.9,
|
||||
"requested_s": 600,
|
||||
"requests": 11832,
|
||||
"codes": {
|
||||
"302": 11832
|
||||
},
|
||||
"first_kill": null,
|
||||
"containers": {
|
||||
"paperless-postgres": {
|
||||
"limit": 268435456,
|
||||
"peak": 193302528,
|
||||
"peak_pct": 0.72,
|
||||
"anon_peak_sampled": 10256384,
|
||||
"anon_peak_pct": 0.038,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
},
|
||||
"paperless-redis": {
|
||||
"limit": 134217728,
|
||||
"peak": 7303168,
|
||||
"peak_pct": 0.054,
|
||||
"anon_peak_sampled": 3137536,
|
||||
"anon_peak_pct": 0.023,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
},
|
||||
"paperless-webserver": {
|
||||
"limit": 1342177280,
|
||||
"peak": 660705280,
|
||||
"peak_pct": 0.492,
|
||||
"anon_peak_sampled": 537432064,
|
||||
"anon_peak_pct": 0.4,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
}
|
||||
},
|
||||
"unmeasured": [],
|
||||
"load": "reached"
|
||||
},
|
||||
"marks": [],
|
||||
"duration_s": 31.5,
|
||||
"measured_at": "2026-09-27T09:50:50Z",
|
||||
"evidence": "evidence/MV-paperless-ngx",
|
||||
"scratch_cleared": [],
|
||||
"engine_conversion": {
|
||||
"service": "paperless-postgres",
|
||||
"engine": "postgres",
|
||||
"from": 16,
|
||||
"to": 18,
|
||||
"dump_s": 0.63,
|
||||
"dump_bytes": 246453,
|
||||
"new_engine_ready_s": 6.4,
|
||||
"load_s": 2.59,
|
||||
"dropped": [
|
||||
"paperless"
|
||||
],
|
||||
"skipped_create_role": [
|
||||
"CREATE ROLE paperless;"
|
||||
],
|
||||
"result": "converted",
|
||||
"check_equal": true,
|
||||
"pg_version": "18",
|
||||
"tables": 72,
|
||||
"convert_s": 35.4
|
||||
},
|
||||
"files_changed": [],
|
||||
"total_s": 1024.4
|
||||
}
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.893 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.894 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.894 * Redis version=7.4.11, bits=64, commit=00000000, modified=0, pid=1, just started
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.894 * Configuration loaded
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.894 * monotonic clock: POSIX clock_gettime
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.896 * Running mode=standalone, port=6379.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.896 * Server initialized
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.900 * Creating AOF base file appendonly.aof.1.base.rdb on server start
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.905 * Creating AOF incr file appendonly.aof.1.incr.aof on server start
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.905 * Ready to accept connections tcp
|
||||
[2Kpaperless-redis | 1:signal-handler (1790501771) Received SIGTERM scheduling shutdown...
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.595 * User requested shutdown...
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.595 * Calling fsync() on the AOF file.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.597 * Saving the final RDB snapshot before exiting.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.609 * DB saved on disk
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.609 # Redis is now ready to exit, bye bye...
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 * Redis version=7.4.11, bits=64, commit=00000000, modified=0, pid=1, just started
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 * Configuration loaded
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.937 * monotonic clock: POSIX clock_gettime
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.938 * Running mode=standalone, port=6379.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.938 * Server initialized
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Reading RDB base file on AOF loading...
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Loading RDB produced by version 7.4.11
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * RDB age 135 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * RDB memory usage when created 0.90 Mb
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * RDB is base AOF
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Done loading RDB, keys loaded: 0, keys expired: 0.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * DB loaded from base file appendonly.aof.1.base.rdb: 0.000 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * DB loaded from incr file appendonly.aof.1.incr.aof: 0.000 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * DB loaded from append only file: 0.001 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Opening AOF incr file appendonly.aof.1.incr.aof on server start
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Ready to accept connections tcp
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"paperless-postgres": {
|
||||
"status": "restarting",
|
||||
"health": "unhealthy",
|
||||
"restarts": 0,
|
||||
"exit": 1
|
||||
},
|
||||
"paperless-redis": {
|
||||
"status": "running",
|
||||
"health": "healthy",
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
},
|
||||
"paperless-webserver": {
|
||||
"status": "created",
|
||||
"health": null,
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
}
|
||||
}
|
||||
+166
@@ -0,0 +1,166 @@
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.893 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.894 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.894 * Redis version=7.4.11, bits=64, commit=00000000, modified=0, pid=1, just started
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.894 * Configuration loaded
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.894 * monotonic clock: POSIX clock_gettime
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.896 * Running mode=standalone, port=6379.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.896 * Server initialized
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.900 * Creating AOF base file appendonly.aof.1.base.rdb on server start
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.905 * Creating AOF incr file appendonly.aof.1.incr.aof on server start
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.905 * Ready to accept connections tcp
|
||||
[2Kpaperless-redis | 1:signal-handler (1790501771) Received SIGTERM scheduling shutdown...
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.595 * User requested shutdown...
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.595 * Calling fsync() on the AOF file.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.597 * Saving the final RDB snapshot before exiting.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.609 * DB saved on disk
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.609 # Redis is now ready to exit, bye bye...
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 * Redis version=7.4.11, bits=64, commit=00000000, modified=0, pid=1, just started
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 * Configuration loaded
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.937 * monotonic clock: POSIX clock_gettime
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.938 * Running mode=standalone, port=6379.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.938 * Server initialized
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Reading RDB base file on AOF loading...
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Loading RDB produced by version 7.4.11
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * RDB age 135 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * RDB memory usage when created 0.90 Mb
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * RDB is base AOF
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Done loading RDB, keys loaded: 0, keys expired: 0.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * DB loaded from base file appendonly.aof.1.base.rdb: 0.000 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * DB loaded from incr file appendonly.aof.1.incr.aof: 0.000 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * DB loaded from append only file: 0.001 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Opening AOF incr file appendonly.aof.1.incr.aof on server start
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Ready to accept connections tcp
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
|
||||
[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are disabled.
|
||||
[2Kpaperless-postgres |
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
db:paperless owner=paperless enc=UTF8 coll=en_US.utf8
|
||||
db:postgres owner=paperless enc=UTF8 coll=en_US.utf8
|
||||
ext:paperless:plpgsql
|
||||
role:paperless super=true login=true pw=true
|
||||
rows:paperless:public.account_emailaddress=0
|
||||
rows:paperless:public.account_emailconfirmation=0
|
||||
rows:paperless:public.auditlog_logentry=0
|
||||
rows:paperless:public.auth_group=0
|
||||
rows:paperless:public.auth_group_permissions=0
|
||||
rows:paperless:public.auth_permission=176
|
||||
rows:paperless:public.auth_user=4
|
||||
rows:paperless:public.auth_user_groups=0
|
||||
rows:paperless:public.auth_user_user_permissions=0
|
||||
rows:paperless:public.authtoken_token=0
|
||||
rows:paperless:public.django_admin_log=0
|
||||
rows:paperless:public.django_celery_results_chordcounter=0
|
||||
rows:paperless:public.django_celery_results_groupresult=0
|
||||
rows:paperless:public.django_celery_results_taskresult=0
|
||||
rows:paperless:public.django_content_type=44
|
||||
rows:paperless:public.django_migrations=216
|
||||
rows:paperless:public.django_session=0
|
||||
rows:paperless:public.documents_correspondent=0
|
||||
rows:paperless:public.documents_customfield=0
|
||||
rows:paperless:public.documents_customfieldinstance=0
|
||||
rows:paperless:public.documents_document=0
|
||||
rows:paperless:public.documents_document_tags=0
|
||||
rows:paperless:public.documents_documenttype=0
|
||||
rows:paperless:public.documents_note=0
|
||||
rows:paperless:public.documents_paperlesstask=0
|
||||
rows:paperless:public.documents_savedview=0
|
||||
rows:paperless:public.documents_savedviewfilterrule=0
|
||||
rows:paperless:public.documents_sharelink=0
|
||||
rows:paperless:public.documents_storagepath=0
|
||||
rows:paperless:public.documents_tag=0
|
||||
rows:paperless:public.documents_uisettings=0
|
||||
rows:paperless:public.documents_workflow=0
|
||||
rows:paperless:public.documents_workflow_actions=0
|
||||
rows:paperless:public.documents_workflow_triggers=0
|
||||
rows:paperless:public.documents_workflowaction=0
|
||||
rows:paperless:public.documents_workflowaction_assign_change_groups=0
|
||||
rows:paperless:public.documents_workflowaction_assign_change_users=0
|
||||
rows:paperless:public.documents_workflowaction_assign_custom_fields=0
|
||||
rows:paperless:public.documents_workflowaction_assign_tags=0
|
||||
rows:paperless:public.documents_workflowaction_assign_view_groups=0
|
||||
rows:paperless:public.documents_workflowaction_assign_view_users=0
|
||||
rows:paperless:public.documents_workflowaction_remove_change_groups=0
|
||||
rows:paperless:public.documents_workflowaction_remove_change_users=0
|
||||
rows:paperless:public.documents_workflowaction_remove_correspondents=0
|
||||
rows:paperless:public.documents_workflowaction_remove_custom_fields=0
|
||||
rows:paperless:public.documents_workflowaction_remove_document_types=0
|
||||
rows:paperless:public.documents_workflowaction_remove_owners=0
|
||||
rows:paperless:public.documents_workflowaction_remove_storage_paths=0
|
||||
rows:paperless:public.documents_workflowaction_remove_tags=0
|
||||
rows:paperless:public.documents_workflowaction_remove_view_groups=0
|
||||
rows:paperless:public.documents_workflowaction_remove_view_users=0
|
||||
rows:paperless:public.documents_workflowactionemail=0
|
||||
rows:paperless:public.documents_workflowactionwebhook=0
|
||||
rows:paperless:public.documents_workflowrun=0
|
||||
rows:paperless:public.documents_workflowtrigger=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_all_tags=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_not_correspondents=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_not_document_types=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_not_storage_paths=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_not_tags=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_tags=0
|
||||
rows:paperless:public.guardian_groupobjectpermission=0
|
||||
rows:paperless:public.guardian_userobjectpermission=0
|
||||
rows:paperless:public.mfa_authenticator=0
|
||||
rows:paperless:public.paperless_applicationconfiguration=1
|
||||
rows:paperless:public.paperless_mail_mailaccount=0
|
||||
rows:paperless:public.paperless_mail_mailrule=0
|
||||
rows:paperless:public.paperless_mail_mailrule_assign_tags=0
|
||||
rows:paperless:public.paperless_mail_processedmail=0
|
||||
rows:paperless:public.socialaccount_socialaccount=0
|
||||
rows:paperless:public.socialaccount_socialapp=0
|
||||
rows:paperless:public.socialaccount_socialtoken=0
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
db:paperless owner=paperless enc=UTF8 coll=en_US.utf8
|
||||
db:postgres owner=paperless enc=UTF8 coll=en_US.utf8
|
||||
ext:paperless:plpgsql
|
||||
role:paperless super=true login=true pw=true
|
||||
rows:paperless:public.account_emailaddress=0
|
||||
rows:paperless:public.account_emailconfirmation=0
|
||||
rows:paperless:public.auditlog_logentry=0
|
||||
rows:paperless:public.auth_group=0
|
||||
rows:paperless:public.auth_group_permissions=0
|
||||
rows:paperless:public.auth_permission=176
|
||||
rows:paperless:public.auth_user=4
|
||||
rows:paperless:public.auth_user_groups=0
|
||||
rows:paperless:public.auth_user_user_permissions=0
|
||||
rows:paperless:public.authtoken_token=0
|
||||
rows:paperless:public.django_admin_log=0
|
||||
rows:paperless:public.django_celery_results_chordcounter=0
|
||||
rows:paperless:public.django_celery_results_groupresult=0
|
||||
rows:paperless:public.django_celery_results_taskresult=0
|
||||
rows:paperless:public.django_content_type=44
|
||||
rows:paperless:public.django_migrations=216
|
||||
rows:paperless:public.django_session=0
|
||||
rows:paperless:public.documents_correspondent=0
|
||||
rows:paperless:public.documents_customfield=0
|
||||
rows:paperless:public.documents_customfieldinstance=0
|
||||
rows:paperless:public.documents_document=0
|
||||
rows:paperless:public.documents_document_tags=0
|
||||
rows:paperless:public.documents_documenttype=0
|
||||
rows:paperless:public.documents_note=0
|
||||
rows:paperless:public.documents_paperlesstask=0
|
||||
rows:paperless:public.documents_savedview=0
|
||||
rows:paperless:public.documents_savedviewfilterrule=0
|
||||
rows:paperless:public.documents_sharelink=0
|
||||
rows:paperless:public.documents_storagepath=0
|
||||
rows:paperless:public.documents_tag=0
|
||||
rows:paperless:public.documents_uisettings=0
|
||||
rows:paperless:public.documents_workflow=0
|
||||
rows:paperless:public.documents_workflow_actions=0
|
||||
rows:paperless:public.documents_workflow_triggers=0
|
||||
rows:paperless:public.documents_workflowaction=0
|
||||
rows:paperless:public.documents_workflowaction_assign_change_groups=0
|
||||
rows:paperless:public.documents_workflowaction_assign_change_users=0
|
||||
rows:paperless:public.documents_workflowaction_assign_custom_fields=0
|
||||
rows:paperless:public.documents_workflowaction_assign_tags=0
|
||||
rows:paperless:public.documents_workflowaction_assign_view_groups=0
|
||||
rows:paperless:public.documents_workflowaction_assign_view_users=0
|
||||
rows:paperless:public.documents_workflowaction_remove_change_groups=0
|
||||
rows:paperless:public.documents_workflowaction_remove_change_users=0
|
||||
rows:paperless:public.documents_workflowaction_remove_correspondents=0
|
||||
rows:paperless:public.documents_workflowaction_remove_custom_fields=0
|
||||
rows:paperless:public.documents_workflowaction_remove_document_types=0
|
||||
rows:paperless:public.documents_workflowaction_remove_owners=0
|
||||
rows:paperless:public.documents_workflowaction_remove_storage_paths=0
|
||||
rows:paperless:public.documents_workflowaction_remove_tags=0
|
||||
rows:paperless:public.documents_workflowaction_remove_view_groups=0
|
||||
rows:paperless:public.documents_workflowaction_remove_view_users=0
|
||||
rows:paperless:public.documents_workflowactionemail=0
|
||||
rows:paperless:public.documents_workflowactionwebhook=0
|
||||
rows:paperless:public.documents_workflowrun=0
|
||||
rows:paperless:public.documents_workflowtrigger=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_all_tags=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_not_correspondents=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_not_document_types=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_not_storage_paths=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_not_tags=0
|
||||
rows:paperless:public.documents_workflowtrigger_filter_has_tags=0
|
||||
rows:paperless:public.guardian_groupobjectpermission=0
|
||||
rows:paperless:public.guardian_userobjectpermission=0
|
||||
rows:paperless:public.mfa_authenticator=0
|
||||
rows:paperless:public.paperless_applicationconfiguration=1
|
||||
rows:paperless:public.paperless_mail_mailaccount=0
|
||||
rows:paperless:public.paperless_mail_mailrule=0
|
||||
rows:paperless:public.paperless_mail_mailrule_assign_tags=0
|
||||
rows:paperless:public.paperless_mail_processedmail=0
|
||||
rows:paperless:public.socialaccount_socialaccount=0
|
||||
rows:paperless:public.socialaccount_socialapp=0
|
||||
rows:paperless:public.socialaccount_socialtoken=0
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"paperless-postgres": {
|
||||
"image": "postgres:18-alpine",
|
||||
"probe": "datadir major version",
|
||||
"answer": "18",
|
||||
"probe_rc": 0
|
||||
}
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"/srv/felhom-gate/hdd/appdata/paperless/export": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"/srv/felhom-gate/hdd/appdata/paperless/media": "3d56384a871d4d286ff78c003cf877c8708bf525f82961a087edae6d911d4506",
|
||||
"/srv/felhom-gate/import/paperless": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"/srv/felhom-gate/hdd/appdata/paperless/export": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"/srv/felhom-gate/hdd/appdata/paperless/media": "3d56384a871d4d286ff78c003cf877c8708bf525f82961a087edae6d911d4506",
|
||||
"/srv/felhom-gate/import/paperless": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
+1562
File diff suppressed because it is too large
Load Diff
+4
@@ -0,0 +1,4 @@
|
||||
[2Kpaperless-webserver | [init-migrations] Apply database migrations...
|
||||
[2Kpaperless-webserver | Apply all migrations: account, admin, auditlog, auth, authtoken, contenttypes, django_celery_results, documents, guardian, mfa, paperless, paperless_mail, sessions, socialaccount
|
||||
[2Kpaperless-webserver | Running migrations:
|
||||
[2Kpaperless-webserver | No migrations to apply.
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
[09:33:45] scratch drive folders cleared before FROM (R-656): none existed
|
||||
[09:33:45] MV-paperless-ngx: deploying paperless-ngx at FROM {'paperless-webserver': 'ghcr.io/paperless-ngx/paperless-ngx:2.20.15', 'paperless-postgres': 'postgres:16-alpine', 'paperless-redis': 'redis:7-alpine'}
|
||||
[09:35:37] FROM settled=True in 62.2s :: {"paperless-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "paperless-redis": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "paperless-webserver": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[09:35:37] fixture: the BOX walk's own (Django), through upgrade_boxport
|
||||
[09:35:45] paperless-webserver: createsuperuser :: Superuser created successfully.
|
||||
[09:35:51] paperless-webserver: seeded superuser drill248892
|
||||
[09:36:03] paperless-webserver: readback of the seeded account found=True
|
||||
[09:36:03] C1 (seed reads back BEFORE): True
|
||||
[09:36:04] MV-paperless-ngx: PostgreSQL major move {'service': 'paperless-postgres', 'engine': 'postgres', 'from': 16, 'to': 18} — converting on the bench before the swap
|
||||
[09:36:39] CONVERTED paperless-postgres PostgreSQL 16 -> 18 in 35.4s (dump 0.63s / 246453 B, load 2.59s, check equal over 72 tables)
|
||||
[09:36:39] MV-paperless-ngx: swapping to TO {'paperless-webserver': 'ghcr.io/paperless-ngx/paperless-ngx:2.20.15', 'paperless-postgres': 'postgres:18-alpine', 'paperless-redis': 'redis:7-alpine'}
|
||||
[09:36:50] TO up -d rc=0
|
||||
[09:37:22] TO settled=True in 31.5s :: {"paperless-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "paperless-redis": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "paperless-webserver": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[09:37:22] engine state paperless-postgres: 18
|
||||
[09:37:22] migration lines observed: 4
|
||||
[09:37:33] paperless-webserver: readback of the seeded account found=True
|
||||
[09:37:33] RESULT (seed reads back AFTER): True
|
||||
[09:37:33] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:8000
|
||||
[09:37:48] + 15s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=5M kills=0 rs=0 paperless-webserver=535M/1280M peak=630M kills=0 rs=0 reqs=298
|
||||
[09:38:04] + 30s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=5M kills=0 rs=0 paperless-webserver=536M/1280M peak=630M kills=0 rs=0 reqs=594
|
||||
[09:38:19] + 46s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=5M kills=0 rs=0 paperless-webserver=536M/1280M peak=630M kills=0 rs=0 reqs=888
|
||||
[09:38:34] + 61s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=5M kills=0 rs=0 paperless-webserver=535M/1280M peak=630M kills=0 rs=0 reqs=1184
|
||||
[09:38:49] + 76s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=5M kills=0 rs=0 paperless-webserver=535M/1280M peak=630M kills=0 rs=0 reqs=1480
|
||||
[09:39:04] + 91s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=536M/1280M peak=630M kills=0 rs=0 reqs=1776
|
||||
[09:39:19] + 106s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=536M/1280M peak=630M kills=0 rs=0 reqs=2072
|
||||
[09:39:35] + 121s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=535M/1280M peak=630M kills=0 rs=0 reqs=2366
|
||||
[09:39:50] + 136s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=536M/1280M peak=630M kills=0 rs=0 reqs=2662
|
||||
[09:40:05] + 152s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=2958
|
||||
[09:40:20] + 167s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=532M/1280M peak=630M kills=0 rs=0 reqs=3254
|
||||
[09:40:35] + 182s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=3550
|
||||
[09:40:50] + 197s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=3843
|
||||
[09:41:06] + 212s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=4139
|
||||
[09:41:21] + 227s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=4434
|
||||
[09:41:36] + 243s paperless-postgres=122M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=4730
|
||||
[09:41:51] + 258s paperless-postgres=123M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=5026
|
||||
[09:42:06] + 273s paperless-postgres=124M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=5322
|
||||
[09:42:21] + 288s paperless-postgres=126M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=5618
|
||||
[09:42:36] + 303s paperless-postgres=126M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=5914
|
||||
[09:42:52] + 318s paperless-postgres=128M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=534M/1280M peak=630M kills=0 rs=0 reqs=6208
|
||||
[09:43:07] + 334s paperless-postgres=129M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=6502
|
||||
[09:43:22] + 349s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=6798
|
||||
[09:43:37] + 364s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=7095
|
||||
[09:43:52] + 379s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=7392
|
||||
[09:44:07] + 394s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=7686
|
||||
[09:44:23] + 409s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=7982
|
||||
[09:44:38] + 424s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=8278
|
||||
[09:44:53] + 440s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=8576
|
||||
[09:45:08] + 455s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=8874
|
||||
[09:45:23] + 470s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=9168
|
||||
[09:45:39] + 485s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=9464
|
||||
[09:45:54] + 500s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=9760
|
||||
[09:46:09] + 516s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=534M/1280M peak=630M kills=0 rs=0 reqs=10056
|
||||
[09:46:24] + 531s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=10352
|
||||
[09:46:39] + 546s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=4M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=10648
|
||||
[09:46:54] + 561s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=10944
|
||||
[09:47:10] + 576s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=11240
|
||||
[09:47:25] + 591s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=534M/1280M peak=630M kills=0 rs=0 reqs=11536
|
||||
[09:47:40] + 607s paperless-postgres=131M/256M peak=184M kills=0 rs=0 paperless-redis=3M/128M peak=6M kills=0 rs=0 paperless-webserver=533M/1280M peak=630M kills=0 rs=0 reqs=11832
|
||||
[09:47:40] memory watch: killed=False tight=[] requests=11832 codes={'302': 11832}
|
||||
[09:47:40] MV-paperless-ngx: ABORT — putting the FROM images back
|
||||
[09:50:50] ABORT: the app did NOT come back (rc=1, 180.5s)
|
||||
+432
@@ -0,0 +1,432 @@
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.893 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.894 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.894 * Redis version=7.4.11, bits=64, commit=00000000, modified=0, pid=1, just started
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:34:24.894 * Configuration loaded
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.894 * monotonic clock: POSIX clock_gettime
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.896 * Running mode=standalone, port=6379.
|
||||
[2K[2K[2Kpaperless-webserver | [init-start] paperless-ngx docker container starting...
|
||||
[2Kpaperless-webserver | [init-start] paperless-ngx docker container starting init as root
|
||||
[2Kpaperless-webserver | [env-init] Checking for environment from files
|
||||
[2Kpaperless-webserver | [env-init] No *_FILE environment found
|
||||
[2Kpaperless-webserver | [init-redis-wait] Waiting for Redis to report ready
|
||||
[2Kpaperless-webserver | [init-tesseract-langs] Checking if additional teseract languages needed
|
||||
[2Kpaperless-webserver | [init-db-wait] Waiting for PostgreSQL to start...
|
||||
[2Kpaperless-webserver | Installing languages...
|
||||
[2Kpaperless-webserver | [init-user] No UID changes for paperless
|
||||
[2Kpaperless-webserver | [init-user] No GID changes for paperless
|
||||
[2Kpaperless-webserver | [init-tesseract-langs] Package tesseract-ocr-eng already installed!
|
||||
paperless-redis | 1:M 27 Sep 2026 11:34:24.896 * Server initialized
|
||||
[2Kpaperless-webserver | [init-folders] Running with root privileges, adjusting directories and permissions
|
||||
[2Kpaperless-webserver | mkdir: created directory '/tmp/paperless'
|
||||
[2Kpaperless-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kpaperless-postgres | This user must also own the server process.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kpaperless-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kpaperless-postgres | The default text search configuration will be set to "english".
|
||||
paperless-webserver | [init-tesseract-langs] Package tesseract-ocr-deu already installed!
|
||||
[2Kpaperless-webserver | mkdir: created directory '/usr/src/paperless/data/index'
|
||||
[2Kpaperless-webserver | mkdir: created directory '/usr/src/paperless/media/documents'
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Data page checksums are enabled.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-webserver | mkdir: created directory '/usr/src/paperless/media/documents/originals'
|
||||
[2Kpaperless-webserver | mkdir: created directory '/usr/src/paperless/media/documents/thumbnails'
|
||||
[2Kpaperless-webserver | changed ownership of '/usr/src/paperless/export' from root:root to paperless:paperless
|
||||
[2Kpaperless-webserver | changed ownership of '/usr/src/paperless/data/index' from root:root to paperless:paperless
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.900 * Creating AOF base file appendonly.aof.1.base.rdb on server start
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.905 * Creating AOF incr file appendonly.aof.1.incr.aof on server start
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:34:24.905 * Ready to accept connections tcp
|
||||
[2Kpaperless-redis | 1:signal-handler (1790501771) Received SIGTERM scheduling shutdown...
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.595 * User requested shutdown...
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.595 * Calling fsync() on the AOF file.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.597 * Saving the final RDB snapshot before exiting.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.609 * DB saved on disk
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:11.609 # Redis is now ready to exit, bye bye...
|
||||
[2K[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
|
||||
paperless-webserver | changed ownership of '/usr/src/paperless/media' from root:root to paperless:paperless
|
||||
[2Kpaperless-postgres | fixing permissions on existing directory /var/lib/postgresql/18/docker ... ok
|
||||
[2K[2Kpaperless-webserver | changed ownership of '/usr/src/paperless/media/documents' from root:root to paperless:paperless
|
||||
[2Kpaperless-webserver | changed ownership of '/usr/src/paperless/media/documents/thumbnails' from root:root to paperless:paperless
|
||||
[2Kpaperless-webserver | changed ownership of '/usr/src/paperless/media/documents/originals' from root:root to paperless:paperless
|
||||
[2Kpaperless-webserver | changed ownership of '/usr/src/paperless/consume' from root:root to paperless:paperless
|
||||
[2Kpaperless-webserver | changed ownership of '/tmp/paperless' from root:root to paperless:paperless
|
||||
[2Kpaperless-webserver | paperless-postgres:5432 - accepting connections
|
||||
[2Kpaperless-webserver | [init-db-wait] Connected to PostgreSQL
|
||||
[2Kpaperless-webserver | [init-db-wait] Database is ready
|
||||
[2Kpaperless-webserver | [init-migrations] Apply database migrations...
|
||||
[2Kpaperless-webserver | Waiting for Redis...
|
||||
[2Kpaperless-webserver | Connected to Redis broker.
|
||||
[2Kpaperless-webserver | [init-redis-wait] Redis ready
|
||||
[2Kpaperless-webserver | Operations to perform:
|
||||
[2K[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 * Redis version=7.4.11, bits=64, commit=00000000, modified=0, pid=1, just started
|
||||
paperless-postgres | creating subdirectories ... ok
|
||||
[2Kpaperless-redis | 1:C 27 Sep 2026 11:36:39.936 * Configuration loaded
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.937 * monotonic clock: POSIX clock_gettime
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.938 * Running mode=standalone, port=6379.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.938 * Server initialized
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Reading RDB base file on AOF loading...
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Loading RDB produced by version 7.4.11
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * RDB age 135 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * RDB memory usage when created 0.90 Mb
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * RDB is base AOF
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Done loading RDB, keys loaded: 0, keys expired: 0.
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * DB loaded from base file appendonly.aof.1.base.rdb: 0.000 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * DB loaded from incr file appendonly.aof.1.incr.aof: 0.000 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * DB loaded from append only file: 0.001 seconds
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Opening AOF incr file appendonly.aof.1.incr.aof on server start
|
||||
[2Kpaperless-redis | 1:M 27 Sep 2026 11:36:39.939 * Ready to accept connections tcp
|
||||
paperless-webserver | Apply all migrations: account, admin, auditlog, auth, authtoken, contenttypes, django_celery_results, documents, guardian, mfa, paperless, paperless_mail, sessions, socialaccount
|
||||
[2Kpaperless-webserver | Running migrations:
|
||||
[2Kpaperless-webserver | Applying contenttypes.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying auth.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying account.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying account.0002_email_max_length... OK
|
||||
[2Kpaperless-webserver | Applying account.0003_alter_emailaddress_create_unique_verified_email... OK
|
||||
[2Kpaperless-postgres | selecting dynamic shared memory implementation ... posix
|
||||
[2Kpaperless-postgres | selecting default "max_connections" ... 100
|
||||
[2Kpaperless-postgres | selecting default "shared_buffers" ... 128MB
|
||||
[2Kpaperless-postgres | selecting default time zone ... Europe/Budapest
|
||||
[2Kpaperless-postgres | creating configuration files ... ok
|
||||
[2Kpaperless-postgres | running bootstrap script ... ok
|
||||
[2Kpaperless-postgres | sh: locale: not found
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:29.987 CEST [46] WARNING: no usable system locales were found
|
||||
[2Kpaperless-postgres | performing post-bootstrap initialization ... ok
|
||||
[2Kpaperless-postgres | syncing data to disk ... ok
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | Success. You can now start the database server using:
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | pg_ctl -D /var/lib/postgresql/18/docker -l logfile start
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | initdb: warning: enabling "trust" authentication for local connections
|
||||
[2Kpaperless-postgres | initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
|
||||
[2Kpaperless-postgres | waiting for server to start....2026-09-27 11:36:33.552 CEST [58] LOG: starting PostgreSQL 18.6 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:33.555 CEST [58] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:33.570 CEST [64] LOG: database system was shut down at 2026-09-27 11:36:33 CEST
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:33.577 CEST [58] LOG: database system is ready to accept connections
|
||||
[2Kpaperless-postgres | done
|
||||
[2Kpaperless-postgres | server started
|
||||
[2Kpaperless-postgres | CREATE DATABASE
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | waiting for server to shut down....2026-09-27 11:36:34.209 CEST [58] LOG: received fast shutdown request
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.213 CEST [58] LOG: aborting any active transactions
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.216 CEST [58] LOG: background worker "logical replication launcher" (PID 67) exited with exit code 1
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.221 CEST [62] LOG: shutting down
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.224 CEST [62] LOG: checkpoint starting: shutdown immediate
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.330 CEST [62] LOG: checkpoint complete: wrote 943 buffers (5.8%), wrote 3 SLRU buffers; 0 WAL file(s) added, 0 removed, 0 recycled; write=0.029 s, sync=0.060 s, total=0.110 s; sync files=303, longest=0.020 s, average=0.001 s; distance=4362 kB, estimate=4362 kB; lsn=0/1BA8868, redo lsn=0/1BA8868
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.356 CEST [58] LOG: database system is shut down
|
||||
[2Kpaperless-postgres | done
|
||||
[2Kpaperless-postgres | server stopped
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | PostgreSQL init process complete; ready for start up.
|
||||
[2Kpaperless-postgres |
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.450 CEST [1] LOG: starting PostgreSQL 18.6 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.450 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.450 CEST [1] LOG: listening on IPv6 address "::", port 5432
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.456 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.468 CEST [86] LOG: database system was shut down at 2026-09-27 11:36:34 CEST
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:34.475 CEST [1] LOG: database system is ready to accept connections
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:36.185 CEST [84] LOG: checkpoint starting: immediate force wait
|
||||
[2Kpaperless-postgres | 2026-09-27 11:36:36.214 CEST [84] LOG: checkpoint complete: wrote 1 buffers (0.0%), wrote 3 SLRU buffers; 0 WAL file(s) added, 0 removed, 0 recycled; write=0.008 s, sync=0.006 s, total=0.029 s; sync files=3, longest=0.003 s, average=0.002 s; distance=1 kB, estimate=1 kB; lsn=0/1BA8D70, redo lsn=0/1BA8D18
|
||||
[2Kpaperless-webserver | Applying account.0004_alter_emailaddress_drop_unique_email... OK
|
||||
[2Kpaperless-webserver | Applying account.0005_emailaddress_idx_upper_email... OK
|
||||
[2Kpaperless-webserver | Applying account.0006_emailaddress_lower... OK
|
||||
[2Kpaperless-webserver | Applying account.0007_emailaddress_idx_email... OK
|
||||
[2Kpaperless-webserver | Applying account.0008_emailaddress_unique_primary_email_fixup... OK
|
||||
[2Kpaperless-webserver | Applying account.0009_emailaddress_unique_primary_email... OK
|
||||
[2Kpaperless-webserver | Applying admin.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying admin.0002_logentry_remove_auto_add... OK
|
||||
[2Kpaperless-webserver | Applying admin.0003_logentry_add_action_flag_choices... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0002_auto_support_long_primary_keys... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0003_logentry_remote_addr... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0004_logentry_detailed_object_repr... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0005_logentry_additional_data_verbose_name... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0006_object_pk_index... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0007_object_pk_type... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0008_action_index... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0009_alter_logentry_additional_data... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0010_alter_logentry_timestamp... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0011_logentry_serialized_data... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0012_add_logentry_action_access... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0013_alter_logentry_timestamp... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0014_logentry_cid... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0015_alter_logentry_changes... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0016_logentry_remote_port... OK
|
||||
[2Kpaperless-webserver | Applying auditlog.0017_add_actor_email... OK
|
||||
[2Kpaperless-webserver | Applying contenttypes.0002_remove_content_type_name... OK
|
||||
[2Kpaperless-webserver | Applying auth.0002_alter_permission_name_max_length... OK
|
||||
[2Kpaperless-webserver | Applying auth.0003_alter_user_email_max_length... OK
|
||||
[2Kpaperless-webserver | Applying auth.0004_alter_user_username_opts... OK
|
||||
[2Kpaperless-webserver | Applying auth.0005_alter_user_last_login_null... OK
|
||||
[2Kpaperless-webserver | Applying auth.0006_require_contenttypes_0002... OK
|
||||
[2Kpaperless-webserver | Applying auth.0007_alter_validators_add_error_messages... OK
|
||||
[2Kpaperless-webserver | Applying auth.0008_alter_user_username_max_length... OK
|
||||
[2Kpaperless-webserver | Applying auth.0009_alter_user_last_name_max_length... OK
|
||||
[2Kpaperless-webserver | Applying auth.0010_alter_group_name_max_length... OK
|
||||
[2Kpaperless-webserver | Applying auth.0011_update_proxy_permissions... OK
|
||||
[2Kpaperless-webserver | Applying auth.0012_alter_user_first_name_max_length... OK
|
||||
[2Kpaperless-webserver | Applying authtoken.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying authtoken.0002_auto_20160226_1747... OK
|
||||
[2Kpaperless-webserver | Applying authtoken.0003_tokenproxy... OK
|
||||
[2Kpaperless-webserver | Applying authtoken.0004_alter_tokenproxy_options... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0002_add_task_name_args_kwargs... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0003_auto_20181106_1101... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0004_auto_20190516_0412... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0005_taskresult_worker... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0006_taskresult_date_created... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0007_remove_taskresult_hidden... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0008_chordcounter... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0009_groupresult... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0010_remove_duplicate_indices... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0011_taskresult_periodic_task_name... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0012_taskresult_date_started... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0013_taskresult_django_cele_periodi_1993cf_idx... OK
|
||||
[2Kpaperless-webserver | Applying django_celery_results.0014_alter_taskresult_status... OK
|
||||
[2Kpaperless-webserver | Applying documents.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying documents.0002_auto_20151226_1316... OK
|
||||
[2Kpaperless-webserver | Applying documents.0003_sender... OK
|
||||
[2Kpaperless-webserver | Applying documents.0004_auto_20160114_1844_squashed_0011_auto_20160303_1929... OK
|
||||
[2Kpaperless-webserver | Applying documents.0012_auto_20160305_0040...[init-tesseract-langs] Installing package tesseract-ocr-hun...
|
||||
[2Kpaperless-webserver | OK
|
||||
[2Kpaperless-webserver | Applying documents.0013_auto_20160325_2111... OK
|
||||
[2Kpaperless-webserver | Applying documents.0014_document_checksum... OK
|
||||
[2Kpaperless-webserver | Applying documents.0015_add_insensitive_to_match_squashed_0018_auto_20170715_1712... OK
|
||||
[2Kpaperless-webserver | Applying documents.0019_add_consumer_user... OK
|
||||
[2Kpaperless-webserver | Applying documents.0020_document_added... OK
|
||||
[2Kpaperless-webserver | Applying documents.0021_document_storage_type... OK
|
||||
[2Kpaperless-webserver | Applying documents.0022_auto_20181007_1420... OK
|
||||
[2Kpaperless-webserver | Applying documents.0023_document_current_filename... OK
|
||||
[2Kpaperless-webserver | Applying documents.1000_update_paperless_all... OK
|
||||
[2Kpaperless-webserver | Applying documents.1001_auto_20201109_1636... OK
|
||||
[2Kpaperless-webserver | Applying documents.1002_auto_20201111_1105... OK
|
||||
[2Kpaperless-webserver | Applying documents.1003_mime_types... OK
|
||||
[2Kpaperless-webserver | Applying documents.1004_sanity_check_schedule... OK
|
||||
[2Kpaperless-webserver | Applying documents.1005_checksums... OK
|
||||
[2Kpaperless-webserver | Applying documents.1006_auto_20201208_2209_squashed_1011_auto_20210101_2340... OK
|
||||
[2Kpaperless-webserver | Applying paperless_mail.0001_initial_squashed_0009_mailrule_assign_tags... OK
|
||||
[2Kpaperless-webserver | Applying paperless_mail.0010_auto_20220311_1602... OK
|
||||
[2Kpaperless-webserver | Applying paperless_mail.0011_remove_mailrule_assign_tag_squashed_0024_alter_mailrule_name_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1012_fix_archive_files... OK
|
||||
[2Kpaperless-webserver | Applying documents.1013_migrate_tag_colour... OK
|
||||
[2Kpaperless-webserver | Applying documents.1014_auto_20210228_1614... OK
|
||||
[2Kpaperless-webserver | Applying documents.1015_remove_null_characters... OK
|
||||
[2Kpaperless-webserver | Applying documents.1016_auto_20210317_1351_squashed_1020_merge_20220518_1839... OK
|
||||
[2Kpaperless-webserver | Applying documents.1021_webp_thumbnail_conversion... OK
|
||||
[2Kpaperless-webserver | Applying documents.1022_paperlesstask_squashed_1036_alter_savedviewfilterrule_rule_type... OK
|
||||
[2Kpaperless-webserver | Applying documents.1037_webp_encrypted_thumbnail_conversion...[init-tesseract-langs] Installed tesseract-ocr-hun
|
||||
[2Kpaperless-webserver | [init-tesseract-langs] Additional packages installed
|
||||
[2Kpaperless-webserver | OK
|
||||
[2Kpaperless-webserver | Applying documents.1038_sharelink... OK
|
||||
[2Kpaperless-webserver | Applying documents.1039_consumptiontemplate... OK
|
||||
[2Kpaperless-webserver | Applying documents.1040_customfield_customfieldinstance_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1041_alter_consumptiontemplate_sources... OK
|
||||
[2Kpaperless-webserver | Applying documents.1042_consumptiontemplate_assign_custom_fields_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1043_alter_savedviewfilterrule_rule_type... OK
|
||||
[2Kpaperless-webserver | Applying documents.1044_workflow_workflowaction_workflowtrigger_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1045_alter_customfieldinstance_value_monetary_squashed_1049_document_deleted_at_document_restored_at... OK
|
||||
[2Kpaperless-webserver | Applying documents.1050_customfield_extra_data_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1051_alter_correspondent_owner_alter_document_owner_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1052_document_transaction_id... OK
|
||||
[2Kpaperless-webserver | Applying documents.1053_document_page_count... OK
|
||||
[2Kpaperless-webserver | Applying documents.1054_customfieldinstance_value_monetary_amount_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1055_alter_storagepath_path... OK
|
||||
[2Kpaperless-webserver | Applying documents.1056_customfieldinstance_deleted_at_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1057_paperlesstask_owner... OK
|
||||
[2Kpaperless-webserver | Applying documents.1058_workflowtrigger_schedule_date_custom_field_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1059_workflowactionemail_workflowactionwebhook_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1060_alter_customfieldinstance_value_select... OK
|
||||
[2Kpaperless-webserver | Applying documents.1061_workflowactionwebhook_as_json... OK
|
||||
[2Kpaperless-webserver | Applying documents.1062_alter_savedviewfilterrule_rule_type... OK
|
||||
[2Kpaperless-webserver | Applying documents.1063_paperlesstask_type_alter_paperlesstask_task_name_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1064_delete_log... OK
|
||||
[2Kpaperless-webserver | Applying documents.1065_workflowaction_assign_custom_fields_values... OK
|
||||
[2Kpaperless-webserver | Applying documents.1066_alter_workflowtrigger_schedule_offset_days... OK
|
||||
[2Kpaperless-webserver | Applying documents.1067_alter_document_created... OK
|
||||
[2Kpaperless-webserver | Applying documents.1068_alter_document_created... OK
|
||||
[2Kpaperless-webserver | Applying documents.1069_workflowtrigger_filter_has_storage_path_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1070_customfieldinstance_value_long_text_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1071_tag_tn_ancestors_count_tag_tn_ancestors_pks_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1072_workflowtrigger_filter_custom_field_query_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1073_migrate_workflow_title_jinja... OK
|
||||
[2Kpaperless-webserver | Applying documents.1074_workflowrun_deleted_at_workflowrun_restored_at_and_more... OK
|
||||
[2Kpaperless-webserver | Applying documents.1075_workflowaction_order... OK
|
||||
[2Kpaperless-webserver | Applying guardian.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying guardian.0002_generic_permissions_index... OK
|
||||
[2Kpaperless-webserver | Applying guardian.0003_remove_groupobjectpermission_guardian_gr_content_ae6aec_idx_and_more... OK
|
||||
[2Kpaperless-webserver | Applying mfa.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying mfa.0002_authenticator_timestamps... OK
|
||||
[2Kpaperless-webserver | Applying mfa.0003_authenticator_type_uniq... OK
|
||||
[2Kpaperless-webserver | Applying paperless.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying paperless.0002_applicationconfiguration_app_logo_and_more... OK
|
||||
[2Kpaperless-webserver | Applying paperless.0003_alter_applicationconfiguration_max_image_pixels... OK
|
||||
[2Kpaperless-webserver | Applying paperless.0004_applicationconfiguration_barcode_asn_prefix_and_more... OK
|
||||
[2Kpaperless-webserver | Applying paperless_mail.0025_alter_mailaccount_owner_alter_mailrule_owner_and_more... OK
|
||||
[2Kpaperless-webserver | Applying paperless_mail.0026_mailrule_enabled... OK
|
||||
[2Kpaperless-webserver | Applying paperless_mail.0027_mailaccount_expiration_mailaccount_account_type_and_more... OK
|
||||
[2Kpaperless-webserver | Applying paperless_mail.0028_alter_mailaccount_password_and_more... OK
|
||||
[2Kpaperless-webserver | Applying paperless_mail.0029_mailrule_pdf_layout... OK
|
||||
[2Kpaperless-webserver | Applying sessions.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying socialaccount.0001_initial... OK
|
||||
[2Kpaperless-webserver | Applying socialaccount.0002_token_max_lengths... OK
|
||||
[2Kpaperless-webserver | Applying socialaccount.0003_extra_data_default_dict... OK
|
||||
[2Kpaperless-webserver | Applying socialaccount.0004_app_provider_id_settings... OK
|
||||
[2Kpaperless-webserver | Applying socialaccount.0005_socialtoken_nullable_app... OK
|
||||
[2Kpaperless-webserver | Applying socialaccount.0006_alter_socialaccount_extra_data... OK
|
||||
[2Kpaperless-webserver | [init-superuser] Creating superuser...
|
||||
[2Kpaperless-webserver | [init-index] No index version file found
|
||||
[2Kpaperless-webserver | [init-index] Search index out of date. Updating...
|
||||
[2Kpaperless-webserver | Created superuser "admin" with provided password.
|
||||
[2Kpaperless-webserver | [init-superuser] Superuser creation done
|
||||
[2Kpaperless-webserver | [init-checks] Running Django checks
|
||||
[2Kpaperless-webserver | System check identified no issues (0 silenced).
|
||||
[2Kpaperless-webserver | [custom-init] /custom-cont-init.d doesn't exist, nothing to do
|
||||
[2Kpaperless-webserver | [init-complete] paperless-ngx docker container init completed in 35 seconds
|
||||
[2Kpaperless-webserver | [init-complete] Starting services
|
||||
[2Kpaperless-webserver | [svc-flower] Checking if we should start flower...
|
||||
[2Kpaperless-webserver | [svc-flower] Not starting flower
|
||||
[2Kpaperless-webserver | [INFO] Starting granian (main PID: 267)
|
||||
[2Kpaperless-webserver | [INFO] Listening at: http://:::8000
|
||||
[2Kpaperless-webserver | [INFO] Spawning worker-1 with PID: 290
|
||||
[2Kpaperless-webserver | celery beat v5.5.3 (immunity) is starting.
|
||||
[2Kpaperless-webserver | [2026-09-27 11:35:17,211] [INFO] [paperless.management.consumer] Polling directory for changes: /usr/src/paperless/consume
|
||||
[2Kpaperless-webserver | [2026-09-27 11:35:17,413] [INFO] [paperless.asgi] [init] Paperless-ngx version: v2.20.15
|
||||
[2Kpaperless-webserver | __ - ... __ - _
|
||||
[2Kpaperless-webserver | LocalTime -> 2026-09-27 11:35:18
|
||||
[2Kpaperless-webserver | Configuration ->
|
||||
[2Kpaperless-webserver | . broker -> redis://paperless-redis:6379//
|
||||
[2Kpaperless-webserver | . loader -> celery.loaders.app.AppLoader
|
||||
[2Kpaperless-webserver | . scheduler -> celery.beat.PersistentScheduler
|
||||
[2Kpaperless-webserver | . db -> /usr/src/paperless/data/celerybeat-schedule.db
|
||||
[2Kpaperless-webserver | . logfile -> [stderr]@%INFO
|
||||
[2Kpaperless-webserver | . maxinterval -> 5.00 minutes (300s)
|
||||
[2Kpaperless-webserver | [2026-09-27 11:35:18,163] [INFO] [celery.beat] beat: Starting...
|
||||
[2Kpaperless-webserver |
|
||||
[2Kpaperless-webserver | -------------- celery@3cca2aaddffe v5.5.3 (immunity)
|
||||
[2Kpaperless-webserver | --- ***** -----
|
||||
[2Kpaperless-webserver | -- ******* ---- Linux-7.0.2-6-pve-x86_64-with-glibc2.41 2026-09-27 11:35:18
|
||||
[2Kpaperless-webserver | - *** --- * ---
|
||||
[2Kpaperless-webserver | - ** ---------- [config]
|
||||
[2Kpaperless-webserver | - ** ---------- .> app: paperless:0x7337f6bde330
|
||||
[2Kpaperless-webserver | - ** ---------- .> transport: redis://paperless-redis:6379//
|
||||
[2Kpaperless-webserver | - ** ---------- .> results:
|
||||
[2Kpaperless-webserver | - *** --- * --- .> concurrency: 1 (prefork)
|
||||
[2Kpaperless-webserver | -- ******* ---- .> task events: ON
|
||||
[2Kpaperless-webserver | --- ***** -----
|
||||
[2Kpaperless-webserver | -------------- [queues]
|
||||
[2Kpaperless-webserver | .> celery exchange=celery(direct) key=celery
|
||||
[2Kpaperless-webserver |
|
||||
[2Kpaperless-webserver |
|
||||
[2Kpaperless-webserver | [tasks]
|
||||
[2Kpaperless-webserver | . documents.bulk_edit.delete
|
||||
[2Kpaperless-webserver | . documents.signals.handlers.process_cf_select_update
|
||||
[2Kpaperless-webserver | . documents.tasks.bulk_update_documents
|
||||
[2Kpaperless-webserver | . documents.tasks.check_scheduled_workflows
|
||||
[2Kpaperless-webserver | . documents.tasks.consume_file
|
||||
[2Kpaperless-webserver | . documents.tasks.empty_trash
|
||||
[2Kpaperless-webserver | . documents.tasks.index_optimize
|
||||
[2Kpaperless-webserver | . documents.tasks.sanity_check
|
||||
[2Kpaperless-webserver | . documents.tasks.train_classifier
|
||||
[2Kpaperless-webserver | . documents.tasks.update_document_content_maybe_archive_file
|
||||
[2Kpaperless-webserver | . documents.workflows.webhooks.send_webhook
|
||||
[2Kpaperless-webserver | . paperless_mail.mail.apply_mail_action
|
||||
[2Kpaperless-webserver | . paperless_mail.mail.error_callback
|
||||
[2Kpaperless-webserver | . paperless_mail.tasks.process_mail_accounts
|
||||
[2Kpaperless-webserver |
|
||||
[2Kpaperless-webserver | [2026-09-27 11:35:18,443] [INFO] [celery.worker.consumer.connection] Connected to redis://paperless-redis:6379//
|
||||
[2Kpaperless-webserver | [2026-09-27 11:35:18,464] [INFO] [celery.apps.worker] celery@3cca2aaddffe ready.
|
||||
[2Kpaperless-webserver | [INFO] Shutting down granian
|
||||
[2Kpaperless-webserver |
|
||||
[2Kpaperless-webserver | worker: Warm shutdown (MainProcess)
|
||||
[2Kpaperless-webserver | [init-start] paperless-ngx docker container starting...
|
||||
[2Kpaperless-webserver | [init-start] paperless-ngx docker container starting init as root
|
||||
[2Kpaperless-webserver | [env-init] Checking for environment from files
|
||||
[2Kpaperless-webserver | [env-init] No *_FILE environment found
|
||||
[2Kpaperless-webserver | [init-redis-wait] Waiting for Redis to report ready
|
||||
[2Kpaperless-webserver | [init-tesseract-langs] Checking if additional teseract languages needed
|
||||
[2Kpaperless-webserver | Installing languages...
|
||||
[2Kpaperless-webserver | [init-db-wait] Waiting for PostgreSQL to start...
|
||||
[2Kpaperless-webserver | [init-user] No UID changes for paperless
|
||||
[2Kpaperless-webserver | [init-user] No GID changes for paperless
|
||||
[2Kpaperless-webserver | [init-tesseract-langs] Package tesseract-ocr-eng already installed!
|
||||
[2Kpaperless-webserver | [init-folders] Running with root privileges, adjusting directories and permissions
|
||||
[2Kpaperless-webserver | [init-tesseract-langs] Package tesseract-ocr-hun already installed!
|
||||
[2Kpaperless-webserver | [init-tesseract-langs] Package tesseract-ocr-deu already installed!
|
||||
[2Kpaperless-webserver | [init-tesseract-langs] Additional packages installed
|
||||
[2Kpaperless-webserver | paperless-postgres:5432 - accepting connections
|
||||
[2Kpaperless-webserver | [init-db-wait] Connected to PostgreSQL
|
||||
[2Kpaperless-webserver | [init-db-wait] Database is ready
|
||||
[2Kpaperless-webserver | [init-migrations] Apply database migrations...
|
||||
[2Kpaperless-webserver | Waiting for Redis...
|
||||
[2Kpaperless-webserver | Connected to Redis broker.
|
||||
[2Kpaperless-webserver | [init-redis-wait] Redis ready
|
||||
[2Kpaperless-webserver | Operations to perform:
|
||||
[2Kpaperless-webserver | Apply all migrations: account, admin, auditlog, auth, authtoken, contenttypes, django_celery_results, documents, guardian, mfa, paperless, paperless_mail, sessions, socialaccount
|
||||
[2Kpaperless-webserver | Running migrations:
|
||||
[2Kpaperless-webserver | No migrations to apply.
|
||||
[2Kpaperless-webserver | [init-superuser] Creating superuser...
|
||||
[2Kpaperless-webserver | Did not create superuser, a user admin already exists
|
||||
[2Kpaperless-webserver | [init-superuser] Superuser creation done
|
||||
[2Kpaperless-webserver | [init-checks] Running Django checks
|
||||
[2Kpaperless-webserver | System check identified no issues (0 silenced).
|
||||
[2Kpaperless-webserver | [custom-init] /custom-cont-init.d doesn't exist, nothing to do
|
||||
[2Kpaperless-webserver | [init-complete] paperless-ngx docker container init completed in 20 seconds
|
||||
[2Kpaperless-webserver | [init-complete] Starting services
|
||||
[2Kpaperless-webserver | [svc-flower] Checking if we should start flower...
|
||||
[2Kpaperless-webserver | [svc-flower] Not starting flower
|
||||
[2Kpaperless-webserver | [INFO] Starting granian (main PID: 181)
|
||||
[2Kpaperless-webserver | [INFO] Listening at: http://:::8000
|
||||
[2Kpaperless-webserver | [INFO] Spawning worker-1 with PID: 200
|
||||
[2Kpaperless-webserver | celery beat v5.5.3 (immunity) is starting.
|
||||
[2Kpaperless-webserver | [2026-09-27 11:37:19,186] [INFO] [paperless.asgi] [init] Paperless-ngx version: v2.20.15
|
||||
[2Kpaperless-webserver | [2026-09-27 11:37:19,918] [INFO] [paperless.management.consumer] Polling directory for changes: /usr/src/paperless/consume
|
||||
[2Kpaperless-webserver | __ - ... __ - _
|
||||
[2Kpaperless-webserver | LocalTime -> 2026-09-27 11:37:20
|
||||
[2Kpaperless-webserver | Configuration ->
|
||||
[2Kpaperless-webserver | . broker -> redis://paperless-redis:6379//
|
||||
[2Kpaperless-webserver | . loader -> celery.loaders.app.AppLoader
|
||||
[2Kpaperless-webserver | . scheduler -> celery.beat.PersistentScheduler
|
||||
[2Kpaperless-webserver | . db -> /usr/src/paperless/data/celerybeat-schedule.db
|
||||
[2Kpaperless-webserver | . logfile -> [stderr]@%INFO
|
||||
[2Kpaperless-webserver | . maxinterval -> 5.00 minutes (300s)
|
||||
[2Kpaperless-webserver | [2026-09-27 11:37:20,475] [INFO] [celery.beat] beat: Starting...
|
||||
[2Kpaperless-webserver |
|
||||
[2Kpaperless-webserver | -------------- celery@3cca2aaddffe v5.5.3 (immunity)
|
||||
[2Kpaperless-webserver | --- ***** -----
|
||||
[2Kpaperless-webserver | -- ******* ---- Linux-7.0.2-6-pve-x86_64-with-glibc2.41 2026-09-27 11:37:20
|
||||
[2Kpaperless-webserver | - *** --- * ---
|
||||
[2Kpaperless-webserver | - ** ---------- [config]
|
||||
[2Kpaperless-webserver | - ** ---------- .> app: paperless:0x7e717854f800
|
||||
[2Kpaperless-webserver | - ** ---------- .> transport: redis://paperless-redis:6379//
|
||||
[2Kpaperless-webserver | - ** ---------- .> results:
|
||||
[2Kpaperless-webserver | - *** --- * --- .> concurrency: 1 (prefork)
|
||||
[2Kpaperless-webserver | -- ******* ---- .> task events: ON
|
||||
[2Kpaperless-webserver | --- ***** -----
|
||||
[2Kpaperless-webserver | -------------- [queues]
|
||||
[2Kpaperless-webserver | .> celery exchange=celery(direct) key=celery
|
||||
[2Kpaperless-webserver |
|
||||
[2Kpaperless-webserver |
|
||||
[2Kpaperless-webserver | [tasks]
|
||||
[2Kpaperless-webserver | . documents.bulk_edit.delete
|
||||
[2Kpaperless-webserver | . documents.signals.handlers.process_cf_select_update
|
||||
[2Kpaperless-webserver | . documents.tasks.bulk_update_documents
|
||||
[2Kpaperless-webserver | . documents.tasks.check_scheduled_workflows
|
||||
[2Kpaperless-webserver | . documents.tasks.consume_file
|
||||
[2Kpaperless-webserver | . documents.tasks.empty_trash
|
||||
[2Kpaperless-webserver | . documents.tasks.index_optimize
|
||||
[2Kpaperless-webserver | . documents.tasks.sanity_check
|
||||
[2Kpaperless-webserver | . documents.tasks.train_classifier
|
||||
[2Kpaperless-webserver | . documents.tasks.update_document_content_maybe_archive_file
|
||||
[2Kpaperless-webserver | . documents.workflows.webhooks.send_webhook
|
||||
[2Kpaperless-webserver | . paperless_mail.mail.apply_mail_action
|
||||
[2Kpaperless-webserver | . paperless_mail.mail.error_callback
|
||||
[2Kpaperless-webserver | . paperless_mail.tasks.process_mail_accounts
|
||||
[2Kpaperless-webserver |
|
||||
[2Kpaperless-webserver | [2026-09-27 11:37:21,038] [INFO] [celery.worker.consumer.connection] Connected to redis://paperless-redis:6379//
|
||||
[2Kpaperless-webserver | [2026-09-27 11:37:21,060] [INFO] [celery.apps.worker] celery@3cca2aaddffe ready.
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"paperless-postgres": {
|
||||
"status": "running",
|
||||
"health": "healthy",
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
},
|
||||
"paperless-redis": {
|
||||
"status": "running",
|
||||
"health": "healthy",
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
},
|
||||
"paperless-webserver": {
|
||||
"status": "running",
|
||||
"health": "healthy",
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
}
|
||||
}
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
{
|
||||
"harness_version": 4,
|
||||
"edge": "MV-paperless-ngx",
|
||||
"app": "paperless-ngx",
|
||||
"note": "night 2026-09-23 within-a-major move: paperless-postgres=postgres:18-alpine",
|
||||
"from": {
|
||||
"paperless-webserver": "ghcr.io/paperless-ngx/paperless-ngx:2.20.15",
|
||||
"paperless-postgres": "postgres:16-alpine",
|
||||
"paperless-redis": "redis:7-alpine"
|
||||
},
|
||||
"to": {
|
||||
"paperless-webserver": "ghcr.io/paperless-ngx/paperless-ngx:2.20.15",
|
||||
"paperless-postgres": "postgres:18-alpine",
|
||||
"paperless-redis": "redis:7-alpine"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "\u001b[2Kpaperless-webserver | [init-migrations] Apply database migrations...",
|
||||
"abort": "refuses",
|
||||
"abort_detail": "less-postgres | The files belonging to this database system will be owned by user \"postgres\".\n\u001b[2Kpaperless-postgres | This user must also own the server process.\n\u001b[2Kpaperless-postgres | \n\u001b[2Kpaperless-postgres | initdb: error: directory \"/var/lib/postgresql/data\" exists but is not empty\n\u001b[2Kpaperless-postgres | initdb: hint: If you want to create a new database system, either remove or empty the directory \"/var/lib/postgresql/data\" or run initdb with an argument other than \"/var/lib/postgresql/data\".\n\u001b[2Kpaperless-postgres | The database cluster will be initialized with locale \"en_US.utf8\".\n\u001b[2Kpaperless-postgres | The default database encoding has accordingly been set to \"UTF8\".\n\u001b[2Kpaperless-postgres | The default text search configuration will be set to \"english\".\n\u001b[2Kpaperless-postgres | \n\u001b[2Kpaperless-postgres | Data page checksums are disabled.\n\u001b[2Kpaperless-postgres |",
|
||||
"engine_state_after": {
|
||||
"paperless-postgres": {
|
||||
"image": "postgres:18-alpine",
|
||||
"probe": "datadir major version",
|
||||
"answer": "18",
|
||||
"probe_rc": 0
|
||||
}
|
||||
},
|
||||
"memory": {
|
||||
"soak_s": 606.9,
|
||||
"requested_s": 600,
|
||||
"requests": 11832,
|
||||
"codes": {
|
||||
"302": 11832
|
||||
},
|
||||
"first_kill": null,
|
||||
"containers": {
|
||||
"paperless-postgres": {
|
||||
"limit": 268435456,
|
||||
"peak": 193302528,
|
||||
"peak_pct": 0.72,
|
||||
"anon_peak_sampled": 10256384,
|
||||
"anon_peak_pct": 0.038,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
},
|
||||
"paperless-redis": {
|
||||
"limit": 134217728,
|
||||
"peak": 7303168,
|
||||
"peak_pct": 0.054,
|
||||
"anon_peak_sampled": 3137536,
|
||||
"anon_peak_pct": 0.023,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
},
|
||||
"paperless-webserver": {
|
||||
"limit": 1342177280,
|
||||
"peak": 660705280,
|
||||
"peak_pct": 0.492,
|
||||
"anon_peak_sampled": 537432064,
|
||||
"anon_peak_pct": 0.4,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
}
|
||||
},
|
||||
"unmeasured": [],
|
||||
"load": "reached"
|
||||
},
|
||||
"marks": [],
|
||||
"duration_s": 31.5,
|
||||
"measured_at": "2026-09-27T09:50:50Z",
|
||||
"evidence": "evidence/MV-paperless-ngx",
|
||||
"scratch_cleared": [],
|
||||
"engine_conversion": {
|
||||
"service": "paperless-postgres",
|
||||
"engine": "postgres",
|
||||
"from": 16,
|
||||
"to": 18,
|
||||
"dump_s": 0.63,
|
||||
"dump_bytes": 246453,
|
||||
"new_engine_ready_s": 6.4,
|
||||
"load_s": 2.59,
|
||||
"dropped": [
|
||||
"paperless"
|
||||
],
|
||||
"skipped_create_role": [
|
||||
"CREATE ROLE paperless;"
|
||||
],
|
||||
"result": "converted",
|
||||
"check_equal": true,
|
||||
"pg_version": "18",
|
||||
"tables": 72,
|
||||
"convert_s": 35.4
|
||||
},
|
||||
"files_changed": [],
|
||||
"total_s": 1024.4
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"app": "paperless-ngx",
|
||||
"venue": "box 9202 (drill catalog, controller 0.275.0-rc1), the product's guarded Update",
|
||||
"from": {
|
||||
"paperless-postgres": "postgres:16-alpine",
|
||||
"paperless-redis": "redis:7-alpine",
|
||||
"paperless-webserver": "ghcr.io/paperless-ngx/paperless-ngx:2.20.15"
|
||||
},
|
||||
"to": {
|
||||
"paperless-postgres": "postgres:18-alpine",
|
||||
"paperless-redis": "redis:7-alpine",
|
||||
"paperless-webserver": "ghcr.io/paperless-ngx/paperless-ngx:2.20.15"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"engine_conversion": {
|
||||
"service": "paperless-postgres",
|
||||
"engine": "postgres",
|
||||
"from": 16,
|
||||
"to": 18,
|
||||
"result": "converted",
|
||||
"controller_line": "update paperless-ngx: CONVERTED 16 \u2192 18 in 10.607s \u2014 the check is equal (2 database(s), 72 table(s), 812 row(s)), PG_VERSION 18"
|
||||
},
|
||||
"duration_s": 64.7,
|
||||
"measured_at": "2026-09-27T09:44:10Z",
|
||||
"evidence": "felhom.eu/documentation/audits/version-travel-2026-09-26/B/apps/paperless-ngx/box/move.txt"
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
before: pinned={'paperless-postgres': 'postgres:16-alpine', 'paperless-redis': 'redis:7-alpine', 'paperless-webserver': 'ghcr.io/paperless-ngx/paperless-ngx:2.20.15'} PG_VERSION=16
|
||||
drill: 48f45df DRILL paperless-ngx: paperless-postgres postgres:16-alpine -> postgres:18-alpine with the engine_conversion mark (box proof)
|
||||
phase +0.0s safety-dump | err=None
|
||||
phase +3.1s pulling | err=None
|
||||
phase +4.1s copying | err=None
|
||||
phase +12.3s converting | err=None
|
||||
phase +22.6s starting | err=None
|
||||
phase +33.9s verifying | err=None
|
||||
phase +64.6s done | err=None
|
||||
paperless-webserver: readback of the seeded account found=True
|
||||
2026/09/27 09:44:11 update.go:536: [INFO] [stacks] update paperless-ngx: accepted — guarded update started
|
||||
2026/09/27 09:44:11 update.go:1365: [INFO] [stacks] update paperless-ngx: phase checking
|
||||
2026/09/27 09:44:11 update.go:786: [INFO] [stacks] update paperless-ngx: ladder — the last step (1 of 1) — the catalog's current definition
|
||||
2026/09/27 09:44:11 update.go:800: [INFO] [stacks] update paperless-ngx: this step CONVERTS paperless-postgres PostgreSQL 16 → 18 (the ladder entry's mark); database volume paperless-ngx_paperless_postgres_data
|
||||
2026/09/27 09:44:11 update.go:814: [INFO] [stacks] update paperless-ngx: precondition met — Tier 2 (second drive) copy from 2026-09-27T00:30:00Z (9h14m0s old, limit 24h0m0s)
|
||||
2026/09/27 09:44:11 update.go:1365: [INFO] [stacks] update paperless-ngx: phase safety-dump
|
||||
2026/09/27 09:44:12 update.go:846: [INFO] [stacks] update paperless-ngx: safety dump done (1 file(s)) [/mnt/felhom-drives/scratch_hdd/userdata/paperless-ngx/backups/primary/paperless-ngx/db-dumps/pre-restore-20260927T094411Z-paperless-ngx-postgres.sql]
|
||||
2026/09/27 09:44:13 undo.go:287: [INFO] [stacks] update paperless-ngx: the undo copy will hold 3 named volume(s), 72.2 MiB
|
||||
2026/09/27 09:44:13 pgconvert.go:340: [INFO] [stacks] update paperless-ngx: conversion space — database volume paperless-ngx_paperless_postgres_data is 67 MB; the dump needs up to 84 MB + the 2 GB floor; 27.7 GB free beside the stack dir
|
||||
2026/09/27 09:44:13 update.go:1365: [INFO] [stacks] update paperless-ngx: phase pinning
|
||||
2026/09/27 09:44:13 pin.go:373: [INFO] [stacks] update paperless-ngx: pin advanced to /opt/docker/felhom-controller/data/catalog-cache/templates/paperless-ngx/docker-compose.yml (paperless-postgres=postgres:18-alpine, paperless-redis=redis:7-alpine, paperless-webserver=ghcr.io/paperless-ngx/paperless-ngx:2.20.15)
|
||||
2026/09/27 09:44:13 update.go:1365: [INFO] [stacks] update paperless-ngx: phase pulling
|
||||
2026/09/27 09:44:15 update.go:1365: [INFO] [stacks] update paperless-ngx: phase copying
|
||||
2026/09/27 09:44:21 update.go:1365: [INFO] [stacks] update paperless-ngx: phase copying
|
||||
2026/09/27 09:44:22 undo.go:437: [INFO] [stacks] update paperless-ngx: copied paperless-ngx_paperless_data → paperless-ngx_paperless_data.pre-update-20260927T094421Z in 477ms
|
||||
2026/09/27 09:44:22 update.go:1365: [INFO] [stacks] update paperless-ngx: phase copying
|
||||
2026/09/27 09:44:23 undo.go:437: [INFO] [stacks] update paperless-ngx: copied paperless-ngx_paperless_postgres_data → paperless-ngx_paperless_postgres_data.pre-update-20260927T094421Z in 954ms
|
||||
2026/09/27 09:44:23 update.go:1365: [INFO] [stacks] update paperless-ngx: phase copying
|
||||
2026/09/27 09:44:23 undo.go:437: [INFO] [stacks] update paperless-ngx: copied paperless-ngx_paperless_redis_data → paperless-ngx_paperless_redis_data.pre-update-20260927T094421Z in 454ms
|
||||
2026/09/27 09:44:23 update.go:1365: [INFO] [stacks] update paperless-ngx: phase converting
|
||||
2026/09/27 09:44:23 pgconvert.go:423: [INFO] [stacks] update paperless-ngx: CONVERTING paperless-postgres PostgreSQL 16 → 18 (volume paperless-ngx_paperless_postgres_data, kept copy paperless-ngx_paperless_postgres_data.pre-update-20260927T094421Z)
|
||||
2026/09/27 09:44:27 pgconvert.go:468: [INFO] [stacks] update paperless-ngx: pg_dumpall from 16 done in 609ms — 335 kB, completion line present; before: 2 database(s), 72 table(s), 812 row(s)
|
||||
2026/09/27 09:44:28 update.go:1365: [INFO] [stacks] update paperless-ngx: phase converting
|
||||
2026/09/27 09:44:28 pgconvert.go:484: [INFO] [stacks] update paperless-ngx: database volume paperless-ngx_paperless_postgres_data emptied (its copy paperless-ngx_paperless_postgres_data.pre-update-20260927T094421Z holds the old datadir, marker checked twice)
|
||||
2026/09/27 09:44:33 pgconvert.go:513: [INFO] [stacks] update paperless-ngx: loaded into 18 in 2.318s (dropped the entrypoint's empty database(s) [paperless]; skipped CREATE ROLE for [paperless])
|
||||
2026/09/27 09:44:34 pgconvert.go:529: [INFO] [stacks] update paperless-ngx: CONVERTED 16 → 18 in 10.607s — the check is equal (2 database(s), 72 table(s), 812 row(s)), PG_VERSION 18
|
||||
2026/09/27 09:44:34 update.go:1365: [INFO] [stacks] update paperless-ngx: phase starting
|
||||
2026/09/27 09:44:45 update.go:1365: [INFO] [stacks] update paperless-ngx: phase verifying
|
||||
2026/09/27 09:45:15 update.go:997: [INFO] [stacks] update paperless-ngx: healthy after 30s (the app's health check passed)
|
||||
2026/09/27 09:45:15 update.go:1015: [INFO] [stacks] update paperless-ngx: KEEPING the pre-conversion datadir copy paperless-ngx_paperless_postgres_data.pre-update-20260927T094421Z (PostgreSQL 16) until a backup of the converted app is proven
|
||||
2026/09/27 09:45:15 update.go:1033: [INFO] [stacks] update paperless-ngx: DONE in 1m4s
|
||||
|
||||
RESULT final_phase=done PG_VERSION=18 seed_after=True verdict=proven
|
||||
@@ -0,0 +1,5 @@
|
||||
deploy/reuse paperless-ngx: True
|
||||
paperless-webserver: createsuperuser :: Superuser created successfully.
|
||||
paperless-webserver: seeded superuser drill411bd8
|
||||
paperless-webserver: readback of the seeded account found=True
|
||||
C1 seed reads back BEFORE: True
|
||||
@@ -0,0 +1,153 @@
|
||||
[09:50:59] scratch drive folders cleared before FROM (R-656): none existed
|
||||
[09:50:59] MV-tandoor: deploying tandoor at FROM {'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:16-alpine'}
|
||||
[09:52:53] FROM settled=True in 61.9s :: {"tandoor": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "tandoor-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[09:52:53] fixture: the BOX walk's own (Django), through upgrade_boxport
|
||||
[09:53:03] tandoor: createsuperuser :: Running django-vite in production mode (no HMR) Superuser created successfully.
|
||||
[09:53:04] tandoor: seeded superuser drill2e9797
|
||||
[09:53:07] tandoor: readback of the seeded account found=True
|
||||
[09:53:07] C1 (seed reads back BEFORE): True
|
||||
[09:53:07] MV-tandoor: PostgreSQL major move {'service': 'tandoor-postgres', 'engine': 'postgres', 'from': 16, 'to': 17} — converting on the bench before the swap
|
||||
[09:53:31] CONVERTED tandoor-postgres PostgreSQL 16 -> 17 in 23.6s (dump 0.71s / 338574 B, load 3.04s, check equal over 100 tables)
|
||||
[09:53:31] MV-tandoor: swapping to TO {'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'}
|
||||
[09:53:35] TO up -d rc=0
|
||||
[09:54:06] TO settled=True in 31.0s :: {"tandoor": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "tandoor-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[09:54:06] engine state tandoor-postgres: 17
|
||||
[09:54:07] migration lines observed: 4
|
||||
[09:54:09] tandoor: readback of the seeded account found=True
|
||||
[09:54:09] RESULT (seed reads back AFTER): True
|
||||
[09:54:10] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:80
|
||||
[09:54:25] + 15s tandoor=951M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=158M/256M peak=183M kills=0 rs=0 reqs=295
|
||||
[09:54:40] + 30s tandoor=951M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=591
|
||||
[09:54:55] + 45s tandoor=952M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=887
|
||||
[09:55:10] + 60s tandoor=952M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=1182
|
||||
[09:55:25] + 76s tandoor=952M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=1478
|
||||
[09:55:40] + 91s tandoor=952M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=158M/256M peak=183M kills=0 rs=0 reqs=1773
|
||||
[09:55:56] + 106s tandoor=952M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=2068
|
||||
[09:56:11] + 121s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=158M/256M peak=183M kills=0 rs=0 reqs=2363
|
||||
[09:56:26] + 136s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=2656
|
||||
[09:56:41] + 151s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=2952
|
||||
[09:56:56] + 166s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=3248
|
||||
[09:57:11] + 182s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=3544
|
||||
[09:57:26] + 197s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=3840
|
||||
[09:57:42] + 212s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=158M/256M peak=183M kills=0 rs=0 reqs=4136
|
||||
[09:57:57] + 227s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=158M/256M peak=183M kills=0 rs=0 reqs=4428
|
||||
[09:58:12] + 242s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=4724
|
||||
[09:58:27] + 257s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=5020
|
||||
[09:58:42] + 272s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=159M/256M peak=183M kills=0 rs=0 reqs=5316
|
||||
[09:58:57] + 288s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=160M/256M peak=183M kills=0 rs=0 reqs=5612
|
||||
[09:59:12] + 303s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=161M/256M peak=183M kills=0 rs=0 reqs=5908
|
||||
[09:59:27] + 318s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=161M/256M peak=183M kills=0 rs=0 reqs=6202
|
||||
[09:59:43] + 333s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=162M/256M peak=183M kills=0 rs=0 reqs=6497
|
||||
[09:59:58] + 348s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=163M/256M peak=183M kills=0 rs=0 reqs=6793
|
||||
[10:00:13] + 363s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=7089
|
||||
[10:00:28] + 378s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=7385
|
||||
[10:00:43] + 394s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=166M/256M peak=183M kills=0 rs=0 reqs=7681
|
||||
[10:00:58] + 409s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=7975
|
||||
[10:01:13] + 424s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=8270
|
||||
[10:01:29] + 439s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=166M/256M peak=183M kills=0 rs=0 reqs=8566
|
||||
[10:01:44] + 454s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=8862
|
||||
[10:01:59] + 469s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=9158
|
||||
[10:02:14] + 484s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=166M/256M peak=183M kills=0 rs=0 reqs=9454
|
||||
[10:02:29] + 499s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=9750
|
||||
[10:02:44] + 514s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=10046
|
||||
[10:02:59] + 530s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=166M/256M peak=183M kills=0 rs=0 reqs=10342
|
||||
[10:03:14] + 545s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=10636
|
||||
[10:03:30] + 560s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=10930
|
||||
[10:03:45] + 575s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=11226
|
||||
[10:04:00] + 590s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=11522
|
||||
[10:04:15] + 605s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=11818
|
||||
[10:04:15] memory watch: killed=False tight=[] requests=11818 codes={'302': 11818}
|
||||
[10:04:15] MV-tandoor: ABORT — putting the FROM images back
|
||||
[10:07:25] ABORT: the app did NOT come back (rc=1, 184.7s)
|
||||
{
|
||||
"harness_version": 4,
|
||||
"edge": "MV-tandoor",
|
||||
"app": "tandoor",
|
||||
"note": "night 2026-09-23 within-a-major move: tandoor-postgres=postgres:17-alpine",
|
||||
"from": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"to": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:17-alpine"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "\u001b[2Ktandoor | Migrating database",
|
||||
"abort": "refuses",
|
||||
"abort_detail": "rsion 16.15.\n\u001b[2Ktandoor-postgres | \n\u001b[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization\n\u001b[2Ktandoor-postgres | \n\u001b[2Ktandoor-postgres | 2026-09-27 12:06:04.351 CEST [1] FATAL: database files are incompatible with server\n\u001b[2Ktandoor-postgres | 2026-09-27 12:06:04.351 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.\n\u001b[2Ktandoor-postgres | \n\u001b[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization\n\u001b[2Ktandoor-postgres | \n\u001b[2Ktandoor-postgres | 2026-09-27 12:07:04.677 CEST [1] FATAL: database files are incompatible with server\n\u001b[2Ktandoor-postgres | 2026-09-27 12:07:04.677 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.",
|
||||
"engine_state_after": {
|
||||
"tandoor-postgres": {
|
||||
"image": "postgres:17-alpine",
|
||||
"probe": "datadir major version",
|
||||
"answer": "17",
|
||||
"probe_rc": 0
|
||||
}
|
||||
},
|
||||
"memory": {
|
||||
"soak_s": 605.6,
|
||||
"requested_s": 600,
|
||||
"requests": 11818,
|
||||
"codes": {
|
||||
"302": 11818
|
||||
},
|
||||
"first_kill": null,
|
||||
"containers": {
|
||||
"tandoor": {
|
||||
"limit": 1073741824,
|
||||
"peak": 1049731072,
|
||||
"peak_pct": 0.978,
|
||||
"anon_peak_sampled": 845176832,
|
||||
"anon_peak_pct": 0.787,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
},
|
||||
"tandoor-postgres": {
|
||||
"limit": 268435456,
|
||||
"peak": 192729088,
|
||||
"peak_pct": 0.718,
|
||||
"anon_peak_sampled": 13815808,
|
||||
"anon_peak_pct": 0.051,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
}
|
||||
},
|
||||
"unmeasured": [],
|
||||
"load": "reached"
|
||||
},
|
||||
"marks": [],
|
||||
"duration_s": 31.0,
|
||||
"measured_at": "2026-09-27T10:07:25Z",
|
||||
"evidence": "evidence/MV-tandoor",
|
||||
"scratch_cleared": [],
|
||||
"engine_conversion": {
|
||||
"service": "tandoor-postgres",
|
||||
"engine": "postgres",
|
||||
"from": 16,
|
||||
"to": 17,
|
||||
"dump_s": 0.71,
|
||||
"dump_bytes": 338574,
|
||||
"new_engine_ready_s": 2.2,
|
||||
"load_s": 3.04,
|
||||
"dropped": [
|
||||
"tandoor"
|
||||
],
|
||||
"skipped_create_role": [
|
||||
"CREATE ROLE tandoor;"
|
||||
],
|
||||
"result": "converted",
|
||||
"check_equal": true,
|
||||
"pg_version": "17",
|
||||
"tables": 100,
|
||||
"convert_s": 23.6
|
||||
},
|
||||
"files_changed": [],
|
||||
"total_s": 985.7
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:21.604 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:21.604 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:23.533 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:23.533 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:27.053 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:27.053 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:33.779 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:33.779 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:46.906 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:46.906 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:05:12.828 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:05:12.828 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:06:04.351 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:06:04.351 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:07:04.677 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:07:04.677 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"tandoor": {
|
||||
"status": "created",
|
||||
"health": null,
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
},
|
||||
"tandoor-postgres": {
|
||||
"status": "restarting",
|
||||
"health": "unhealthy",
|
||||
"restarts": 0,
|
||||
"exit": 1
|
||||
}
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:18.773 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:18.773 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:19.223 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:19.223 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:19.775 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:19.775 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:20.491 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:20.491 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:21.604 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:21.604 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:23.533 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:23.533 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:27.053 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:27.053 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:33.779 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:33.779 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:46.906 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:04:46.906 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:05:12.828 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:05:12.828 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:06:04.351 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:06:04.351 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
[2Ktandoor-postgres |
|
||||
[2Ktandoor-postgres | 2026-09-27 12:07:04.677 CEST [1] FATAL: database files are incompatible with server
|
||||
[2Ktandoor-postgres | 2026-09-27 12:07:04.677 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
db:postgres owner=tandoor enc=UTF8 coll=en_US.utf8
|
||||
db:tandoor owner=tandoor enc=UTF8 coll=en_US.utf8
|
||||
ext:tandoor:pg_trgm
|
||||
ext:tandoor:plpgsql
|
||||
ext:tandoor:unaccent
|
||||
role:tandoor super=true login=true pw=true
|
||||
rows:tandoor:public.account_emailaddress=0
|
||||
rows:tandoor:public.account_emailconfirmation=0
|
||||
rows:tandoor:public.auth_group=3
|
||||
rows:tandoor:public.auth_group_permissions=0
|
||||
rows:tandoor:public.auth_permission=288
|
||||
rows:tandoor:public.auth_user=1
|
||||
rows:tandoor:public.auth_user_groups=0
|
||||
rows:tandoor:public.auth_user_user_permissions=0
|
||||
rows:tandoor:public.authtoken_token=0
|
||||
rows:tandoor:public.cookbook_ailog=0
|
||||
rows:tandoor:public.cookbook_aiprovider=0
|
||||
rows:tandoor:public.cookbook_automation=0
|
||||
rows:tandoor:public.cookbook_bookmarkletimport=0
|
||||
rows:tandoor:public.cookbook_comment=0
|
||||
rows:tandoor:public.cookbook_connectorconfig=0
|
||||
rows:tandoor:public.cookbook_cooklog=0
|
||||
rows:tandoor:public.cookbook_customfilter=0
|
||||
rows:tandoor:public.cookbook_customfilter_shared=0
|
||||
rows:tandoor:public.cookbook_exportlog=0
|
||||
rows:tandoor:public.cookbook_food=0
|
||||
rows:tandoor:public.cookbook_food_child_inherit_fields=0
|
||||
rows:tandoor:public.cookbook_food_inherit_fields=0
|
||||
rows:tandoor:public.cookbook_food_onhand_users=0
|
||||
rows:tandoor:public.cookbook_food_shopping_lists=0
|
||||
rows:tandoor:public.cookbook_food_substitute=0
|
||||
rows:tandoor:public.cookbook_foodinheritfield=6
|
||||
rows:tandoor:public.cookbook_foodproperty=0
|
||||
rows:tandoor:public.cookbook_household=0
|
||||
rows:tandoor:public.cookbook_importlog=0
|
||||
rows:tandoor:public.cookbook_ingredient=0
|
||||
rows:tandoor:public.cookbook_inventoryentry=0
|
||||
rows:tandoor:public.cookbook_inventorylocation=0
|
||||
rows:tandoor:public.cookbook_inventorylog=0
|
||||
rows:tandoor:public.cookbook_invitelink=0
|
||||
rows:tandoor:public.cookbook_keyword=0
|
||||
rows:tandoor:public.cookbook_mealplan=0
|
||||
rows:tandoor:public.cookbook_mealplan_shared=0
|
||||
rows:tandoor:public.cookbook_mealtype=0
|
||||
rows:tandoor:public.cookbook_nutritioninformation=0
|
||||
rows:tandoor:public.cookbook_property=0
|
||||
rows:tandoor:public.cookbook_propertytype=0
|
||||
rows:tandoor:public.cookbook_recipe=0
|
||||
rows:tandoor:public.cookbook_recipe_keywords=0
|
||||
rows:tandoor:public.cookbook_recipe_properties=0
|
||||
rows:tandoor:public.cookbook_recipe_shared=0
|
||||
rows:tandoor:public.cookbook_recipe_steps=0
|
||||
rows:tandoor:public.cookbook_recipebook=0
|
||||
rows:tandoor:public.cookbook_recipebook_shared=0
|
||||
rows:tandoor:public.cookbook_recipebookentry=0
|
||||
rows:tandoor:public.cookbook_recipeimport=0
|
||||
rows:tandoor:public.cookbook_searchfields=6
|
||||
rows:tandoor:public.cookbook_searchpreference=0
|
||||
rows:tandoor:public.cookbook_searchpreference_fulltext=0
|
||||
rows:tandoor:public.cookbook_searchpreference_icontains=0
|
||||
rows:tandoor:public.cookbook_searchpreference_istartswith=0
|
||||
rows:tandoor:public.cookbook_searchpreference_trigram=0
|
||||
rows:tandoor:public.cookbook_searchpreference_unaccent=0
|
||||
rows:tandoor:public.cookbook_sharelink=0
|
||||
rows:tandoor:public.cookbook_shoppinglist=0
|
||||
rows:tandoor:public.cookbook_shoppinglistentry=0
|
||||
rows:tandoor:public.cookbook_shoppinglistentry_shopping_lists=0
|
||||
rows:tandoor:public.cookbook_shoppinglistrecipe=0
|
||||
rows:tandoor:public.cookbook_space=0
|
||||
rows:tandoor:public.cookbook_space_food_inherit=0
|
||||
rows:tandoor:public.cookbook_step=0
|
||||
rows:tandoor:public.cookbook_step_ingredients=0
|
||||
rows:tandoor:public.cookbook_storage=0
|
||||
rows:tandoor:public.cookbook_supermarket=0
|
||||
rows:tandoor:public.cookbook_supermarket_shopping_lists=0
|
||||
rows:tandoor:public.cookbook_supermarketcategory=0
|
||||
rows:tandoor:public.cookbook_supermarketcategoryrelation=0
|
||||
rows:tandoor:public.cookbook_sync=0
|
||||
rows:tandoor:public.cookbook_synclog=0
|
||||
rows:tandoor:public.cookbook_telegrambot=0
|
||||
rows:tandoor:public.cookbook_unit=0
|
||||
rows:tandoor:public.cookbook_unitconversion=0
|
||||
rows:tandoor:public.cookbook_userfile=0
|
||||
rows:tandoor:public.cookbook_userpreference=1
|
||||
rows:tandoor:public.cookbook_userpreference_plan_share=0
|
||||
rows:tandoor:public.cookbook_userpreference_shopping_share=0
|
||||
rows:tandoor:public.cookbook_userspace=0
|
||||
rows:tandoor:public.cookbook_userspace_groups=0
|
||||
rows:tandoor:public.cookbook_viewlog=0
|
||||
rows:tandoor:public.django_admin_log=0
|
||||
rows:tandoor:public.django_content_type=72
|
||||
rows:tandoor:public.django_migrations=309
|
||||
rows:tandoor:public.django_session=0
|
||||
rows:tandoor:public.django_site=1
|
||||
rows:tandoor:public.mfa_authenticator=0
|
||||
rows:tandoor:public.oauth2_provider_accesstoken=0
|
||||
rows:tandoor:public.oauth2_provider_application=0
|
||||
rows:tandoor:public.oauth2_provider_devicegrant=0
|
||||
rows:tandoor:public.oauth2_provider_grant=0
|
||||
rows:tandoor:public.oauth2_provider_idtoken=0
|
||||
rows:tandoor:public.oauth2_provider_refreshtoken=0
|
||||
rows:tandoor:public.socialaccount_socialaccount=0
|
||||
rows:tandoor:public.socialaccount_socialapp=0
|
||||
rows:tandoor:public.socialaccount_socialapp_sites=0
|
||||
rows:tandoor:public.socialaccount_socialtoken=0
|
||||
rows:tandoor:public.usersessions_usersession=0
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
db:postgres owner=tandoor enc=UTF8 coll=en_US.utf8
|
||||
db:tandoor owner=tandoor enc=UTF8 coll=en_US.utf8
|
||||
ext:tandoor:pg_trgm
|
||||
ext:tandoor:plpgsql
|
||||
ext:tandoor:unaccent
|
||||
role:tandoor super=true login=true pw=true
|
||||
rows:tandoor:public.account_emailaddress=0
|
||||
rows:tandoor:public.account_emailconfirmation=0
|
||||
rows:tandoor:public.auth_group=3
|
||||
rows:tandoor:public.auth_group_permissions=0
|
||||
rows:tandoor:public.auth_permission=288
|
||||
rows:tandoor:public.auth_user=1
|
||||
rows:tandoor:public.auth_user_groups=0
|
||||
rows:tandoor:public.auth_user_user_permissions=0
|
||||
rows:tandoor:public.authtoken_token=0
|
||||
rows:tandoor:public.cookbook_ailog=0
|
||||
rows:tandoor:public.cookbook_aiprovider=0
|
||||
rows:tandoor:public.cookbook_automation=0
|
||||
rows:tandoor:public.cookbook_bookmarkletimport=0
|
||||
rows:tandoor:public.cookbook_comment=0
|
||||
rows:tandoor:public.cookbook_connectorconfig=0
|
||||
rows:tandoor:public.cookbook_cooklog=0
|
||||
rows:tandoor:public.cookbook_customfilter=0
|
||||
rows:tandoor:public.cookbook_customfilter_shared=0
|
||||
rows:tandoor:public.cookbook_exportlog=0
|
||||
rows:tandoor:public.cookbook_food=0
|
||||
rows:tandoor:public.cookbook_food_child_inherit_fields=0
|
||||
rows:tandoor:public.cookbook_food_inherit_fields=0
|
||||
rows:tandoor:public.cookbook_food_onhand_users=0
|
||||
rows:tandoor:public.cookbook_food_shopping_lists=0
|
||||
rows:tandoor:public.cookbook_food_substitute=0
|
||||
rows:tandoor:public.cookbook_foodinheritfield=6
|
||||
rows:tandoor:public.cookbook_foodproperty=0
|
||||
rows:tandoor:public.cookbook_household=0
|
||||
rows:tandoor:public.cookbook_importlog=0
|
||||
rows:tandoor:public.cookbook_ingredient=0
|
||||
rows:tandoor:public.cookbook_inventoryentry=0
|
||||
rows:tandoor:public.cookbook_inventorylocation=0
|
||||
rows:tandoor:public.cookbook_inventorylog=0
|
||||
rows:tandoor:public.cookbook_invitelink=0
|
||||
rows:tandoor:public.cookbook_keyword=0
|
||||
rows:tandoor:public.cookbook_mealplan=0
|
||||
rows:tandoor:public.cookbook_mealplan_shared=0
|
||||
rows:tandoor:public.cookbook_mealtype=0
|
||||
rows:tandoor:public.cookbook_nutritioninformation=0
|
||||
rows:tandoor:public.cookbook_property=0
|
||||
rows:tandoor:public.cookbook_propertytype=0
|
||||
rows:tandoor:public.cookbook_recipe=0
|
||||
rows:tandoor:public.cookbook_recipe_keywords=0
|
||||
rows:tandoor:public.cookbook_recipe_properties=0
|
||||
rows:tandoor:public.cookbook_recipe_shared=0
|
||||
rows:tandoor:public.cookbook_recipe_steps=0
|
||||
rows:tandoor:public.cookbook_recipebook=0
|
||||
rows:tandoor:public.cookbook_recipebook_shared=0
|
||||
rows:tandoor:public.cookbook_recipebookentry=0
|
||||
rows:tandoor:public.cookbook_recipeimport=0
|
||||
rows:tandoor:public.cookbook_searchfields=6
|
||||
rows:tandoor:public.cookbook_searchpreference=0
|
||||
rows:tandoor:public.cookbook_searchpreference_fulltext=0
|
||||
rows:tandoor:public.cookbook_searchpreference_icontains=0
|
||||
rows:tandoor:public.cookbook_searchpreference_istartswith=0
|
||||
rows:tandoor:public.cookbook_searchpreference_trigram=0
|
||||
rows:tandoor:public.cookbook_searchpreference_unaccent=0
|
||||
rows:tandoor:public.cookbook_sharelink=0
|
||||
rows:tandoor:public.cookbook_shoppinglist=0
|
||||
rows:tandoor:public.cookbook_shoppinglistentry=0
|
||||
rows:tandoor:public.cookbook_shoppinglistentry_shopping_lists=0
|
||||
rows:tandoor:public.cookbook_shoppinglistrecipe=0
|
||||
rows:tandoor:public.cookbook_space=0
|
||||
rows:tandoor:public.cookbook_space_food_inherit=0
|
||||
rows:tandoor:public.cookbook_step=0
|
||||
rows:tandoor:public.cookbook_step_ingredients=0
|
||||
rows:tandoor:public.cookbook_storage=0
|
||||
rows:tandoor:public.cookbook_supermarket=0
|
||||
rows:tandoor:public.cookbook_supermarket_shopping_lists=0
|
||||
rows:tandoor:public.cookbook_supermarketcategory=0
|
||||
rows:tandoor:public.cookbook_supermarketcategoryrelation=0
|
||||
rows:tandoor:public.cookbook_sync=0
|
||||
rows:tandoor:public.cookbook_synclog=0
|
||||
rows:tandoor:public.cookbook_telegrambot=0
|
||||
rows:tandoor:public.cookbook_unit=0
|
||||
rows:tandoor:public.cookbook_unitconversion=0
|
||||
rows:tandoor:public.cookbook_userfile=0
|
||||
rows:tandoor:public.cookbook_userpreference=1
|
||||
rows:tandoor:public.cookbook_userpreference_plan_share=0
|
||||
rows:tandoor:public.cookbook_userpreference_shopping_share=0
|
||||
rows:tandoor:public.cookbook_userspace=0
|
||||
rows:tandoor:public.cookbook_userspace_groups=0
|
||||
rows:tandoor:public.cookbook_viewlog=0
|
||||
rows:tandoor:public.django_admin_log=0
|
||||
rows:tandoor:public.django_content_type=72
|
||||
rows:tandoor:public.django_migrations=309
|
||||
rows:tandoor:public.django_session=0
|
||||
rows:tandoor:public.django_site=1
|
||||
rows:tandoor:public.mfa_authenticator=0
|
||||
rows:tandoor:public.oauth2_provider_accesstoken=0
|
||||
rows:tandoor:public.oauth2_provider_application=0
|
||||
rows:tandoor:public.oauth2_provider_devicegrant=0
|
||||
rows:tandoor:public.oauth2_provider_grant=0
|
||||
rows:tandoor:public.oauth2_provider_idtoken=0
|
||||
rows:tandoor:public.oauth2_provider_refreshtoken=0
|
||||
rows:tandoor:public.socialaccount_socialaccount=0
|
||||
rows:tandoor:public.socialaccount_socialapp=0
|
||||
rows:tandoor:public.socialaccount_socialapp_sites=0
|
||||
rows:tandoor:public.socialaccount_socialtoken=0
|
||||
rows:tandoor:public.usersessions_usersession=0
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"tandoor-postgres": {
|
||||
"image": "postgres:17-alpine",
|
||||
"probe": "datadir major version",
|
||||
"answer": "17",
|
||||
"probe_rc": 0
|
||||
}
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{}
|
||||
+1122
File diff suppressed because it is too large
Load Diff
+4
@@ -0,0 +1,4 @@
|
||||
[2Ktandoor | Migrating database
|
||||
[2Ktandoor | Apply all migrations: account, admin, auth, authtoken, contenttypes, cookbook, mfa, oauth2_provider, sessions, sites, socialaccount, usersessions
|
||||
[2Ktandoor | Running migrations:
|
||||
[2Ktandoor | No migrations to apply.
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
[09:50:59] scratch drive folders cleared before FROM (R-656): none existed
|
||||
[09:50:59] MV-tandoor: deploying tandoor at FROM {'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:16-alpine'}
|
||||
[09:52:53] FROM settled=True in 61.9s :: {"tandoor": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "tandoor-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[09:52:53] fixture: the BOX walk's own (Django), through upgrade_boxport
|
||||
[09:53:03] tandoor: createsuperuser :: Running django-vite in production mode (no HMR) Superuser created successfully.
|
||||
[09:53:04] tandoor: seeded superuser drill2e9797
|
||||
[09:53:07] tandoor: readback of the seeded account found=True
|
||||
[09:53:07] C1 (seed reads back BEFORE): True
|
||||
[09:53:07] MV-tandoor: PostgreSQL major move {'service': 'tandoor-postgres', 'engine': 'postgres', 'from': 16, 'to': 17} — converting on the bench before the swap
|
||||
[09:53:31] CONVERTED tandoor-postgres PostgreSQL 16 -> 17 in 23.6s (dump 0.71s / 338574 B, load 3.04s, check equal over 100 tables)
|
||||
[09:53:31] MV-tandoor: swapping to TO {'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'}
|
||||
[09:53:35] TO up -d rc=0
|
||||
[09:54:06] TO settled=True in 31.0s :: {"tandoor": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "tandoor-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[09:54:06] engine state tandoor-postgres: 17
|
||||
[09:54:07] migration lines observed: 4
|
||||
[09:54:09] tandoor: readback of the seeded account found=True
|
||||
[09:54:09] RESULT (seed reads back AFTER): True
|
||||
[09:54:10] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:80
|
||||
[09:54:25] + 15s tandoor=951M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=158M/256M peak=183M kills=0 rs=0 reqs=295
|
||||
[09:54:40] + 30s tandoor=951M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=591
|
||||
[09:54:55] + 45s tandoor=952M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=887
|
||||
[09:55:10] + 60s tandoor=952M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=1182
|
||||
[09:55:25] + 76s tandoor=952M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=1478
|
||||
[09:55:40] + 91s tandoor=952M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=158M/256M peak=183M kills=0 rs=0 reqs=1773
|
||||
[09:55:56] + 106s tandoor=952M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=2068
|
||||
[09:56:11] + 121s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=158M/256M peak=183M kills=0 rs=0 reqs=2363
|
||||
[09:56:26] + 136s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=2656
|
||||
[09:56:41] + 151s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=2952
|
||||
[09:56:56] + 166s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=3248
|
||||
[09:57:11] + 182s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=3544
|
||||
[09:57:26] + 197s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=3840
|
||||
[09:57:42] + 212s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=158M/256M peak=183M kills=0 rs=0 reqs=4136
|
||||
[09:57:57] + 227s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=158M/256M peak=183M kills=0 rs=0 reqs=4428
|
||||
[09:58:12] + 242s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=4724
|
||||
[09:58:27] + 257s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=157M/256M peak=183M kills=0 rs=0 reqs=5020
|
||||
[09:58:42] + 272s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=159M/256M peak=183M kills=0 rs=0 reqs=5316
|
||||
[09:58:57] + 288s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=160M/256M peak=183M kills=0 rs=0 reqs=5612
|
||||
[09:59:12] + 303s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=161M/256M peak=183M kills=0 rs=0 reqs=5908
|
||||
[09:59:27] + 318s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=161M/256M peak=183M kills=0 rs=0 reqs=6202
|
||||
[09:59:43] + 333s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=162M/256M peak=183M kills=0 rs=0 reqs=6497
|
||||
[09:59:58] + 348s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=163M/256M peak=183M kills=0 rs=0 reqs=6793
|
||||
[10:00:13] + 363s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=7089
|
||||
[10:00:28] + 378s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=7385
|
||||
[10:00:43] + 394s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=166M/256M peak=183M kills=0 rs=0 reqs=7681
|
||||
[10:00:58] + 409s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=7975
|
||||
[10:01:13] + 424s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=8270
|
||||
[10:01:29] + 439s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=166M/256M peak=183M kills=0 rs=0 reqs=8566
|
||||
[10:01:44] + 454s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=8862
|
||||
[10:01:59] + 469s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=9158
|
||||
[10:02:14] + 484s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=166M/256M peak=183M kills=0 rs=0 reqs=9454
|
||||
[10:02:29] + 499s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=9750
|
||||
[10:02:44] + 514s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=10046
|
||||
[10:02:59] + 530s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=166M/256M peak=183M kills=0 rs=0 reqs=10342
|
||||
[10:03:14] + 545s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=10636
|
||||
[10:03:30] + 560s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=10930
|
||||
[10:03:45] + 575s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=11226
|
||||
[10:04:00] + 590s tandoor=954M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=11522
|
||||
[10:04:15] + 605s tandoor=955M/1024M peak=1001M kills=0 rs=0 tandoor-postgres=165M/256M peak=183M kills=0 rs=0 reqs=11818
|
||||
[10:04:15] memory watch: killed=False tight=[] requests=11818 codes={'302': 11818}
|
||||
[10:04:15] MV-tandoor: ABORT — putting the FROM images back
|
||||
[10:07:25] ABORT: the app did NOT come back (rc=1, 184.7s)
|
||||
+3566
File diff suppressed because it is too large
Load Diff
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"tandoor": {
|
||||
"status": "running",
|
||||
"health": "healthy",
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
},
|
||||
"tandoor-postgres": {
|
||||
"status": "running",
|
||||
"health": "healthy",
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
}
|
||||
}
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"harness_version": 4,
|
||||
"edge": "MV-tandoor",
|
||||
"app": "tandoor",
|
||||
"note": "night 2026-09-23 within-a-major move: tandoor-postgres=postgres:17-alpine",
|
||||
"from": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"to": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:17-alpine"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "\u001b[2Ktandoor | Migrating database",
|
||||
"abort": "refuses",
|
||||
"abort_detail": "rsion 16.15.\n\u001b[2Ktandoor-postgres | \n\u001b[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization\n\u001b[2Ktandoor-postgres | \n\u001b[2Ktandoor-postgres | 2026-09-27 12:06:04.351 CEST [1] FATAL: database files are incompatible with server\n\u001b[2Ktandoor-postgres | 2026-09-27 12:06:04.351 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.\n\u001b[2Ktandoor-postgres | \n\u001b[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization\n\u001b[2Ktandoor-postgres | \n\u001b[2Ktandoor-postgres | 2026-09-27 12:07:04.677 CEST [1] FATAL: database files are incompatible with server\n\u001b[2Ktandoor-postgres | 2026-09-27 12:07:04.677 CEST [1] DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 16.15.",
|
||||
"engine_state_after": {
|
||||
"tandoor-postgres": {
|
||||
"image": "postgres:17-alpine",
|
||||
"probe": "datadir major version",
|
||||
"answer": "17",
|
||||
"probe_rc": 0
|
||||
}
|
||||
},
|
||||
"memory": {
|
||||
"soak_s": 605.6,
|
||||
"requested_s": 600,
|
||||
"requests": 11818,
|
||||
"codes": {
|
||||
"302": 11818
|
||||
},
|
||||
"first_kill": null,
|
||||
"containers": {
|
||||
"tandoor": {
|
||||
"limit": 1073741824,
|
||||
"peak": 1049731072,
|
||||
"peak_pct": 0.978,
|
||||
"anon_peak_sampled": 845176832,
|
||||
"anon_peak_pct": 0.787,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
},
|
||||
"tandoor-postgres": {
|
||||
"limit": 268435456,
|
||||
"peak": 192729088,
|
||||
"peak_pct": 0.718,
|
||||
"anon_peak_sampled": 13815808,
|
||||
"anon_peak_pct": 0.051,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
}
|
||||
},
|
||||
"unmeasured": [],
|
||||
"load": "reached"
|
||||
},
|
||||
"marks": [],
|
||||
"duration_s": 31.0,
|
||||
"measured_at": "2026-09-27T10:07:25Z",
|
||||
"evidence": "evidence/MV-tandoor",
|
||||
"scratch_cleared": [],
|
||||
"engine_conversion": {
|
||||
"service": "tandoor-postgres",
|
||||
"engine": "postgres",
|
||||
"from": 16,
|
||||
"to": 17,
|
||||
"dump_s": 0.71,
|
||||
"dump_bytes": 338574,
|
||||
"new_engine_ready_s": 2.2,
|
||||
"load_s": 3.04,
|
||||
"dropped": [
|
||||
"tandoor"
|
||||
],
|
||||
"skipped_create_role": [
|
||||
"CREATE ROLE tandoor;"
|
||||
],
|
||||
"result": "converted",
|
||||
"check_equal": true,
|
||||
"pg_version": "17",
|
||||
"tables": 100,
|
||||
"convert_s": 23.6
|
||||
},
|
||||
"files_changed": [],
|
||||
"total_s": 985.7
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"app": "tandoor",
|
||||
"venue": "box 9202 (drill catalog, controller 0.275.0-rc1), the product's guarded Update",
|
||||
"from": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"to": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:17-alpine"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"engine_conversion": {
|
||||
"service": "tandoor-postgres",
|
||||
"engine": "postgres",
|
||||
"from": 16,
|
||||
"to": 17,
|
||||
"result": "converted",
|
||||
"controller_line": "update tandoor: CONVERTED 16 \u2192 17 in 11.418s \u2014 the check is equal (2 database(s), 100 table(s), 687 row(s)), PG_VERSION 17"
|
||||
},
|
||||
"duration_s": 52.4,
|
||||
"measured_at": "2026-09-27T09:38:08Z",
|
||||
"evidence": "felhom.eu/documentation/audits/version-travel-2026-09-26/B/apps/tandoor/box/move.txt"
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
before: pinned={'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:16-alpine'} PG_VERSION=16
|
||||
drill: 19b57b1 DRILL tandoor: tandoor-postgres postgres:16-alpine -> postgres:17-alpine with the engine_conversion mark (box proof)
|
||||
phase +0.0s safety-dump | err=None
|
||||
phase +3.1s pulling | err=None
|
||||
phase +4.1s copying | err=None
|
||||
phase +10.3s converting | err=None
|
||||
phase +21.6s starting | err=None
|
||||
phase +22.6s verifying | err=None
|
||||
phase +52.3s done | err=None
|
||||
tandoor: readback of the seeded account found=True
|
||||
2026/09/27 09:38:09 update.go:536: [INFO] [stacks] update tandoor: accepted — guarded update started
|
||||
2026/09/27 09:38:09 update.go:1365: [INFO] [stacks] update tandoor: phase checking
|
||||
2026/09/27 09:38:09 update.go:786: [INFO] [stacks] update tandoor: ladder — the last step (2 of 2) — the catalog's current definition
|
||||
2026/09/27 09:38:09 update.go:800: [INFO] [stacks] update tandoor: this step CONVERTS tandoor-postgres PostgreSQL 16 → 17 (the ladder entry's mark); database volume tandoor_tandoor_postgres_data
|
||||
2026/09/27 09:38:09 update.go:814: [INFO] [stacks] update tandoor: precondition met — Tier 1 (own recovery unit) copy from 2026-09-27T09:36:36Z (2m0s old, limit 24h0m0s)
|
||||
2026/09/27 09:38:09 update.go:1365: [INFO] [stacks] update tandoor: phase safety-dump
|
||||
2026/09/27 09:38:09 update.go:846: [INFO] [stacks] update tandoor: safety dump done (1 file(s)) [/mnt/sys_drive/felhom-data/backups/primary/tandoor/db-dumps/pre-restore-20260927T093809Z-tandoor-postgres.sql]
|
||||
2026/09/27 09:38:11 undo.go:287: [INFO] [stacks] update tandoor: the undo copy will hold 3 named volume(s), 141.0 MiB
|
||||
2026/09/27 09:38:11 pgconvert.go:340: [INFO] [stacks] update tandoor: conversion space — database volume tandoor_tandoor_postgres_data is 53 MB; the dump needs up to 66 MB + the 2 GB floor; 27.7 GB free beside the stack dir
|
||||
2026/09/27 09:38:11 update.go:1365: [INFO] [stacks] update tandoor: phase pinning
|
||||
2026/09/27 09:38:11 pin.go:373: [INFO] [stacks] update tandoor: pin advanced to /opt/docker/felhom-controller/data/catalog-cache/templates/tandoor/docker-compose.yml (tandoor=ghcr.io/tandoorrecipes/recipes:2.6.15, tandoor-postgres=postgres:17-alpine)
|
||||
2026/09/27 09:38:11 update.go:1365: [INFO] [stacks] update tandoor: phase pulling
|
||||
2026/09/27 09:38:13 update.go:1365: [INFO] [stacks] update tandoor: phase copying
|
||||
2026/09/27 09:38:16 update.go:1365: [INFO] [stacks] update tandoor: phase copying
|
||||
2026/09/27 09:38:16 undo.go:437: [INFO] [stacks] update tandoor: copied tandoor_tandoor_media → tandoor_tandoor_media.pre-update-20260927T093816Z in 473ms
|
||||
2026/09/27 09:38:16 update.go:1365: [INFO] [stacks] update tandoor: phase copying
|
||||
2026/09/27 09:38:17 undo.go:437: [INFO] [stacks] update tandoor: copied tandoor_tandoor_postgres_data → tandoor_tandoor_postgres_data.pre-update-20260927T093816Z in 741ms
|
||||
2026/09/27 09:38:17 update.go:1365: [INFO] [stacks] update tandoor: phase copying
|
||||
2026/09/27 09:38:18 undo.go:437: [INFO] [stacks] update tandoor: copied tandoor_tandoor_static → tandoor_tandoor_static.pre-update-20260927T093816Z in 1.445s
|
||||
2026/09/27 09:38:18 update.go:1365: [INFO] [stacks] update tandoor: phase converting
|
||||
2026/09/27 09:38:18 pgconvert.go:423: [INFO] [stacks] update tandoor: CONVERTING tandoor-postgres PostgreSQL 16 → 17 (volume tandoor_tandoor_postgres_data, kept copy tandoor_tandoor_postgres_data.pre-update-20260927T093816Z)
|
||||
2026/09/27 09:38:22 pgconvert.go:468: [INFO] [stacks] update tandoor: pg_dumpall from 16 done in 603ms — 330 kB, completion line present; before: 2 database(s), 100 table(s), 687 row(s)
|
||||
2026/09/27 09:38:22 update.go:1365: [INFO] [stacks] update tandoor: phase converting
|
||||
2026/09/27 09:38:23 pgconvert.go:484: [INFO] [stacks] update tandoor: database volume tandoor_tandoor_postgres_data emptied (its copy tandoor_tandoor_postgres_data.pre-update-20260927T093816Z holds the old datadir, marker checked twice)
|
||||
2026/09/27 09:38:29 pgconvert.go:513: [INFO] [stacks] update tandoor: loaded into 17 in 3.111s (dropped the entrypoint's empty database(s) [tandoor]; skipped CREATE ROLE for [tandoor])
|
||||
2026/09/27 09:38:30 pgconvert.go:529: [INFO] [stacks] update tandoor: CONVERTED 16 → 17 in 11.418s — the check is equal (2 database(s), 100 table(s), 687 row(s)), PG_VERSION 17
|
||||
2026/09/27 09:38:30 update.go:1365: [INFO] [stacks] update tandoor: phase starting
|
||||
2026/09/27 09:38:31 update.go:1365: [INFO] [stacks] update tandoor: phase verifying
|
||||
2026/09/27 09:39:01 update.go:997: [INFO] [stacks] update tandoor: healthy after 30s (the app's health check passed)
|
||||
2026/09/27 09:39:01 update.go:1015: [INFO] [stacks] update tandoor: KEEPING the pre-conversion datadir copy tandoor_tandoor_postgres_data.pre-update-20260927T093816Z (PostgreSQL 16) until a backup of the converted app is proven
|
||||
2026/09/27 09:39:01 update.go:1033: [INFO] [stacks] update tandoor: DONE in 52s
|
||||
|
||||
RESULT final_phase=done PG_VERSION=17 seed_after=True verdict=proven
|
||||
@@ -0,0 +1,5 @@
|
||||
deploy/reuse tandoor: True
|
||||
tandoor: createsuperuser :: Running django-vite in production mode (no HMR) Superuser created successfully.
|
||||
tandoor: seeded superuser drill8e586d
|
||||
tandoor: readback of the seeded account found=True
|
||||
C1 seed reads back BEFORE: True
|
||||
@@ -0,0 +1,5 @@
|
||||
11:33:40 START paperless-ngx ['paperless-postgres=postgres:18-alpine']
|
||||
11:50:54 DONE paperless-ngx rc=0 verdict=proven read_before=True read_after=True abort=refuses marks=[] peaks={'paperless-postgres': 0.72, 'paperless-redis': 0.054, 'paperless-webserver': 0.492} detail='less-postgres | The files belonging to this database system will be owned by user "postgres".\n\x1b[2Kpaperless-postgres | This user must also own the server proc' (1034s)
|
||||
11:50:54 START tandoor ['tandoor-postgres=postgres:17-alpine']
|
||||
12:07:29 DONE tandoor rc=0 verdict=proven read_before=True read_after=True abort=refuses marks=[] peaks={'tandoor': 0.978, 'tandoor-postgres': 0.718} detail='rsion 16.15.\n\x1b[2Ktandoor-postgres | \n\x1b[2Ktandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization\n\x1b[2Ktandoor-p' (995s)
|
||||
12:07:29 QUEUE q1 FINISHED
|
||||
@@ -0,0 +1,24 @@
|
||||
== frontend v0.12.1 healthcheck: null
|
||||
/usr/bin/node: ABSENT
|
||||
/nodejs/bin/node: present (v22.22.0)
|
||||
/usr/local/bin/node: ABSENT
|
||||
== backend v0.12.1 healthcheck: null user=
|
||||
== frontend v0.13.0 healthcheck: {"Test":["CMD","node","-e","fetch('http://127.0.0.1:3000/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"],"Interval":30000000000,"Timeout":5000000000,"StartPeriod":30000000000,"Retries":3}
|
||||
/usr/bin/node: present (v26.3.0)
|
||||
/nodejs/bin/node: ABSENT
|
||||
/usr/local/bin/node: ABSENT
|
||||
== backend v0.13.0 healthcheck: {"Test":["CMD-SHELL","python3 -c \"import urllib.request; urllib.request.urlopen('http://localhost:80/health/')\""],"Interval":15000000000,"Timeout":5000000000,"StartPeriod":60000000000,"Retries":5} user=
|
||||
== v0.12.1 PATH=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
exec 'node' on PATH: FAILS
|
||||
== v0.13.0 PATH=PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
|
||||
exec 'node' on PATH: works (v26.3.0)
|
||||
== backend v0.12.1 ENTRYPOINT=["/code/entrypoint.sh"] CMD=["supervisord","-c","/etc/supervisor/conf.d/supervisord.conf"]
|
||||
ijson 3.3.0
|
||||
/bin/bash
|
||||
/code/main/settings.py:398:COUNTRY_REGION_JSON_VERSION = 'v3.1'
|
||||
/code/main/settings.py:398:COUNTRY_REGION_JSON_VERSION = 'v3.1'
|
||||
== backend v0.13.0 ENTRYPOINT=["/code/entrypoint.sh"] CMD=["supervisord","-c","/etc/supervisor/conf.d/supervisord.conf"]
|
||||
ijson 3.3.0
|
||||
/bin/bash
|
||||
/code/main/settings.py:470:COUNTRY_REGION_JSON_VERSION = 'v3.1'
|
||||
/code/main/settings.py:470:COUNTRY_REGION_JSON_VERSION = 'v3.1'
|
||||
@@ -0,0 +1,29 @@
|
||||
# 1. clean start, the image's own entrypoint (downloads the world data) — 10:30:34
|
||||
state: running health=healthy restarts=0
|
||||
file: 46724025 bytes
|
||||
# 2. the file cut to half, the image's own entrypoint — 10:32:51
|
||||
truncated to 23362012 of 46724025 bytes
|
||||
after 120 s: running health=healthy restarts=0
|
||||
1 Running download-countries (first boot may take several minutes; ensure ~2GB RAM is available)...
|
||||
# 3. OUR template's start (the set-aside step), same volume — 10:34:54
|
||||
state: running health=healthy restarts=0
|
||||
felhom: /code/media/countries+regions+states-v3.1.json did not parse to its end - set aside, it is downloaded again
|
||||
JSON file downloaded successfully
|
||||
46724025 countries+regions+states-v3.1.json
|
||||
23362012 countries+regions+states-v3.1.json.cutoff-20260927103501
|
||||
# 4. a second start with the repaired file (nothing set aside) — 10:38:02
|
||||
state: running health=healthy restarts=0
|
||||
set-aside lines on the second start: 0
|
||||
# 5. an import still PENDING (a fresh database) + the file cut to half, the image's own entrypoint — 10:38:59
|
||||
truncated to 23362012 of 46724025 bytes
|
||||
after 150 s: running health=starting restarts=10
|
||||
10 raise common.IncompleteJSONError('Incomplete JSON content')
|
||||
10 ijson.common.IncompleteJSONError: Incomplete JSON content
|
||||
# 6. OUR template's start on the same state — 10:41:43
|
||||
state: running health=healthy restarts=0
|
||||
1 JSON file downloaded successfully
|
||||
1 felhom: /code/media/countries+regions+states-v3.1.json did not parse to its end - set aside, it is downloaded again
|
||||
46724025 countries+regions+states-v3.1.json
|
||||
23362012 countries+regions+states-v3.1.json.cutoff-20260927103501
|
||||
23362012 countries+regions+states-v3.1.json.cutoff-20260927104158
|
||||
trunc volumes left: 0
|
||||
@@ -0,0 +1,17 @@
|
||||
# C — adventurelog v0.12.1 → v0.13.0 (R-655, `09` §3 decision 41)
|
||||
|
||||
- **Images (`C1-images.txt`).** Frontend v0.12.1: no image healthcheck, node only at `/nodejs/bin/node` (not on the PATH);
|
||||
v0.13.0: its own healthcheck (`node` on the PATH → `/usr/bin/node`, fetching `/health`). No single exec path works on
|
||||
both → the override is DROPPED. Backends: same entrypoint and CMD, `ijson` 3.3.0 in both, the same file
|
||||
`countries+regions+states-v3.1.json` in `/code/media`.
|
||||
- **The cut-off file (`C2-truncated-file.txt`).** With the data already imported, v0.13.0 does not read the file ("Latest data
|
||||
already imported") — a cut-off file does no harm there (measured, step 2). With an import PENDING (fresh database) and the
|
||||
file cut to half, the image's own start crash-looped **10 times in 150 s on `IncompleteJSONError`**; with the template's
|
||||
set-aside step the file was renamed `….cutoff-<time>`, downloaded again (46,724,025 B) and the app was healthy; a second
|
||||
start set nothing aside. The update's first start does NOT repair the file; the template does.
|
||||
- **Bench (`apps/adventurelog/bench/`)**: FROM healthy (world data downloaded by v0.12.1); TO healthy in 217 s, "Latest data
|
||||
already imported", 6 migration lines, seed ✓, anon peaks backend 73.0 %, frontend 37.9 %; 0 restarts.
|
||||
- **Box 9202 (`apps/adventurelog/box/`)**: first press under the drill's 90 s health wait → the backend was still starting →
|
||||
UNDONE correctly in 36 s, seed intact (`move.txt`). With the product's default 5-min wait → done in 204 s, the file reused,
|
||||
seed ✓, all three healthy (`move2-5m.txt`). The fresh install got `backing-up` first — R-699 working.
|
||||
- Catalog `06ea7da`: the move, the dropped override and the set-aside step in ONE commit.
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
[10:12:57] scratch drive folders cleared before FROM (R-656): none existed
|
||||
[10:12:57] MV-adventurelog: deploying adventurelog at FROM {'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.12.1', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1'}
|
||||
[10:14:55] FROM settled=True in 93.2s :: {"adventurelog": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "adventurelog-frontend": {"status": "running", "health": null, "restarts": 0, "exit": 0}, "adventurelog-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[10:14:55] fixture: the BOX walk's own (Django), through upgrade_boxport
|
||||
[10:14:58] adventurelog: createsuperuser :: Superuser created successfully.
|
||||
[10:15:00] adventurelog: seeded superuser drill2a47a0
|
||||
[10:15:05] adventurelog: readback of the seeded account found=True
|
||||
[10:15:05] C1 (seed reads back BEFORE): True
|
||||
[10:15:06] MV-adventurelog: swapping to TO {'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.13.0', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0'}
|
||||
[10:15:09] TO up -d rc=0
|
||||
[10:18:45] TO settled=True in 216.9s :: {"adventurelog": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "adventurelog-frontend": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "adventurelog-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[10:18:46] migration lines observed: 6
|
||||
[10:18:49] adventurelog: readback of the seeded account found=True
|
||||
[10:18:49] RESULT (seed reads back AFTER): True
|
||||
[10:18:50] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:3000
|
||||
[10:19:05] + 15s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=44M/256M peak=44M kills=0 rs=0 adventurelog-postgres=244M/256M peak=256M kills=0 rs=0 reqs=300
|
||||
[10:19:20] + 30s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=53M/256M peak=67M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=596
|
||||
[10:19:35] + 46s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=54M/256M peak=67M kills=0 rs=0 adventurelog-postgres=254M/256M peak=256M kills=0 rs=0 reqs=896
|
||||
[10:19:50] + 61s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=59M/256M peak=75M kills=0 rs=0 adventurelog-postgres=254M/256M peak=256M kills=0 rs=0 reqs=1196
|
||||
[10:20:06] + 76s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=59M/256M peak=75M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=1493
|
||||
[10:20:21] + 91s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=61M/256M peak=77M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=1792
|
||||
[10:20:36] + 106s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=64M/256M peak=77M kills=0 rs=0 adventurelog-postgres=254M/256M peak=256M kills=0 rs=0 reqs=2092
|
||||
[10:20:51] + 121s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=65M/256M peak=81M kills=0 rs=0 adventurelog-postgres=252M/256M peak=256M kills=0 rs=0 reqs=2392
|
||||
[10:21:06] + 136s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=65M/256M peak=81M kills=0 rs=0 adventurelog-postgres=254M/256M peak=256M kills=0 rs=0 reqs=2688
|
||||
[10:21:21] + 152s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=65M/256M peak=82M kills=0 rs=0 adventurelog-postgres=255M/256M peak=256M kills=0 rs=0 reqs=2988
|
||||
[10:21:36] + 167s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=67M/256M peak=82M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=3288
|
||||
[10:21:52] + 182s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=68M/256M peak=85M kills=0 rs=0 adventurelog-postgres=255M/256M peak=256M kills=0 rs=0 reqs=3588
|
||||
[10:22:07] + 197s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=68M/256M peak=85M kills=0 rs=0 adventurelog-postgres=255M/256M peak=256M kills=0 rs=0 reqs=3888
|
||||
[10:22:22] + 212s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=73M/256M peak=86M kills=0 rs=0 adventurelog-postgres=255M/256M peak=256M kills=0 rs=0 reqs=4184
|
||||
[10:22:37] + 227s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=73M/256M peak=86M kills=0 rs=0 adventurelog-postgres=254M/256M peak=256M kills=0 rs=0 reqs=4484
|
||||
[10:22:52] + 242s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=73M/256M peak=91M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=4784
|
||||
[10:23:07] + 258s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=74M/256M peak=91M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=5084
|
||||
[10:23:23] + 273s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=75M/256M peak=92M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=5384
|
||||
[10:23:38] + 288s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=78M/256M peak=92M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=5680
|
||||
[10:23:53] + 303s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=79M/256M peak=96M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=5980
|
||||
[10:24:08] + 318s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=79M/256M peak=96M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=6280
|
||||
[10:24:23] + 333s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=80M/256M peak=97M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=6580
|
||||
[10:24:38] + 349s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=80M/256M peak=97M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=6876
|
||||
[10:24:54] + 364s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=81M/256M peak=98M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=7176
|
||||
[10:25:09] + 379s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=83M/256M peak=98M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=7476
|
||||
[10:25:24] + 394s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=83M/256M peak=100M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=7776
|
||||
[10:25:39] + 409s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=84M/256M peak=100M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=8076
|
||||
[10:25:54] + 424s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=88M/256M peak=102M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=8372
|
||||
[10:26:09] + 440s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=90M/256M peak=102M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=8672
|
||||
[10:26:25] + 455s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=91M/256M peak=107M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=8972
|
||||
[10:26:40] + 470s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=92M/256M peak=107M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=9272
|
||||
[10:26:55] + 485s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=93M/256M peak=109M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=9572
|
||||
[10:27:10] + 500s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=93M/256M peak=109M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=9868
|
||||
[10:27:25] + 515s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=94M/256M peak=112M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=10168
|
||||
[10:27:40] + 530s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=96M/256M peak=112M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=10468
|
||||
[10:27:55] + 546s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=98M/256M peak=113M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=10768
|
||||
[10:28:11] + 561s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=98M/256M peak=113M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=11068
|
||||
[10:28:26] + 576s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=99M/256M peak=115M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=11364
|
||||
[10:28:41] + 591s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=100M/256M peak=115M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=11664
|
||||
[10:28:56] + 606s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=101M/256M peak=117M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=11964
|
||||
[10:28:56] memory watch: killed=False tight=[] requests=11964 codes={'200': 11964}
|
||||
[10:28:56] MV-adventurelog: ABORT — putting the FROM images back
|
||||
[10:29:35] adventurelog: readback of the seeded account found=True
|
||||
[10:29:35] ABORT: app came back in 31.1s; data present=True
|
||||
{
|
||||
"harness_version": 4,
|
||||
"edge": "MV-adventurelog",
|
||||
"app": "adventurelog",
|
||||
"note": "night 2026-09-23 within-a-major move: adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.13.0, adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0",
|
||||
"from": {
|
||||
"adventurelog": "ghcr.io/seanmorley15/adventurelog-backend:v0.12.1",
|
||||
"adventurelog-postgres": "postgis/postgis:16-3.5-alpine",
|
||||
"adventurelog-frontend": "ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1"
|
||||
},
|
||||
"to": {
|
||||
"adventurelog": "ghcr.io/seanmorley15/adventurelog-backend:v0.13.0",
|
||||
"adventurelog-postgres": "postgis/postgis:16-3.5-alpine",
|
||||
"adventurelog-frontend": "ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "\u001b[2Kadventurelog | Apply all migrations: account, admin, adventures, auth, authtoken, billing, contenttypes, integrations, invitations, mfa, sessions, sites, socialaccount, users, worldtravel",
|
||||
"abort": "starts-and-serves",
|
||||
"abort_detail": null,
|
||||
"engine_state_after": null,
|
||||
"memory": {
|
||||
"soak_s": 606.6,
|
||||
"requested_s": 600,
|
||||
"requests": 11964,
|
||||
"codes": {
|
||||
"200": 11964
|
||||
},
|
||||
"first_kill": null,
|
||||
"containers": {
|
||||
"adventurelog": {
|
||||
"limit": 402653184,
|
||||
"peak": 402653184,
|
||||
"peak_pct": 1.0,
|
||||
"anon_peak_sampled": 293941248,
|
||||
"anon_peak_pct": 0.73,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
},
|
||||
"adventurelog-frontend": {
|
||||
"limit": 268435456,
|
||||
"peak": 123539456,
|
||||
"peak_pct": 0.46,
|
||||
"anon_peak_sampled": 101703680,
|
||||
"anon_peak_pct": 0.379,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
},
|
||||
"adventurelog-postgres": {
|
||||
"limit": 268435456,
|
||||
"peak": 268439552,
|
||||
"peak_pct": 1.0,
|
||||
"anon_peak_sampled": 4337664,
|
||||
"anon_peak_pct": 0.016,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
}
|
||||
},
|
||||
"unmeasured": [],
|
||||
"load": "reached"
|
||||
},
|
||||
"marks": [],
|
||||
"duration_s": 216.9,
|
||||
"measured_at": "2026-09-27T10:29:35Z",
|
||||
"evidence": "evidence/MV-adventurelog",
|
||||
"scratch_cleared": [],
|
||||
"files_changed": [],
|
||||
"total_s": 998.6
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"adventurelog": {
|
||||
"status": "running",
|
||||
"health": "healthy",
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
},
|
||||
"adventurelog-frontend": {
|
||||
"status": "running",
|
||||
"health": null,
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
},
|
||||
"adventurelog-postgres": {
|
||||
"status": "running",
|
||||
"health": "healthy",
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
}
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
[2Kadventurelog | PostgreSQL is up - continuing...
|
||||
[2Kadventurelog-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kadventurelog-postgres | This user must also own the server process.
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kadventurelog-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kadventurelog-postgres | The default text search configuration will be set to "english".
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | Data page checksums are disabled.
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | fixing permissions on existing directory /var/lib/postgresql/data ... ok
|
||||
[2Kadventurelog-postgres | creating subdirectories ... ok
|
||||
[2Kadventurelog-postgres | selecting dynamic shared memory implementation ... posix
|
||||
[2Kadventurelog-postgres | selecting default max_connections ... 100
|
||||
[2Kadventurelog-postgres | selecting default shared_buffers ... 128MB
|
||||
[2Kadventurelog-postgres | selecting default time zone ... Europe/Budapest
|
||||
[2Kadventurelog-postgres | creating configuration files ... ok
|
||||
[2Kadventurelog | Operations to perform:
|
||||
[2Kadventurelog | Apply all migrations: account, admin, adventures, auth, authtoken, contenttypes, integrations, invitations, mfa, sessions, sites, socialaccount, users, worldtravel
|
||||
[2Kadventurelog | Running migrations:
|
||||
[2Kadventurelog | No migrations to apply.
|
||||
[2Kadventurelog | Latest data already imported.
|
||||
[2Kadventurelog | █████╗ ██████╗ ██╗ ██╗███████╗███╗ ██╗████████╗██╗ ██╗██████╗ ███████╗██╗ ██████╗ ██████╗
|
||||
[2Kadventurelog | ██╔══██╗██╔══██╗██║ ██║██╔════╝████╗ ██║╚══██╔══╝██║ ██║██╔══██╗██╔════╝██║ ██╔═══██╗██╔════╝
|
||||
[2Kadventurelog | ███████║██║ ██║██║ ██║█████╗ ██╔██╗ ██║ ██║ ██║ ██║██████╔╝█████╗ ██║ ██║ ██║██║ ███╗
|
||||
[2Kadventurelog | ██╔══██║██║ ██║╚██╗ ██╔╝██╔══╝ ██║╚██╗██║ ██║ ██║ ██║██╔══██╗██╔══╝ ██║ ██║ ██║██║ ██║
|
||||
[2Kadventurelog | ██║ ██║██████╔╝ ╚████╔╝ ███████╗██║ ╚████║ ██║ ╚██████╔╝██║ ██║███████╗███████╗╚██████╔╝╚██████╔╝
|
||||
[2Kadventurelog | ╚═╝ ╚═╝╚═════╝ ╚═══╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝ ╚═════╝ ╚═════╝
|
||||
[2Kadventurelog | “Go confidently in the direction of your dreams! Live the life you've imagined.” ― Henry David Thoreau
|
||||
[2Kadventurelog | 2026-09-27 10:29:16,509 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message.
|
||||
[2Kadventurelog | 2026-09-27 10:29:16,511 INFO supervisord started with pid 1
|
||||
[2Kadventurelog | 2026-09-27 10:29:17,515 INFO spawned: 'gunicorn' with pid 28
|
||||
[2Kadventurelog | 2026-09-27 10:29:17,519 INFO spawned: 'memcached' with pid 29
|
||||
[2Kadventurelog | 2026-09-27 10:29:17,521 INFO spawned: 'nginx' with pid 30
|
||||
[2Kadventurelog | 2026-09-27 10:29:17,524 INFO spawned: 'sync_visited_regions' with pid 31
|
||||
[2Kadventurelog | [2026-09-27 10:29:18 +0000] [28] [INFO] Starting gunicorn 23.0.0
|
||||
[2Kadventurelog | [2026-09-27 10:29:18 +0000] [28] [INFO] Listening at: http://[::]:8000 (28)
|
||||
[2Kadventurelog | [2026-09-27 10:29:18 +0000] [28] [INFO] Using worker: sync
|
||||
[2Kadventurelog | [2026-09-27 10:29:18 +0000] [42] [INFO] Booting worker with pid: 42
|
||||
[2Kadventurelog | [2026-09-27 10:29:18 +0000] [43] [INFO] Booting worker with pid: 43
|
||||
[2Kadventurelog | 2026-09-27 10:29:19,151 INFO success: gunicorn entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
||||
[2Kadventurelog | 2026-09-27 10:29:19,151 INFO success: memcached entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
||||
[2Kadventurelog | 2026-09-27 10:29:19,151 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
||||
[2Kadventurelog | 2026-09-27 10:29:19,151 INFO success: sync_visited_regions entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
||||
[2Kadventurelog | Starting periodic sync worker for midnight background jobs...
|
||||
[2Kadventurelog | Next sync scheduled in 48641s (~13.51h) at UTC midnight
|
||||
[2Kadventurelog-postgres | running bootstrap script ... ok
|
||||
[2Kadventurelog-postgres | sh: locale: not found
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:11.819 CEST [35] WARNING: no usable system locales were found
|
||||
[2Kadventurelog-postgres | performing post-bootstrap initialization ... ok
|
||||
[2Kadventurelog-postgres | syncing data to disk ... ok
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | Success. You can now start the database server using:
|
||||
[2Kadventurelog-postgres | initdb: warning: enabling "trust" authentication for local connections
|
||||
[2Kadventurelog-postgres | initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | pg_ctl -D /var/lib/postgresql/data -l logfile start
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | waiting for server to start....2026-09-27 12:13:13.210 CEST [41] LOG: starting PostgreSQL 16.15 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:13.213 CEST [41] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:13.223 CEST [44] LOG: database system was shut down at 2026-09-27 12:13:12 CEST
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:13.231 CEST [41] LOG: database system is ready to accept connections
|
||||
[2Kadventurelog-postgres | done
|
||||
[2Kadventurelog-postgres | server started
|
||||
[2Kadventurelog-postgres | CREATE DATABASE
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | /usr/local/bin/docker-entrypoint.sh: sourcing /docker-entrypoint-initdb.d/10_postgis.sh
|
||||
[2Kadventurelog-postgres | CREATE DATABASE
|
||||
[2Kadventurelog-postgres | Loading PostGIS extensions into template_postgis
|
||||
[2Kadventurelog-postgres | CREATE EXTENSION
|
||||
[2Kadventurelog-postgres | CREATE EXTENSION
|
||||
[2Kadventurelog-postgres | You are now connected to database "template_postgis" as user "adventurelog".
|
||||
[2Kadventurelog-postgres | DO
|
||||
[2Kadventurelog-postgres | Loading PostGIS extensions into adventurelog
|
||||
[2Kadventurelog-postgres | CREATE EXTENSION
|
||||
[2Kadventurelog-postgres | CREATE EXTENSION
|
||||
[2Kadventurelog-postgres | You are now connected to database "adventurelog" as user "adventurelog".
|
||||
[2Kadventurelog-postgres | DO
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | waiting for server to shut down....2026-09-27 12:13:17.020 CEST [41] LOG: received fast shutdown request
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.024 CEST [41] LOG: aborting any active transactions
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.031 CEST [41] LOG: background worker "logical replication launcher" (PID 47) exited with exit code 1
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.031 CEST [42] LOG: shutting down
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.034 CEST [42] LOG: checkpoint starting: shutdown immediate
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.354 CEST [42] LOG: checkpoint complete: wrote 4465 buffers (27.3%); 0 WAL file(s) added, 0 removed, 2 recycled; write=0.069 s, sync=0.235 s, total=0.323 s; sync files=963, longest=0.130 s, average=0.001 s; distance=34851 kB, estimate=34851 kB; lsn=0/36FFEE8, redo lsn=0/36FFEE8
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.378 CEST [41] LOG: database system is shut down
|
||||
[2Kadventurelog-postgres | done
|
||||
[2Kadventurelog-postgres | server stopped
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | PostgreSQL init process complete; ready for start up.
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.455 CEST [1] LOG: starting PostgreSQL 16.15 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.455 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.456 CEST [1] LOG: listening on IPv6 address "::", port 5432
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.461 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.470 CEST [65] LOG: database system was shut down at 2026-09-27 12:13:17 CEST
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.479 CEST [1] LOG: database system is ready to accept connections
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:18:17.161 CEST [63] LOG: checkpoint starting: time
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:22:47.148 CEST [63] LOG: checkpoint complete: wrote 7242 buffers (44.2%); 0 WAL file(s) added, 0 removed, 10 recycled; write=269.896 s, sync=0.051 s, total=269.987 s; sync files=489, longest=0.006 s, average=0.001 s; distance=172672 kB, estimate=172672 kB; lsn=0/EB41138, redo lsn=0/DF9FF80
|
||||
[2Kadventurelog-frontend | Listening on http://0.0.0.0:3000
|
||||
+1
@@ -0,0 +1 @@
|
||||
null
|
||||
+1
@@ -0,0 +1 @@
|
||||
{}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{}
|
||||
+1562
File diff suppressed because it is too large
Load Diff
+6
@@ -0,0 +1,6 @@
|
||||
[2Kadventurelog | Apply all migrations: account, admin, adventures, auth, authtoken, billing, contenttypes, integrations, invitations, mfa, sessions, sites, socialaccount, users, worldtravel
|
||||
[2Kadventurelog | Running migrations:
|
||||
[2Kadventurelog | Applying adventures.0072_trail_wanderer_author_fields... OK
|
||||
[2Kadventurelog | Applying adventures.0073_pointfield_geography... OK
|
||||
[2Kadventurelog | Applying adventures.0074_contentimage_source_metadata... OK
|
||||
[2Kadventurelog | Applying adventures.0075_make_visit_dates_timezone_aware... OK
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
[10:12:57] scratch drive folders cleared before FROM (R-656): none existed
|
||||
[10:12:57] MV-adventurelog: deploying adventurelog at FROM {'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.12.1', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1'}
|
||||
[10:14:55] FROM settled=True in 93.2s :: {"adventurelog": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "adventurelog-frontend": {"status": "running", "health": null, "restarts": 0, "exit": 0}, "adventurelog-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[10:14:55] fixture: the BOX walk's own (Django), through upgrade_boxport
|
||||
[10:14:58] adventurelog: createsuperuser :: Superuser created successfully.
|
||||
[10:15:00] adventurelog: seeded superuser drill2a47a0
|
||||
[10:15:05] adventurelog: readback of the seeded account found=True
|
||||
[10:15:05] C1 (seed reads back BEFORE): True
|
||||
[10:15:06] MV-adventurelog: swapping to TO {'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.13.0', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0'}
|
||||
[10:15:09] TO up -d rc=0
|
||||
[10:18:45] TO settled=True in 216.9s :: {"adventurelog": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "adventurelog-frontend": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "adventurelog-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
|
||||
[10:18:46] migration lines observed: 6
|
||||
[10:18:49] adventurelog: readback of the seeded account found=True
|
||||
[10:18:49] RESULT (seed reads back AFTER): True
|
||||
[10:18:50] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:3000
|
||||
[10:19:05] + 15s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=44M/256M peak=44M kills=0 rs=0 adventurelog-postgres=244M/256M peak=256M kills=0 rs=0 reqs=300
|
||||
[10:19:20] + 30s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=53M/256M peak=67M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=596
|
||||
[10:19:35] + 46s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=54M/256M peak=67M kills=0 rs=0 adventurelog-postgres=254M/256M peak=256M kills=0 rs=0 reqs=896
|
||||
[10:19:50] + 61s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=59M/256M peak=75M kills=0 rs=0 adventurelog-postgres=254M/256M peak=256M kills=0 rs=0 reqs=1196
|
||||
[10:20:06] + 76s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=59M/256M peak=75M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=1493
|
||||
[10:20:21] + 91s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=61M/256M peak=77M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=1792
|
||||
[10:20:36] + 106s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=64M/256M peak=77M kills=0 rs=0 adventurelog-postgres=254M/256M peak=256M kills=0 rs=0 reqs=2092
|
||||
[10:20:51] + 121s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=65M/256M peak=81M kills=0 rs=0 adventurelog-postgres=252M/256M peak=256M kills=0 rs=0 reqs=2392
|
||||
[10:21:06] + 136s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=65M/256M peak=81M kills=0 rs=0 adventurelog-postgres=254M/256M peak=256M kills=0 rs=0 reqs=2688
|
||||
[10:21:21] + 152s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=65M/256M peak=82M kills=0 rs=0 adventurelog-postgres=255M/256M peak=256M kills=0 rs=0 reqs=2988
|
||||
[10:21:36] + 167s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=67M/256M peak=82M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=3288
|
||||
[10:21:52] + 182s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=68M/256M peak=85M kills=0 rs=0 adventurelog-postgres=255M/256M peak=256M kills=0 rs=0 reqs=3588
|
||||
[10:22:07] + 197s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=68M/256M peak=85M kills=0 rs=0 adventurelog-postgres=255M/256M peak=256M kills=0 rs=0 reqs=3888
|
||||
[10:22:22] + 212s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=73M/256M peak=86M kills=0 rs=0 adventurelog-postgres=255M/256M peak=256M kills=0 rs=0 reqs=4184
|
||||
[10:22:37] + 227s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=73M/256M peak=86M kills=0 rs=0 adventurelog-postgres=254M/256M peak=256M kills=0 rs=0 reqs=4484
|
||||
[10:22:52] + 242s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=73M/256M peak=91M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=4784
|
||||
[10:23:07] + 258s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=74M/256M peak=91M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=5084
|
||||
[10:23:23] + 273s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=75M/256M peak=92M kills=0 rs=0 adventurelog-postgres=253M/256M peak=256M kills=0 rs=0 reqs=5384
|
||||
[10:23:38] + 288s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=78M/256M peak=92M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=5680
|
||||
[10:23:53] + 303s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=79M/256M peak=96M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=5980
|
||||
[10:24:08] + 318s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=79M/256M peak=96M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=6280
|
||||
[10:24:23] + 333s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=80M/256M peak=97M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=6580
|
||||
[10:24:38] + 349s adventurelog=316M/384M peak=384M kills=0 rs=0 adventurelog-frontend=80M/256M peak=97M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=6876
|
||||
[10:24:54] + 364s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=81M/256M peak=98M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=7176
|
||||
[10:25:09] + 379s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=83M/256M peak=98M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=7476
|
||||
[10:25:24] + 394s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=83M/256M peak=100M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=7776
|
||||
[10:25:39] + 409s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=84M/256M peak=100M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=8076
|
||||
[10:25:54] + 424s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=88M/256M peak=102M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=8372
|
||||
[10:26:09] + 440s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=90M/256M peak=102M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=8672
|
||||
[10:26:25] + 455s adventurelog=315M/384M peak=384M kills=0 rs=0 adventurelog-frontend=91M/256M peak=107M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=8972
|
||||
[10:26:40] + 470s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=92M/256M peak=107M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=9272
|
||||
[10:26:55] + 485s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=93M/256M peak=109M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=9572
|
||||
[10:27:10] + 500s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=93M/256M peak=109M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=9868
|
||||
[10:27:25] + 515s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=94M/256M peak=112M kills=0 rs=0 adventurelog-postgres=251M/256M peak=256M kills=0 rs=0 reqs=10168
|
||||
[10:27:40] + 530s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=96M/256M peak=112M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=10468
|
||||
[10:27:55] + 546s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=98M/256M peak=113M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=10768
|
||||
[10:28:11] + 561s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=98M/256M peak=113M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=11068
|
||||
[10:28:26] + 576s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=99M/256M peak=115M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=11364
|
||||
[10:28:41] + 591s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=100M/256M peak=115M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=11664
|
||||
[10:28:56] + 606s adventurelog=314M/384M peak=384M kills=0 rs=0 adventurelog-frontend=101M/256M peak=117M kills=0 rs=0 adventurelog-postgres=250M/256M peak=256M kills=0 rs=0 reqs=11964
|
||||
[10:28:56] memory watch: killed=False tight=[] requests=11964 codes={'200': 11964}
|
||||
[10:28:56] MV-adventurelog: ABORT — putting the FROM images back
|
||||
[10:29:35] adventurelog: readback of the seeded account found=True
|
||||
[10:29:35] ABORT: app came back in 31.1s; data present=True
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
[2Kadventurelog-frontend | Listening on http://0.0.0.0:3000
|
||||
[2Kadventurelog-postgres | The files belonging to this database system will be owned by user "postgres".
|
||||
[2Kadventurelog-postgres | This user must also own the server process.
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | The database cluster will be initialized with locale "en_US.utf8".
|
||||
[2Kadventurelog-postgres | The default database encoding has accordingly been set to "UTF8".
|
||||
[2Kadventurelog-postgres | The default text search configuration will be set to "english".
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | Data page checksums are disabled.
|
||||
[2Kadventurelog | PostgreSQL is up - continuing...
|
||||
[2Kadventurelog | Operations to perform:
|
||||
[2Kadventurelog | Apply all migrations: account, admin, adventures, auth, authtoken, billing, contenttypes, integrations, invitations, mfa, sessions, sites, socialaccount, users, worldtravel
|
||||
[2Kadventurelog | Running migrations:
|
||||
[2Kadventurelog | Applying adventures.0072_trail_wanderer_author_fields... OK
|
||||
[2Kadventurelog | Applying adventures.0073_pointfield_geography... OK
|
||||
[2Kadventurelog | Applying adventures.0074_contentimage_source_metadata... OK
|
||||
[2Kadventurelog | Applying adventures.0075_make_visit_dates_timezone_aware... OK
|
||||
[2Kadventurelog | Applying adventures.0076_normalize_all_day_visit_end_dates... OK
|
||||
[2Kadventurelog | Applying billing.0001_initial... OK
|
||||
[2Kadventurelog | Applying integrations.0007_wandererintegration_api_key_auth... OK
|
||||
[2Kadventurelog | Applying integrations.0008_endurainintegration... OK
|
||||
[2Kadventurelog | Applying integrations.0009_alter_endurainintegration_auth_method... OK
|
||||
[2Kadventurelog | Applying worldtravel.0019_pointfield_coordinates... OK
|
||||
[2Kadventurelog | Running download-countries (first boot may take several minutes; ensure ~2GB RAM is available)...
|
||||
[2Kadventurelog | Latest data already imported.
|
||||
[2Kadventurelog | █████╗ ██████╗ ██╗ ██╗███████╗███╗ ██╗████████╗██╗ ██╗██████╗ ███████╗██╗ ██████╗ ██████╗
|
||||
[2Kadventurelog | ██╔══██╗██╔══██╗██║ ██║██╔════╝████╗ ██║╚══██╔══╝██║ ██║██╔══██╗██╔════╝██║ ██╔═══██╗██╔════╝
|
||||
[2Kadventurelog | ███████║██║ ██║██║ ██║█████╗ ██╔██╗ ██║ ██║ ██║ ██║██████╔╝█████╗ ██║ ██║ ██║██║ ███╗
|
||||
[2Kadventurelog | ██╔══██║██║ ██║╚██╗ ██╔╝██╔══╝ ██║╚██╗██║ ██║ ██║ ██║██╔══██╗██╔══╝ ██║ ██║ ██║██║ ██║
|
||||
[2Kadventurelog | ██║ ██║██████╔╝ ╚████╔╝ ███████╗██║ ╚████║ ██║ ╚██████╔╝██║ ██║███████╗███████╗╚██████╔╝╚██████╔╝
|
||||
[2Kadventurelog | ╚═╝ ╚═╝╚═════╝ ╚═══╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝ ╚═════╝ ╚═════╝
|
||||
[2Kadventurelog | “Go confidently in the direction of your dreams! Live the life you've imagined.” ― Henry David Thoreau
|
||||
[2Kadventurelog | 2026-09-27 10:18:08,990 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message.
|
||||
[2Kadventurelog | 2026-09-27 10:18:08,992 INFO supervisord started with pid 1
|
||||
[2Kadventurelog | 2026-09-27 10:18:09,996 INFO spawned: 'cron' with pid 82
|
||||
[2Kadventurelog | 2026-09-27 10:18:09,999 INFO spawned: 'gunicorn' with pid 83
|
||||
[2Kadventurelog | 2026-09-27 10:18:10,002 INFO spawned: 'memcached' with pid 84
|
||||
[2Kadventurelog | 2026-09-27 10:18:10,004 INFO spawned: 'nginx' with pid 85
|
||||
[2Kadventurelog | [2026-09-27 10:18:10 +0000] [83] [INFO] Starting gunicorn 23.0.0
|
||||
[2Kadventurelog | [2026-09-27 10:18:10 +0000] [83] [INFO] Listening at: http://[::]:8000 (83)
|
||||
[2Kadventurelog | [2026-09-27 10:18:10 +0000] [83] [INFO] Using worker: sync
|
||||
[2Kadventurelog | [2026-09-27 10:18:10 +0000] [96] [INFO] Booting worker with pid: 96
|
||||
[2Kadventurelog | [2026-09-27 10:18:10 +0000] [97] [INFO] Booting worker with pid: 97
|
||||
[2Kadventurelog | 2026-09-27 10:18:11,534 INFO success: cron entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
||||
[2Kadventurelog | 2026-09-27 10:18:11,535 INFO success: gunicorn entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
||||
[2Kadventurelog | 2026-09-27 10:18:11,535 INFO success: memcached entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
||||
[2Kadventurelog | 2026-09-27 10:18:11,535 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | fixing permissions on existing directory /var/lib/postgresql/data ... ok
|
||||
[2Kadventurelog-postgres | creating subdirectories ... ok
|
||||
[2Kadventurelog-postgres | selecting dynamic shared memory implementation ... posix
|
||||
[2Kadventurelog-postgres | selecting default max_connections ... 100
|
||||
[2Kadventurelog-postgres | selecting default shared_buffers ... 128MB
|
||||
[2Kadventurelog-postgres | selecting default time zone ... Europe/Budapest
|
||||
[2Kadventurelog-postgres | creating configuration files ... ok
|
||||
[2Kadventurelog-postgres | running bootstrap script ... ok
|
||||
[2Kadventurelog-postgres | sh: locale: not found
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:11.819 CEST [35] WARNING: no usable system locales were found
|
||||
[2Kadventurelog-postgres | performing post-bootstrap initialization ... ok
|
||||
[2Kadventurelog-postgres | syncing data to disk ... ok
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | Success. You can now start the database server using:
|
||||
[2Kadventurelog-postgres | initdb: warning: enabling "trust" authentication for local connections
|
||||
[2Kadventurelog-postgres | initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | pg_ctl -D /var/lib/postgresql/data -l logfile start
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | waiting for server to start....2026-09-27 12:13:13.210 CEST [41] LOG: starting PostgreSQL 16.15 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:13.213 CEST [41] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:13.223 CEST [44] LOG: database system was shut down at 2026-09-27 12:13:12 CEST
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:13.231 CEST [41] LOG: database system is ready to accept connections
|
||||
[2Kadventurelog-postgres | done
|
||||
[2Kadventurelog-postgres | server started
|
||||
[2Kadventurelog-postgres | CREATE DATABASE
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | /usr/local/bin/docker-entrypoint.sh: sourcing /docker-entrypoint-initdb.d/10_postgis.sh
|
||||
[2Kadventurelog-postgres | CREATE DATABASE
|
||||
[2Kadventurelog-postgres | Loading PostGIS extensions into template_postgis
|
||||
[2Kadventurelog-postgres | CREATE EXTENSION
|
||||
[2Kadventurelog-postgres | CREATE EXTENSION
|
||||
[2Kadventurelog-postgres | You are now connected to database "template_postgis" as user "adventurelog".
|
||||
[2Kadventurelog-postgres | DO
|
||||
[2Kadventurelog-postgres | Loading PostGIS extensions into adventurelog
|
||||
[2Kadventurelog-postgres | CREATE EXTENSION
|
||||
[2Kadventurelog-postgres | CREATE EXTENSION
|
||||
[2Kadventurelog-postgres | You are now connected to database "adventurelog" as user "adventurelog".
|
||||
[2Kadventurelog-postgres | DO
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | waiting for server to shut down....2026-09-27 12:13:17.020 CEST [41] LOG: received fast shutdown request
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.024 CEST [41] LOG: aborting any active transactions
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.031 CEST [41] LOG: background worker "logical replication launcher" (PID 47) exited with exit code 1
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.031 CEST [42] LOG: shutting down
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.034 CEST [42] LOG: checkpoint starting: shutdown immediate
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.354 CEST [42] LOG: checkpoint complete: wrote 4465 buffers (27.3%); 0 WAL file(s) added, 0 removed, 2 recycled; write=0.069 s, sync=0.235 s, total=0.323 s; sync files=963, longest=0.130 s, average=0.001 s; distance=34851 kB, estimate=34851 kB; lsn=0/36FFEE8, redo lsn=0/36FFEE8
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.378 CEST [41] LOG: database system is shut down
|
||||
[2Kadventurelog-postgres | done
|
||||
[2Kadventurelog-postgres | server stopped
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | PostgreSQL init process complete; ready for start up.
|
||||
[2Kadventurelog-postgres |
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.455 CEST [1] LOG: starting PostgreSQL 16.15 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.455 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.456 CEST [1] LOG: listening on IPv6 address "::", port 5432
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.461 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.470 CEST [65] LOG: database system was shut down at 2026-09-27 12:13:17 CEST
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:13:17.479 CEST [1] LOG: database system is ready to accept connections
|
||||
[2Kadventurelog-postgres | 2026-09-27 12:18:17.161 CEST [63] LOG: checkpoint starting: time
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"adventurelog": {
|
||||
"status": "running",
|
||||
"health": "healthy",
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
},
|
||||
"adventurelog-frontend": {
|
||||
"status": "running",
|
||||
"health": "healthy",
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
},
|
||||
"adventurelog-postgres": {
|
||||
"status": "running",
|
||||
"health": "healthy",
|
||||
"restarts": 0,
|
||||
"exit": 0
|
||||
}
|
||||
}
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"harness_version": 4,
|
||||
"edge": "MV-adventurelog",
|
||||
"app": "adventurelog",
|
||||
"note": "night 2026-09-23 within-a-major move: adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.13.0, adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0",
|
||||
"from": {
|
||||
"adventurelog": "ghcr.io/seanmorley15/adventurelog-backend:v0.12.1",
|
||||
"adventurelog-postgres": "postgis/postgis:16-3.5-alpine",
|
||||
"adventurelog-frontend": "ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1"
|
||||
},
|
||||
"to": {
|
||||
"adventurelog": "ghcr.io/seanmorley15/adventurelog-backend:v0.13.0",
|
||||
"adventurelog-postgres": "postgis/postgis:16-3.5-alpine",
|
||||
"adventurelog-frontend": "ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "\u001b[2Kadventurelog | Apply all migrations: account, admin, adventures, auth, authtoken, billing, contenttypes, integrations, invitations, mfa, sessions, sites, socialaccount, users, worldtravel",
|
||||
"abort": "starts-and-serves",
|
||||
"abort_detail": null,
|
||||
"engine_state_after": null,
|
||||
"memory": {
|
||||
"soak_s": 606.6,
|
||||
"requested_s": 600,
|
||||
"requests": 11964,
|
||||
"codes": {
|
||||
"200": 11964
|
||||
},
|
||||
"first_kill": null,
|
||||
"containers": {
|
||||
"adventurelog": {
|
||||
"limit": 402653184,
|
||||
"peak": 402653184,
|
||||
"peak_pct": 1.0,
|
||||
"anon_peak_sampled": 293941248,
|
||||
"anon_peak_pct": 0.73,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
},
|
||||
"adventurelog-frontend": {
|
||||
"limit": 268435456,
|
||||
"peak": 123539456,
|
||||
"peak_pct": 0.46,
|
||||
"anon_peak_sampled": 101703680,
|
||||
"anon_peak_pct": 0.379,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
},
|
||||
"adventurelog-postgres": {
|
||||
"limit": 268435456,
|
||||
"peak": 268439552,
|
||||
"peak_pct": 1.0,
|
||||
"anon_peak_sampled": 4337664,
|
||||
"anon_peak_pct": 0.016,
|
||||
"oom_kills": 0,
|
||||
"restarts": 0,
|
||||
"oomkilled_flag": false,
|
||||
"measured": true
|
||||
}
|
||||
},
|
||||
"unmeasured": [],
|
||||
"load": "reached"
|
||||
},
|
||||
"marks": [],
|
||||
"duration_s": 216.9,
|
||||
"measured_at": "2026-09-27T10:29:35Z",
|
||||
"evidence": "evidence/MV-adventurelog",
|
||||
"scratch_cleared": [],
|
||||
"files_changed": [],
|
||||
"total_s": 998.6
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"app": "adventurelog",
|
||||
"venue": "box 9202 (drill catalog, controller 0.275.0, health_timeout 5m = the product default), the product's guarded Update",
|
||||
"from": {
|
||||
"adventurelog": "ghcr.io/seanmorley15/adventurelog-backend:v0.12.1",
|
||||
"adventurelog-frontend": "ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1",
|
||||
"adventurelog-postgres": "postgis/postgis:16-3.5-alpine"
|
||||
},
|
||||
"to": {
|
||||
"adventurelog": "ghcr.io/seanmorley15/adventurelog-backend:v0.13.0",
|
||||
"adventurelog-frontend": "ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0",
|
||||
"adventurelog-postgres": "postgis/postgis:16-3.5-alpine"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"world_data": "1 Latest data already imported.",
|
||||
"duration_s": 204.1,
|
||||
"measured_at": "2026-09-27T10:50:47Z",
|
||||
"evidence": "felhom.eu/documentation/audits/version-travel-2026-09-26/C/apps/adventurelog/box/move2-5m.txt"
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
phase +0.0s backing-up | err=None
|
||||
phase +14.4s safety-dump | err=None
|
||||
phase +16.4s pulling | err=None
|
||||
phase +17.5s copying | err=None
|
||||
phase +31.8s starting | err=None
|
||||
phase +38.0s verifying | err=None
|
||||
phase +128.2s undoing | err=None
|
||||
phase +165.1s undone | err=None
|
||||
adventurelog: readback of the seeded account found=True
|
||||
backend world-data lines: 1 Latest data already imported.
|
||||
containers: adventurelog ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 Up 42 seconds (healthy) | adventurelog-postgres postgis/postgis:16-3.5-alpine Up 48 seconds (healthy) | adventurelog-frontend ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 Up 48 seconds (healthy) |
|
||||
2026/09/27 10:46:33 update.go:536: [INFO] [stacks] update adventurelog: accepted — guarded update started
|
||||
2026/09/27 10:46:33 update.go:1365: [INFO] [stacks] update adventurelog: phase checking
|
||||
2026/09/27 10:46:33 update.go:786: [INFO] [stacks] update adventurelog: ladder — the last step (1 of 1) — the catalog's current definition
|
||||
2026/09/27 10:46:33 update.go:816: [INFO] [stacks] update adventurelog: no usable copy on any tier — younger than 24h0m0s and not older than this install's deploy (2026-09-27T10:43:45Z) (found: none) — backing up first
|
||||
2026/09/27 10:46:33 update.go:1365: [INFO] [stacks] update adventurelog: phase backing-up
|
||||
2026/09/27 10:46:46 update.go:831: [INFO] [stacks] update adventurelog: precondition met after the backup — Tier 2 (second drive) copy from 2026-09-27T10:46:33Z
|
||||
2026/09/27 10:46:46 update.go:1365: [INFO] [stacks] update adventurelog: phase safety-dump
|
||||
2026/09/27 10:46:47 update.go:846: [INFO] [stacks] update adventurelog: safety dump done (1 file(s)) [/mnt/sys_drive/felhom-data/backups/primary/adventurelog/db-dumps/pre-restore-20260927T104647Z-adventurelog-postgres.sql]
|
||||
2026/09/27 10:46:48 undo.go:287: [INFO] [stacks] update adventurelog: the undo copy will hold 2 named volume(s), 234.1 MiB
|
||||
2026/09/27 10:46:48 update.go:1365: [INFO] [stacks] update adventurelog: phase pinning
|
||||
2026/09/27 10:46:48 pin.go:373: [INFO] [stacks] update adventurelog: pin advanced to /opt/docker/felhom-controller/data/catalog-cache/templates/adventurelog/docker-compose.yml (adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.13.0, adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-fro
|
||||
2026/09/27 10:46:48 update.go:1365: [INFO] [stacks] update adventurelog: phase pulling
|
||||
2026/09/27 10:46:49 update.go:1365: [INFO] [stacks] update adventurelog: phase copying
|
||||
2026/09/27 10:47:00 update.go:1365: [INFO] [stacks] update adventurelog: phase copying
|
||||
2026/09/27 10:47:01 undo.go:437: [INFO] [stacks] update adventurelog: copied adventurelog_adventurelog_media → adventurelog_adventurelog_media.pre-update-20260927T104700Z in 1.508s
|
||||
2026/09/27 10:47:01 update.go:1365: [INFO] [stacks] update adventurelog: phase copying
|
||||
2026/09/27 10:47:04 undo.go:437: [INFO] [stacks] update adventurelog: copied adventurelog_adventurelog_postgres_data → adventurelog_adventurelog_postgres_data.pre-update-20260927T104700Z in 2.066s
|
||||
2026/09/27 10:47:04 update.go:1365: [INFO] [stacks] update adventurelog: phase starting
|
||||
2026/09/27 10:47:10 update.go:1365: [INFO] [stacks] update adventurelog: phase verifying
|
||||
2026/09/27 10:48:35 update.go:1228: [WARN] [stacks] update adventurelog: no probe container for adventurelog — settling on container state instead; candidates: [adventurelog(starting) adventurelog-frontend(unhealthy) adventurelog-postgres(running)]
|
||||
2026/09/27 10:48:40 update.go:1066: [ERROR] [stacks] update adventurelog FAILED after the new version was started: not healthy: not healthy within 1m30s (last: unhealthy, and the check resolves to no container)
|
||||
2026/09/27 10:48:41 update.go:1058: [INFO] [stacks] update adventurelog: kept 3903 bytes of the app's own log at /opt/docker/stacks/adventurelog/hold-logs/20260927T104840Z/compose-logs.txt before stopping it (R-621)
|
||||
2026/09/27 10:48:41 update.go:1365: [INFO] [stacks] update adventurelog: phase undoing
|
||||
2026/09/27 10:48:41 undo.go:515: [WARN] [stacks] update adventurelog: UNDO — putting back the previous version and its 2 volume copy(ies) (reason: not healthy: not healthy within 1m30s (last: unhealthy, and the check resolves to no container))
|
||||
2026/09/27 10:49:17 unattended.go:492: [INFO] [stacks] update adventurelog: step adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.13.0, adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0, adventurelog-postgres=postgis/postgis:16-3.5-alpine recorded as undone — the au
|
||||
2026/09/27 10:49:17 undo.go:640: [INFO] [stacks] update adventurelog: event app_update_undone
|
||||
2026/09/27 10:49:17 undo.go:568: [INFO] [stacks] update adventurelog: UNDONE in 36s — the previous version is running on the data from before the update (the app's health check passed)
|
||||
|
||||
RESULT final_phase=undone seed_after=True state=running verdict=failed
|
||||
@@ -0,0 +1,31 @@
|
||||
phase +0.0s safety-dump | err=None
|
||||
phase +2.1s pulling | err=None
|
||||
phase +3.1s copying | err=None
|
||||
phase +10.3s starting | err=None
|
||||
phase +16.4s verifying | err=None
|
||||
phase +204.1s done | err=None
|
||||
adventurelog: readback of the seeded account found=True
|
||||
world-data lines: 1 Latest data already imported.
|
||||
containers: adventurelog ghcr.io/seanmorley15/adventurelog-backend:v0.13.0 Up 3 minutes (healthy) | adventurelog-frontend ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0 Up 3 minutes (healthy) | adventurelog-postgres postgis/postgis:16-3.5-alpine Up 3 minutes (healthy) |
|
||||
2026/09/27 10:50:48 update.go:536: [INFO] [stacks] update adventurelog: accepted — guarded update started
|
||||
2026/09/27 10:50:48 update.go:1365: [INFO] [stacks] update adventurelog: phase checking
|
||||
2026/09/27 10:50:48 update.go:786: [INFO] [stacks] update adventurelog: ladder — the last step (1 of 1) — the catalog's current definition
|
||||
2026/09/27 10:50:48 update.go:814: [INFO] [stacks] update adventurelog: precondition met — Tier 2 (second drive) copy from 2026-09-27T10:46:33Z (4m0s old, limit 24h0m0s)
|
||||
2026/09/27 10:50:48 update.go:1365: [INFO] [stacks] update adventurelog: phase safety-dump
|
||||
2026/09/27 10:50:49 update.go:846: [INFO] [stacks] update adventurelog: safety dump done (1 file(s)) [/mnt/sys_drive/felhom-data/backups/primary/adventurelog/db-dumps/pre-restore-20260927T105048Z-adventurelog-postgres.sql]
|
||||
2026/09/27 10:50:49 undo.go:287: [INFO] [stacks] update adventurelog: the undo copy will hold 2 named volume(s), 234.6 MiB
|
||||
2026/09/27 10:50:49 update.go:1365: [INFO] [stacks] update adventurelog: phase pinning
|
||||
2026/09/27 10:50:49 pin.go:373: [INFO] [stacks] update adventurelog: pin advanced to /opt/docker/felhom-controller/data/catalog-cache/templates/adventurelog/docker-compose.yml (adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.13.0, adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-fro
|
||||
2026/09/27 10:50:49 update.go:1365: [INFO] [stacks] update adventurelog: phase pulling
|
||||
2026/09/27 10:50:51 update.go:1365: [INFO] [stacks] update adventurelog: phase copying
|
||||
2026/09/27 10:50:54 update.go:1365: [INFO] [stacks] update adventurelog: phase copying
|
||||
2026/09/27 10:50:55 undo.go:437: [INFO] [stacks] update adventurelog: copied adventurelog_adventurelog_media → adventurelog_adventurelog_media.pre-update-20260927T105054Z in 832ms
|
||||
2026/09/27 10:50:55 update.go:1365: [INFO] [stacks] update adventurelog: phase copying
|
||||
2026/09/27 10:50:57 undo.go:437: [INFO] [stacks] update adventurelog: copied adventurelog_adventurelog_postgres_data → adventurelog_adventurelog_postgres_data.pre-update-20260927T105054Z in 2.031s
|
||||
2026/09/27 10:50:57 update.go:1365: [INFO] [stacks] update adventurelog: phase starting
|
||||
2026/09/27 10:51:03 update.go:1365: [INFO] [stacks] update adventurelog: phase verifying
|
||||
2026/09/27 10:52:29 update.go:1228: [WARN] [stacks] update adventurelog: no probe container for adventurelog — settling on container state instead; candidates: [adventurelog(starting) adventurelog-frontend(unhealthy) adventurelog-postgres(running)]
|
||||
2026/09/27 10:54:11 update.go:997: [INFO] [stacks] update adventurelog: healthy after 3m8s (the app's health check passed)
|
||||
2026/09/27 10:54:11 update.go:1033: [INFO] [stacks] update adventurelog: DONE in 3m24s
|
||||
|
||||
RESULT final_phase=done seed_after=True state=running verdict=proven
|
||||
@@ -0,0 +1,5 @@
|
||||
deploy/reuse adventurelog: True
|
||||
adventurelog: createsuperuser :: Superuser created successfully.
|
||||
adventurelog: seeded superuser drillfa397d
|
||||
adventurelog: readback of the seeded account found=True
|
||||
C1 seed reads back BEFORE: True
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
update:
|
||||
health_timeout: 5m
|
||||
Up 20 seconds (healthy)
|
||||
@@ -0,0 +1,3 @@
|
||||
12:12:51 START adventurelog ['adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.13.0', 'adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0']
|
||||
12:29:43 DONE adventurelog rc=0 verdict=proven read_before=True read_after=True abort=starts-and-serves marks=[] peaks={'adventurelog': 1.0, 'adventurelog-frontend': 0.46, 'adventurelog-postgres': 1.0} detail='None' (1012s)
|
||||
12:29:43 QUEUE q2 FINISHED
|
||||
@@ -0,0 +1,17 @@
|
||||
== demo-hp-bb76ea 2026-09-27T10:16:42Z
|
||||
{"op_blob_b64":"eyJleHBpcmVzX2F0IjoiMjAyNi0wOS0yN1QxMDo0Njo0MloiLCJpc3N1ZWRfYXQiOiIyMDI2LTA5LTI3VDEwOjE2OjQyWiIsImtleV9pZCI6ImZlbGhvbS1vcC0xIiwibm9uY2UiOiIyZWExMWJiNjk3Zjc3ZjAwM2RiMDA4MTJhOGVhMTI5MSIsIm9wIjoiYWdlbnRfdXBkYXRlIiwicGFyYW1zIjp7InNoYTI1NiI6ImFkNGU3NWYxNmQzMzg1NTJmNDU4OGQzZmU2NGM1MWNiZjk2NTEyMjBiOWQyMjNiNTM4NmI4NWI2YzM3ZmQ0YzMiLCJ2ZXJzaW9uIjoiMC4xMzUuMCJ9LCJ0YXJnZXQiOnsiZ3Vlc3RfaWQiOiIiLCJob3N0X2lkIjoiZGVtby1ocC1iYjc2ZWEifX0=","sig_armored":"-----BEGIN SSH SIGNATURE-----\nU1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgvzPSoI2ADfHbHEAHRCPmujzBoW\nMZnxNr+xYHre2UvD4AAAAMZmVsaG9tLW9wLXYxAAAAAAAAAAZzaGE1MTIAAABTAAAAC3Nz\naC1lZDI1NTE5AAAAQDW14qvokAwDQxiNXvQAK1KQgi0KM/8MCr4QXDmFhZEjnmdmu6CfP0\nIz55SCBDCHPYOENfBvftpYMD6wz3elqwE=\n-----END SSH SIGNATURE-----\n"}
|
||||
uploaded signed op to the hub jobs queue
|
||||
== demo-felhom-8363b5 2026-09-27T10:16:42Z
|
||||
{"op_blob_b64":"eyJleHBpcmVzX2F0IjoiMjAyNi0wOS0yN1QxMDo0Njo0MloiLCJpc3N1ZWRfYXQiOiIyMDI2LTA5LTI3VDEwOjE2OjQyWiIsImtleV9pZCI6ImZlbGhvbS1vcC0xIiwibm9uY2UiOiIxNjAyYjIzOTI5MTg1ZWU2ZDlkNGQ0ZTNhMGY1ODg5YyIsIm9wIjoiYWdlbnRfdXBkYXRlIiwicGFyYW1zIjp7InNoYTI1NiI6ImFkNGU3NWYxNmQzMzg1NTJmNDU4OGQzZmU2NGM1MWNiZjk2NTEyMjBiOWQyMjNiNTM4NmI4NWI2YzM3ZmQ0YzMiLCJ2ZXJzaW9uIjoiMC4xMzUuMCJ9LCJ0YXJnZXQiOnsiZ3Vlc3RfaWQiOiIiLCJob3N0X2lkIjoiZGVtby1mZWxob20tODM2M2I1In19","sig_armored":"-----BEGIN SSH SIGNATURE-----\nU1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgvzPSoI2ADfHbHEAHRCPmujzBoW\nMZnxNr+xYHre2UvD4AAAAMZmVsaG9tLW9wLXYxAAAAAAAAAAZzaGE1MTIAAABTAAAAC3Nz\naC1lZDI1NTE5AAAAQBWbQHqOcEJPGWVn6+zIDnLgtjp0I7ls56AqcJd8QE0jVtIahHyAhN\ng9dnVhL8lclx5Jcd6MOBs2G7LrTzRYiw4=\n-----END SSH SIGNATURE-----\n"}
|
||||
uploaded signed op to the hub jobs queue
|
||||
== demo-hp felhom-agent 0.134.0
|
||||
== felhom-pve felhom-agent 0.135.0
|
||||
Sep 27 12:21:53 demo-felhom felhom-agent[2789656]: time=2026-09-27T12:21:53.431+02:00 level=WARN msg="selfupdate: new version running — dwelling before commit" version=0.135.0 prev=0.134.0 dwell=1m0s
|
||||
Sep 27 12:22:53 demo-felhom sudo[2790969]: felhom-agent : PWD=/ ; USER=root ; COMMAND=/usr/local/sbin/felhom-selfupdate-guarded commit
|
||||
Sep 27 12:22:53 demo-felhom felhom-selfupdate-guarded[2790977]: committed (pending cleared, .prev retained)
|
||||
Sep 27 12:22:53 demo-felhom felhom-agent[2789656]: time=2026-09-27T12:22:53.450+02:00 level=WARN msg="selfupdate: update committed" version=0.135.0 wrapper=""
|
||||
== demo-hp 2026-09-27T10:29:13Z felhom-agent 0.135.0
|
||||
Sep 27 12:27:58 demo-hp felhom-agent[995644]: time=2026-09-27T12:27:58.210+02:00 level=WARN msg="signedjobs: signed op COMPLETED" job=94658c4370ef2c79 op=agent_update
|
||||
Sep 27 12:28:02 demo-hp felhom-agent[998480]: time=2026-09-27T12:28:02.239+02:00 level=WARN msg="selfupdate: new version running — dwelling before commit" version=0.135.0 prev=0.134.0 dwell=1m0s
|
||||
Sep 27 12:29:02 demo-hp sudo[1003468]: felhom-agent : PWD=/ ; USER=root ; COMMAND=/usr/local/sbin/felhom-selfupdate-guarded commit
|
||||
Sep 27 12:29:02 demo-hp felhom-agent[998480]: time=2026-09-27T12:29:02.260+02:00 level=WARN msg="selfupdate: update committed" version=0.135.0 wrapper=""
|
||||
@@ -0,0 +1,6 @@
|
||||
# D1 — R-689, agent v0.135.0
|
||||
|
||||
Fix: `backup/runner.go` `guestBackupArchive`. Red-proof `RP-r689-golden-picked.txt`. Released by `scripts/release-agent.sh`
|
||||
(tag `v0.135.0` at `d4be12c`, sha256 `ad4e75f1…fd4c3`, verified by download; NOT vouched). Delivered by signed `agent_update`
|
||||
to both demo hosts (`D1-signed-delivery.txt`): demo-felhom committed 12:22:53 CEST, demo-hp 12:29:02 CEST. The first
|
||||
scheduled restore-test evaluation on demo-hp after the update is due ~18:28 CEST: `D1-cycle-demo-hp.txt` (read later).
|
||||
@@ -0,0 +1,5 @@
|
||||
# D2 — R-695: single-flight file-browser sync; no empty kept folder listed or bound
|
||||
|
||||
Tests `TestR695_QueuedSyncsCoalesceIntoOne` (6 requests → 2 syncs; a later request is never dropped) and
|
||||
`TestR695_AnEmptyDatedKeptFolderIsNeverListed`; both red-proofed (`RP-r695.txt`). Not reproduced live (the original was a
|
||||
same-second race).
|
||||
@@ -0,0 +1,6 @@
|
||||
# D3 — R-691: the kept view reads a folder another user owns; its name follows the language
|
||||
|
||||
Decision (CC unattended, `07` §6.5): the file browser joins the OWNING GROUP of a group-readable kept folder (`group_add`;
|
||||
never gid 0, never its own 1000); binds stay `:ro`; nothing on disk changes. A language switch re-syncs the file browser.
|
||||
Tests `TestR691_KeptReadGroups`, `TestR691_ALanguageSwitchResyncsTheFileBrowser`, red-proofed (`RP-r691.txt`).
|
||||
NOT live-proven: no nextcloud kept folder existed on 9202 this session. NOT built: (2) Load from the off-site copy.
|
||||
@@ -0,0 +1,4 @@
|
||||
# 9202 before: gitea.dooplex.hu/admin/felhom-controller:0.275.0-rc1
|
||||
gitea.dooplex.hu/admin/felhom-controller:0.275.0
|
||||
# 9202 after: gitea.dooplex.hu/admin/felhom-controller:0.275.0 Up 6 seconds (healthy)
|
||||
2026/09/27 10:14:16 main.go:337: [INFO] felhom-controller 0.275.0 starting (customer: demo-hp, domain: enkisfelhom.hu)
|
||||
@@ -0,0 +1,8 @@
|
||||
# global floor 0.275.0 (declared MinAgent 0.131.0) — 2026-09-27T10:14:31Z
|
||||
HTTP/1.1 303 See Other
|
||||
Location: /configuration?flash=floor_set
|
||||
2026-09-27T10:14:44Z
|
||||
demo-hp: gitea.dooplex.hu/admin/felhom-controller:0.275.0
|
||||
demo-felhom: gitea.dooplex.hu/admin/felhom-controller:0.275.0
|
||||
gitea.dooplex.hu/admin/felhom-controller:0.275.0 Up 4 seconds (health: starting)
|
||||
gitea.dooplex.hu/admin/felhom-controller:0.275.0 Up 8 seconds (healthy)
|
||||
@@ -0,0 +1,27 @@
|
||||
12:56:12 [X] stop -> 200 {'ok': True, 'message': 'Stack docmost stop completed'}
|
||||
12:56:44 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'docmost', 'volumes_removed': ['docmost_docmost_postgres_data', 'docmost_docmost_redis_data', 'docmost_docmost_storage']
|
||||
12:56:52 [X] after remove: deployed=False leftovers='/opt/docker/stacks/docmost'
|
||||
12:56:55 [X] stop -> 200 {'ok': True, 'message': 'Stack tandoor stop completed'}
|
||||
12:57:27 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd
|
||||
12:57:35 [X] after remove: deployed=False leftovers='/opt/docker/stacks/tandoor'
|
||||
12:57:38 [X] stop -> 200 {'ok': True, 'message': 'Stack adventurelog stop completed'}
|
||||
12:58:10 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'adventurelog', 'volumes_removed': ['adventurelog_adventurelog_media', 'adventurelog_adventurelog_postgres_data'], 'hdd_
|
||||
12:58:18 [X] after remove: deployed=False leftovers='/opt/docker/stacks/adventurelog'
|
||||
sync_interval: 15m
|
||||
token: <redacted>
|
||||
username: ""
|
||||
hub:
|
||||
0
|
||||
|
||||
drill main now f1a7d6c, live main f1a7d6c
|
||||
# 9202 after teardown 2026-09-27T10:58:55Z
|
||||
repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
|
||||
0
|
||||
felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.275.0 Up 25 seconds (healthy)
|
||||
filebrowser gtstef/filebrowser:1.3.3-stable Up 45 hours (healthy)
|
||||
paperless-postgres postgres:18-alpine Up About an hour (healthy)
|
||||
paperless-redis redis:7-alpine Up About an hour (healthy)
|
||||
paperless-webserver ghcr.io/paperless-ngx/paperless-ngx:2.20.15 Up About an hour (healthy)
|
||||
privatebin privatebin/pdo:2.0.6 Up 10 hours (healthy)
|
||||
traefik traefik:v3.6.7 Up 2 days
|
||||
paperless-ngx_paperless_postgres_data.pre-update-20260927T094421Z
|
||||
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python3
|
||||
"""benchq.py <queue-name> <app> <svc=ref>[,<svc=ref>] [<app> <moves> ...]
|
||||
|
||||
Runs `upgrade-test.py --move` on bench LXC 9401 for each app IN ORDER, then copies that edge's
|
||||
evidence OFF the bench into apps/<app>/bench/ before starting the next (R-320: the evidence leaves
|
||||
the machine at the end of the phase that made it). One line per finished edge in benchq-<queue>.txt.
|
||||
"""
|
||||
import json, os, subprocess, sys, time
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
BENCH = "/tmp/claude-1000/-mnt-5-hdd-felhom-eu-git/a061fcea-2c08-478c-9fd6-991dc8e748f0/scratchpad/bench.sh"
|
||||
q = sys.argv[1]
|
||||
args = sys.argv[2:]
|
||||
out = open(os.path.join(HERE, "..", os.environ.get("BQ", "B"), f"benchq-{q}.txt"), "a", buffering=1)
|
||||
for i in range(0, len(args), 2):
|
||||
app, moves = args[i], args[i + 1].split(",")
|
||||
label = app
|
||||
if "@" in app: # romm@engine: a second edge of one app gets its own folder
|
||||
app, tag = app.split("@", 1)
|
||||
label = f"{app}-{tag}"
|
||||
t0 = time.time()
|
||||
out.write(f"{time.strftime('%H:%M:%S')} START {app} {moves}\n")
|
||||
pre = f"cd /opt/upg && [ -d evidence/MV-{app} ] && mv evidence/MV-{app} evidence/MV-{app}-$(date +%s); "
|
||||
subprocess.run([BENCH], input=pre, capture_output=True, text=True, timeout=120)
|
||||
cmd = (f"cd /opt/upg && timeout 2400 python3 upgrade-test.py --soak 600 --move {app} {' '.join(moves)} "
|
||||
f"> /opt/upg/MV-{app}.log 2>&1; echo rc=$?")
|
||||
r = subprocess.run([BENCH], input=cmd, capture_output=True, text=True, timeout=2700)
|
||||
dest = os.path.join(HERE, "..", os.environ.get("BQ", "B"), "apps", label, "bench")
|
||||
os.makedirs(dest, exist_ok=True)
|
||||
pull = (f"cd /opt/upg && tar czf /tmp/ev-{app}.tgz MV-{app}.log evidence/MV-{app} 2>/dev/null; "
|
||||
f"base64 -w0 /tmp/ev-{app}.tgz")
|
||||
r2 = subprocess.run([BENCH], input=pull, capture_output=True, text=True, timeout=600)
|
||||
import base64, io, tarfile
|
||||
try:
|
||||
tarfile.open(fileobj=io.BytesIO(base64.b64decode(r2.stdout.strip()))).extractall(dest)
|
||||
except Exception as e:
|
||||
out.write(f" evidence pull FAILED for {app}: {e}\n")
|
||||
v = {}
|
||||
try:
|
||||
v = json.load(open(os.path.join(dest, "evidence", f"MV-{app}", "verdict.json")))
|
||||
except Exception:
|
||||
pass
|
||||
mem = v.get("memory") or {}
|
||||
peaks = {n: c.get("peak_pct") for n, c in (mem.get("containers") or {}).items()}
|
||||
out.write(f"{time.strftime('%H:%M:%S')} DONE {app} {r.stdout.strip()} verdict={v.get('verdict')} "
|
||||
f"read_before={v.get('seed_read_before')} read_after={v.get('seed_read_after')} "
|
||||
f"abort={v.get('abort')} marks={v.get('marks')} peaks={peaks} "
|
||||
f"detail={str(v.get('abort_detail'))[:160]!r} ({round(time.time()-t0)}s)\n")
|
||||
out.write(f"{time.strftime('%H:%M:%S')} QUEUE {q} FINISHED\n")
|
||||
@@ -0,0 +1,47 @@
|
||||
"""boxmove.py <phase> <app> <sub> [<svc> <from> <to> <fmj> <tmj>] — Part B's BOX venue on 9202 (drill catalog):
|
||||
prep: deploy (reuse if installed), seed through the app's own route, read it back (C1)
|
||||
move: drill commit with the mark → sync → the guarded Update → engine state + seed read back → box verdict JSON
|
||||
Evidence: B/apps/<app>/box/."""
|
||||
import json, os, sys, time, subprocess
|
||||
import walk as w, fixtures
|
||||
phase, app, sub = sys.argv[1:4]
|
||||
EVD = f"{w.EV}/B/apps/{app}/box"; os.makedirs(EVD, exist_ok=True)
|
||||
TOK = w.SC + "/seed-tokens.json"
|
||||
log = open(f"{EVD}/{phase}.txt", "a", buffering=1)
|
||||
def say(*a):
|
||||
w.say(*a); log.write(" ".join(map(str, a)) + "\n")
|
||||
w.login()
|
||||
toks = json.load(open(TOK)) if os.path.exists(TOK) else {}
|
||||
if phase == "prep":
|
||||
say(f"deploy/reuse {app}: {w.deploy(app, sub)}")
|
||||
toks[app] = fixtures.FIXTURES[app].seed(w, sub, say)
|
||||
json.dump(toks, open(TOK, "w"), default=str); os.chmod(TOK, 0o600)
|
||||
say(f"C1 seed reads back BEFORE: {fixtures.FIXTURES[app].verify(w, sub, toks[app], say)}")
|
||||
else:
|
||||
svc, frm, to, fmj, tmj = sys.argv[4:9]
|
||||
st = w.stack(app); before = (st.get("app_config") or {}).get("pinned_images")
|
||||
pg = lambda: w.guest(f"docker exec {svc} sh -c 'cat $PGDATA/PG_VERSION' 2>&1").strip()
|
||||
say(f"before: pinned={before} PG_VERSION={pg()}")
|
||||
r = subprocess.run([sys.executable, os.path.join(os.path.dirname(__file__), "drillmove.py"), app, svc, frm, to, fmj, tmj], capture_output=True, text=True)
|
||||
say("drill:", r.stdout.strip().splitlines()[0] if r.stdout else r.stderr[-300:])
|
||||
w.sync_rescan(app, to)
|
||||
since = w.guest("date -u +%Y-%m-%dT%H:%M:%SZ").strip()
|
||||
res = w.press_update(app, poll=1, cap_s=1800)
|
||||
for p in res.get("phases", []):
|
||||
log.write(f" phase +{p['t']}s {p['phase']} | err={p['error']}\n")
|
||||
time.sleep(10)
|
||||
after_pg = pg(); read = fixtures.FIXTURES[app].verify(w, sub, toks[app], say)
|
||||
conv = w.guest(f"docker logs --since {since} felhom-controller 2>&1 | grep -E 'update {app}|CONVERT' | grep -v DEBUG | cut -c1-400")
|
||||
log.write(conv + "\n")
|
||||
line = next((l for l in conv.splitlines() if "CONVERTED" in l), "")
|
||||
st = w.stack(app)
|
||||
verdict = {"app": app, "venue": "box 9202 (drill catalog, controller 0.275.0-rc1), the product's guarded Update",
|
||||
"from": before, "to": (st.get("app_config") or {}).get("pinned_images"),
|
||||
"verdict": "proven" if (res.get("final_phase") == "done" and read and after_pg == str(tmj)) else "failed",
|
||||
"seed_read_before": True, "seed_read_after": read, "healthy_after": st.get("state") == "running",
|
||||
"engine_conversion": {"service": svc, "engine": "postgres", "from": int(fmj), "to": int(tmj),
|
||||
"result": "converted" if line else "not-seen", "controller_line": line.split("] ", 2)[-1] if line else ""},
|
||||
"duration_s": res.get("duration_s"), "measured_at": since,
|
||||
"evidence": f"felhom.eu/documentation/audits/version-travel-2026-09-26/B/apps/{app}/box/move.txt"}
|
||||
json.dump(verdict, open(f"{EVD}/box-verdict-{app}.json", "w"), indent=2)
|
||||
say(f"RESULT final_phase={res.get('final_phase')} PG_VERSION={after_pg} seed_after={read} verdict={verdict['verdict']}")
|
||||
@@ -0,0 +1,39 @@
|
||||
"""drillmove.py <app> <svc> <from-ref> <to-ref> <from-major> <to-major>
|
||||
DRILL-ONLY commit: move one PostgreSQL service in the drill catalog and add the ladder entry that carries the
|
||||
engine_conversion mark, so the box (9202) can prove the conversion through its own guarded Update. The live
|
||||
catalog's entry is written later ONLY by `upgrade-test.py --write-ladder` from both verdicts."""
|
||||
import json, re, subprocess, sys
|
||||
D = "/mnt/5_hdd/felhom.eu/drill/app-catalog-drill"
|
||||
app, svc, frm, to, fmj, tmj = sys.argv[1:7]
|
||||
subprocess.run(["git", "-C", D, "pull", "-q", "--rebase", "origin", "main"], check=True)
|
||||
comp = f"{D}/templates/{app}/docker-compose.yml"
|
||||
fy = f"{D}/templates/{app}/.felhom.yml"
|
||||
s = open(comp).read()
|
||||
assert f"image: {frm}" in s, "from ref not in compose"
|
||||
pins = {}
|
||||
cur = None
|
||||
for line in s.splitlines():
|
||||
m = re.match(r"^ ([a-z0-9-]+):\s*$", line)
|
||||
if m: cur = m.group(1)
|
||||
m = re.match(r"^\s+image:\s*(\S+)", line)
|
||||
if m and cur: pins[cur] = m.group(1)
|
||||
s = s.replace(f"image: {frm}", f"image: {to}")
|
||||
if int(tmj) >= 18: # 18+ wants the volume at /var/lib/postgresql (09 decision 37)
|
||||
s = re.sub(r"(-\s+[A-Za-z0-9_.-]*postgres[A-Za-z0-9_.-]*:)/var/lib/postgresql/data(\s*)$", r"\1/var/lib/postgresql\2", s, flags=re.M)
|
||||
open(comp, "w").write(s)
|
||||
top = dict(pins); top[svc] = to
|
||||
entry = {"from": pins, "to": top, "verdict": "proven", "tested_at": "DRILL", "harness_version": 4,
|
||||
"evidence": "DRILL (box proof in progress)", "marks": {"files_may_change": False, "needs_person": None, "memory_tight": False},
|
||||
"engine_conversion": {"service": svc, "engine": "postgres", "from": int(fmj), "to": int(tmj)}}
|
||||
f = open(fy).read()
|
||||
line = " - " + json.dumps(entry) + "\n"
|
||||
if "update_ladder:" in f:
|
||||
f = f.replace("update_ladder:\n", "update_ladder:\n", 1)
|
||||
f = f.rstrip("\n") + "\n" + line if f.rstrip("\n").endswith("}") else f + line
|
||||
else:
|
||||
f = f.rstrip("\n") + "\nupdate_ladder:\n" + line
|
||||
open(fy, "w").write(f)
|
||||
subprocess.run(["git", "-C", D, "commit", "-q", "-am", f"DRILL {app}: {svc} {frm} -> {to} with the engine_conversion mark (box proof)"], check=True)
|
||||
subprocess.run(["git", "-C", D, "push", "-q", "origin", "main"], check=True, capture_output=True)
|
||||
print(subprocess.run(["git", "-C", D, "log", "--oneline", "-1"], capture_output=True, text=True).stdout.strip())
|
||||
print(subprocess.run(["git", "-C", D, "show", "--stat", "HEAD"], capture_output=True, text=True).stdout[-300:])
|
||||
@@ -1075,6 +1075,10 @@ FIXTURES = {
|
||||
"adventurelog": Django("adventurelog", "travel", "/admin/login/"),
|
||||
"tandoor": Django("tandoor", "recipes", "/accounts/login/",
|
||||
python="/opt/recipes/venv/bin/python", workdir="/opt/recipes"),
|
||||
# 2026-09-26 (version-travel Part B): paperless-ngx is Django too — `manage.py` in its WORKDIR
|
||||
# (/usr/src/paperless/src), python3 on PATH; measured on 9202 (the readback answered False for a
|
||||
# username that cannot exist) before this line was written.
|
||||
"paperless-ngx": Django("paperless-webserver", "paperless", "/accounts/login/"),
|
||||
"privatebin": PrivateBin(),
|
||||
"docmost": Docmost(),
|
||||
"bookstack": BookStack(),
|
||||
|
||||
@@ -406,3 +406,16 @@ Compressed here to title, shipping version, evidence, and the sentences that sta
|
||||
| **R-657** | **A reinstall over kept data ran silently into the old files (nextcloud never installed) (P2).** Operator ruling 2026-09-25 (`09` §3 decision 36), built in v0.274.0: the install asks „use my kept data" / „start fresh" (409 `kept_data_choice` until chosen); start fresh renames into `<drive>/kept/<app>/<date>/`; the „Megőrzött adatok" page lists, loads, deletes (typed). Proven live on 9202 in both languages (`audits/night-2026-09-26/E/E5-*`). | CLOSED 2026-09-25 — controller v0.274.0 | `git show 3386041e6215:documentation/backlog/OPEN-ITEMS.md`; `audits/night-2026-09-26/E/` |
|
||||
| **R-690** | **The removed-app restore (R-487) never found a unit kept on a DATA drive (P1).** v0.274.0: `isStackDeployed` instead of `GetStackComposePath` (true for every catalog app); the R-487 test's fake had answered it for deployed apps only. Proven live: „use my kept data" loaded from `scratch_hdd/backups/primary/nextcloud`. | CLOSED 2026-09-25 — controller v0.274.0 | filed and closed this session; `audits/night-2026-09-26/E/E1-README.md` |
|
||||
| **R-692** | **The Kept-data list named two leftovers "Filebrowser" (P2).** Found live on 9202 (0.274.0-rc1, 2026-09-25): the read-only view makes the file browser's compose bind every kept folder by absolute path, and the owner lookup took it. No live folder was at risk. Fixed before release in v0.274.0: an owner binds the folder through `${HDD_PATH}` (the folder or one inside it), never a protected stack. `TestKept_OwnerIsNeverTheFileBrowser`, red-proofed. `audits/night-2026-09-26/E/` | CLOSED 2026-09-25 — fixed in v0.274.0 before it shipped | filed and closed this session; `audits/night-2026-09-26/E/E5-redproof-owner.txt` |
|
||||
|
||||
## 2026-09-26/27 — a backup's data and its version travel together (controller v0.275.0, agent v0.135.0, catalog f1a7d6c)
|
||||
|
||||
Full original text of each row: `git show <the commit that added this section>^:documentation/backlog/OPEN-ITEMS.md`.
|
||||
|
||||
| id | what closed | closed | where the full text is |
|
||||
|---|---|---|---|
|
||||
| **R-696** | **Tier 1's "proven at" was the manifest's refresh time; the kept pre-conversion copy was released on a pre-conversion backup (P2). Widened by A1: the refresh re-captured the unit's DEFINITION over the old data, and a restore in that window left a PostgreSQL app down.** v0.275.0: every data file stamped with the versions that wrote it; the unit keeps the definition its data belongs to; a restore never mixes versions (unit restores refuse a mismatch, the off-site restore writes the snapshot's definition); every tier's time is its data's; the release needs a dump on the new major. Rule: `07` §6.6. Proven live on 9202 in the box's own night (00:30 data, 02:15 conversion, 02:16 refresh kept the 16 definition; restore back whole at 16; climb again). | CLOSED 2026-09-27 — controller v0.275.0 | `audits/version-travel-2026-09-26/A1/`, `A5-redproofs/`, `A5-live/` |
|
||||
| **R-699** | **The update's precondition accepted a unit holding no data (a just-installed app's) as a fresh copy (P2).** Found live on 9202 this session (tandoor). v0.275.0: such a unit stays listed, never a precondition copy on Tier 1/2; the update backs up first (seen live: adventurelog's fresh install got `backing-up`). | CLOSED 2026-09-27 — controller v0.275.0 | filed and closed this session; `A5-redproofs/RP6-*` |
|
||||
| **R-695** | **Two kept-data Deletes in one second could leave a self-perpetuating empty kept folder (P3).** v0.275.0: the file-browser sync is single-flight; an empty dated kept folder is never listed or bound. Red-proofed. | CLOSED 2026-09-27 — controller v0.275.0 | `audits/version-travel-2026-09-26/D2/` |
|
||||
| **R-694** | **A load/restore regenerated a withheld login and the page showed it as the password (P3).** Measured per app from each entrypoint: 6 of 7 keep the login in their data (code-server is the exception). v0.275.0: `restored_logins`; the page shows no value and says to use the password valid at the backup. | CLOSED 2026-09-27 — controller v0.275.0 | `audits/version-travel-2026-09-26/D4/` |
|
||||
| **R-689** | **demo-hp's restore test picked the golden template in `local:backup/` and failed every 6 h (P3).** Agent v0.135.0: only `vzdump-<type>-<vmid>` files or PBS `ct/…` or `vm/…` snapshots with a reported vmid. Delivered to both demo hosts by signed `agent_update`. | CLOSED 2026-09-27 — agent v0.135.0 | `audits/version-travel-2026-09-26/D1/` |
|
||||
| **R-655** | **adventurelog v0.13.0 could not become healthy in the catalog's template (P2).** Operator ruling decision 41 (keep the download). Catalog `06ea7da`: the frontend override dropped; a cut-off world-data file set aside before start (a pending import crash-looped 10× without it). Proven on the bench and on 9202 (204 s under the default 5-min wait). | CLOSED 2026-09-27 — catalog `06ea7da` | `audits/version-travel-2026-09-26/C/` |
|
||||
|
||||
@@ -672,7 +672,7 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server`
|
||||
| **R-458** | **[P3-LOW] `.felhom.yml` keeps flowing to an app whose compose file is FROZEN, so a frozen app can receive a health check written for a version it is not running.** The v0.235.0 render freezes `docker-compose.yml` for a pinned app once the catalog moves past its version, but copies `.felhom.yml` **verbatim in every case** (`Syncer.copyTemplates`). **The asymmetry is deliberate and both directions were considered:** `.felhom.yml` carries no image, and it carries `catalog_since` — the single input the update badge uses to say *„Frissítés elérhető — N napja"* — so freezing it would silently withhold the one number that tells a customer they are behind, i.e. it would break slice 2 to protect slice 3. **What it costs:** the file also carries the controller-side `healthcheck:` block and resource hints, so a template updated for a newer version can hand a frozen app a probe written for software it is not running. **THE FAILURE DIRECTION IS A FALSE ALARM, NEVER DATA LOSS** — the app keeps running; at worst it renders as degraded and, if it persisted, could reach the dead-app alarm path. That is the same class as R-330's false e-mails, which is why this is a row and not a footnote. **Not fixed now, and the reason is that the cheap fix is wrong:** freezing the whole file breaks the badge, and freezing only the `healthcheck:` key means the syncer would have to parse and re-assemble a customer-facing metadata file — new surface on the one path that touches every app on every box every 15 minutes. **What would settle it:** whether any catalog `healthcheck:` has ever been changed in the same commit as an `image:` line (measurable from the catalog's own history, no box needed). If the answer is "never", the exposure is theoretical and the row can be closed by measurement instead of by code. Owner: **CC.** `architecture/09-update-architecture.md` §5.4, §8.5 **— UPDATE NIGHT 2026-09-21:** **MEASURED 2026-09-21 (update night), leg B9, and the row's risk is NARROWER than it states.** A `.felhom.yml`-only change (a health check for a path only a newer version would serve) was pushed to a FROZEN `bentopdf` — installed `v2.8.6`, catalog ahead. §5.4's asymmetry is confirmed live: the new `.felhom.yml` reached the box while the compose `image:` line stayed `v2.8.6`. **But no false alarm was produced**: ten samples over two minutes all read `state=running` with the front door at `200`. The reason is the probe's own semantics, not luck — `healthprobe.go:258-261` treats **any response** as healthy for `type: http`, and the bogus path answers 404, which is a response. **So this row's false-alarm risk exists only for `type: api` probes carrying an `expect` block**, where the status is compared; for every `type: http` template and every `type: api` without `expect`, a newer version's path is invisible to the probe. The row's actual claim — the failure direction is a false alarm, never data loss — stands and is now measured. Evidence: `audits/update-night-2026-09-21/21-B9-frozen-app-newer-felhomyml.md`. | **READY — rank P3-LOW; owner: CC** |
|
||||
| **R-460** | **[P3-LOW] BookStack's FILE half cannot be seeded or verified without a browser, so its upgrades can only ever be auto-proven for the DATABASE.** MEASURED 2026-09-06 while building the R-449 harness. BookStack's API needs a token that is only mintable through its web UI, and its HTTP login is unusable headlessly for a second, independent reason: `APP_URL` comes from the template as `https://${SUBDOMAIN}.${DOMAIN}`, so the app marks its session and XSRF cookies **`secure`**; curl over plain http stores neither and **every login POST returns 419 Page Expired**, which looks exactly like a wrong password. The container serves no TLS. **The database half IS provable** — the harness seeds with `php artisan bookstack:create-admin` and reads back with a DIFFERENT artisan command that must find the record, carrying its own negative control on every call. **What is unprovable is an uploaded image or attachment**, i.e. exactly the half a customer would notice. **THIS IS A FACT ABOUT THE APP, NOT A DEFECT IN THE HARNESS**, and it is recorded because Slice 6 needs to know which apps can be auto-verified and which can only be partly verified — nobody had that list before. **Deliberately NOT worked around:** planting a file in the volume would make the test pass while proving nothing, which is R-156's exact failure. **What would remove it:** a headless token route (upstream), or accepting a browser-driven step for this app alone, which DooPlex cannot run. Owner: **CC.** `audits/SPIKE-upgrade-test-2026-09-06.md` §6 **-- UPDATE NIGHT 2026-09-21:** bookstack's edge was walked again on 2026-09-21 and is again **half-proven**: the database half read back through `php artisan` with its own negative control, the file half untouched. The limitation is unchanged and is now measured on the box as well as on the harness. Two more apps joined the same class tonight for a different reason (R-624). | **READY — rank P3-LOW; owner: CC** |
|
||||
| **R-462** | **[P2-MEDIUM] Widen the upgrade harness beyond three apps — and the cost is dominated by FIXTURES, not by machine time.** The R-449 harness works and is proven by a red negative control (`audits/SPIKE-upgrade-test-2026-09-06.md` §1). **Costed with this run's REAL numbers rather than an estimate:** a successful edge takes **6.4 s – 305.1 s, median 71.8 s**; a FAILING edge takes **556 s**, roughly **8×**, because a negative is only honest if it waits out the full settle window; 3 apps / 11 images cost **5.07 GB**, so 53 apps naively extrapolate to **~90 GB** and, at the median, about an hour of harness time for one edge each. **THAT EXTRAPOLATION UNDERSTATES THE REAL COST BY AN ORDER OF MAGNITUDE, and that is the point of this row.** Two of the three apps needed a bespoke non-browser seed route; one needed two attempts and a discarded approach; one (bookstack) can only ever be half-proven (R-460). **Fixture time scales with apps and does not amortise.** **The decision this row is really asking for is scope, not schedule:** all 53, or only the apps a customer would lose data from, or only apps whose catalog transition is a MAJOR. **Recommended shape, NOT a design — the operator picks:** start with the apps that carry a database, because §3 measured that the abort question only ever bites there. Owner: **VIKTOR rules on scope, CC implements.** `audits/SPIKE-upgrade-test-2026-09-06.md` §5 **ROW CORRECTED 2026-09-21: the scope is NOT open and this row said it was.** It read *"VIKTOR rules on scope"*; the operator ruled on 2026-09-13 (`09` §3 decision 6) that the upgrade test goes to **ALL** apps through the nightly rotation, explicitly *not* "database apps first". What is open is the WORK, not the scope. An ORDER inside that ruling — the 15 database services first, because that is where a wrong answer costs data rather than uptime — is costed as a drill brief in `09` §6.4: legs A–E ≈ **21–34 CC-hours** plus ~25–30 GB on a scratch host, with legs C (a PostgreSQL `pg_upgrade` rehearsal) and E (one automatic night on a throwaway) the two that unblock a decision. **-- UPDATE NIGHT 2026-09-21:** **The count moved from 3 apps to 21 EDGES ACROSS 19 APPS.** The update night walked real within-a-major upstream edges on scratch guest 9202 through the product's own guarded Update, each app seeded and read back through its OWN front door with a negative control on every readback: **14 proven, 3 failed, 4 inconclusive**. Proven: actualbudget, audiobookshelf, bookstack, docmost, grafana, home-assistant, mealie, n8n, navidrome, papra, privatebin, romm, vikunja, and nextcloud's MariaDB engine major. **Ten of the fourteen printed a verbatim migration line**, so the database really was rewritten and the data still read back. Box-side fixtures for 20 apps now exist at `audits/update-night-2026-09-21/fixtures.py`, and four (actualbudget, navidrome, audiobookshelf, vikunja) are ported into `app-catalog-felhom.eu/scripts/upgrade_fixtures.py` with seven new EDGES (U1-U7) so the same edges can be run on the harness venue **with their ABORT step**, which the box deliberately does not offer. **OWED, stated so it is not mistaken for done:** the U1-U7 harness RUNS (the code is in, the runs are not), and fixtures for the four inconclusive apps, of which two (vaultwarden, zipline) cannot be seeded at all while the catalog rightly closes their sign-up (see R-624). **-- 2026-09-23, the RomM lesson is IN THE HARNESS:** `upgrade-test.py` v2 runs every edge that read back under light load for `--soak` seconds (default 600) and reads the kernel's `oom_kill` counter host-side; a kill or restart turns `proven` into `failed`, a peak over 80 % of the limit adds `memory_tight`. **Red-proof:** romm 5.0.0 → 5.3.0 on the template AS PROMOTED (512M, four workers) — seeded, migrated, read back, and then **OOM-killed at +76 s** under four light callers, verdict `failed` (Docker's own OOMKilled read true here; restarts stayed 0, which is why the walk never saw it). Ten minutes is ample for this failure; demo-hp's first kill came at two hours only because nothing was loading it. Evidence `audits/update-rulings-2026-09-23/harness/`. **— NIGHT 2026-09-23:** the bench and the box now share ONE fixture set — the box walk's fixtures run on the bench through `upgrade_boxport.py` (ported verbatim into the catalog), plus a new wishlist fixture and fixes for opengist 1.15, komga (`/api/v2/users/me`) and nextcloud (wait for `occ status`). 14 apps / 15 edges tried; 12 proven on both venues and published with their test records (`audits/DRILL-night-2026-09-23.md` Part C). | **READY — rank P2-MEDIUM; owner: CC (scope already ruled, `09` §3 decision 6)** |
|
||||
| **R-463** | **[P2-MEDIUM] The day the catalog moves `postgres:16` to `17`, ELEVEN apps are affected and the container image will NOT perform the conversion — and nothing anywhere records that.** MEASURED 2026-09-06: 11 of the 53 templates carry PostgreSQL — **8 on `postgres:16-alpine`**, 1 on `postgres:15-alpine`, plus `postgis/postgis:16-3.5-alpine` and Immich's own `postgres:16-vectorchord…` build. **A grep of the whole register for `pg_upgrade`, "postgres major" or "postgresql major" returns ZERO** (confirmed this session, and confirmed again before filing). **WHY IT IS NOT THE SAME PROBLEM AS R-459, and this is the point of the row: the two engines fail in OPPOSITE directions.** MariaDB starts anyway and skips the conversion quietly, which is why R-459 went unnoticed until a harness looked. **PostgreSQL REFUSES TO START on a datadir from an older major** — the official image performs no `pg_upgrade` and exits with a message naming both versions. So the Postgres case cannot hide; it will present as eight apps down at once, on the sync after the catalog moves. **DELIBERATELY NOT MEASURED HERE, and saying so is the scope discipline:** R-459's task was scoped to MariaDB, and measuring the Postgres analogue is its own piece of work with its own venue. **This row exists so the gap is a record rather than a sentence in an audit nobody greps.** What would settle it: one edge on the existing harness (`postgres:16-alpine` → `17-alpine`) on a scratch host, which would also exercise the `engine_state_after` field's Postgres probe end to end — it is written but has never run against a real Postgres major. Owner: **CC.** `audits/SPIKE-r459-mariadb-upgrade-2026-09-06.md` §7 **-- UPDATE NIGHT 2026-09-21:** **Measured 2026-09-21, both halves.** (a) What a household sees TODAY: the guarded Update of `postgres:16-alpine` to `17-alpine` on docmost ended **`failed` in 5.1 s**, the app stopped and held, **the pin naming 17 while `installed_images` still said 16 and nothing ran**, the data intact, and the restore the hold sentence names back in **29.1 s**. The engine's refusal line had to be REPRODUCED independently because `failAndHold` destroyed it (R-621): *FATAL: database files are incompatible with server / DETAIL: The data directory was initialized by PostgreSQL version 16, which is not compatible with this version 17.11.* The datadir was still `16` afterwards, and the same copy started under 16 holding 48 tables as the positive control. (b) The conversion **COSTED** on a real seeded 49 MB / 48-table datadir: `pg_dumpall` **2.6 s / 132 201 B**, fresh 17 plus replay **6.5 s / 48 tables restored**, the app up on 17 saying *Database connection successful*, **the seeded account read back**, total **155.9 s of which ~9 s is engine work**. `pg_upgrade` was NOT run: it needs both majors' binaries in one image and no such image exists here. Full paragraph: `audits/update-night-2026-09-21/24-Q5-postgres-conversion-costed.md`. **-- RULED 2026-09-23 (`09` §3 decision 16):** PostgreSQL majors are converted BY THE BOX as a guarded-update step — save everything from the old engine, start the new one empty, load it back, check. Each of the eleven apps is proven on the test bench before the catalog may move it; the engine-major gate stays until then. **-- 2026-09-25 (evening): docmost CONVERTED by the box** (16 → 18, controller v0.273.0; catalog `afd3a60` moved it with the conversion mark; proven on the bench and on 9202 incl. three undo cases). Measured: `postgres:18` refuses even an EMPTY volume at `/var/lib/postgresql/data` — an 18 step moves the mount. Open: the other ten, one proof each (calcom, adventurelog/postgis, claper, rallly, immich's own image, zipline, outline, paperless-ngx, tandoor, sparkyfitness on 15). | **NARROWED — ten apps left; owner: CC; the gate stays per app** |
|
||||
| **R-463** | **[P2-MEDIUM] The day the catalog moves `postgres:16` to `17`, ELEVEN apps are affected and the container image will NOT perform the conversion — and nothing anywhere records that.** MEASURED 2026-09-06: 11 of the 53 templates carry PostgreSQL — **8 on `postgres:16-alpine`**, 1 on `postgres:15-alpine`, plus `postgis/postgis:16-3.5-alpine` and Immich's own `postgres:16-vectorchord…` build. **A grep of the whole register for `pg_upgrade`, "postgres major" or "postgresql major" returns ZERO** (confirmed this session, and confirmed again before filing). **WHY IT IS NOT THE SAME PROBLEM AS R-459, and this is the point of the row: the two engines fail in OPPOSITE directions.** MariaDB starts anyway and skips the conversion quietly, which is why R-459 went unnoticed until a harness looked. **PostgreSQL REFUSES TO START on a datadir from an older major** — the official image performs no `pg_upgrade` and exits with a message naming both versions. So the Postgres case cannot hide; it will present as eight apps down at once, on the sync after the catalog moves. **DELIBERATELY NOT MEASURED HERE, and saying so is the scope discipline:** R-459's task was scoped to MariaDB, and measuring the Postgres analogue is its own piece of work with its own venue. **This row exists so the gap is a record rather than a sentence in an audit nobody greps.** What would settle it: one edge on the existing harness (`postgres:16-alpine` → `17-alpine`) on a scratch host, which would also exercise the `engine_state_after` field's Postgres probe end to end — it is written but has never run against a real Postgres major. Owner: **CC.** `audits/SPIKE-r459-mariadb-upgrade-2026-09-06.md` §7 **-- UPDATE NIGHT 2026-09-21:** **Measured 2026-09-21, both halves.** (a) What a household sees TODAY: the guarded Update of `postgres:16-alpine` to `17-alpine` on docmost ended **`failed` in 5.1 s**, the app stopped and held, **the pin naming 17 while `installed_images` still said 16 and nothing ran**, the data intact, and the restore the hold sentence names back in **29.1 s**. The engine's refusal line had to be REPRODUCED independently because `failAndHold` destroyed it (R-621): *FATAL: database files are incompatible with server / DETAIL: The data directory was initialized by PostgreSQL version 16, which is not compatible with this version 17.11.* The datadir was still `16` afterwards, and the same copy started under 16 holding 48 tables as the positive control. (b) The conversion **COSTED** on a real seeded 49 MB / 48-table datadir: `pg_dumpall` **2.6 s / 132 201 B**, fresh 17 plus replay **6.5 s / 48 tables restored**, the app up on 17 saying *Database connection successful*, **the seeded account read back**, total **155.9 s of which ~9 s is engine work**. `pg_upgrade` was NOT run: it needs both majors' binaries in one image and no such image exists here. Full paragraph: `audits/update-night-2026-09-21/24-Q5-postgres-conversion-costed.md`. **-- RULED 2026-09-23 (`09` §3 decision 16):** PostgreSQL majors are converted BY THE BOX as a guarded-update step — save everything from the old engine, start the new one empty, load it back, check. Each of the eleven apps is proven on the test bench before the catalog may move it; the engine-major gate stays until then. **-- 2026-09-25 (evening): docmost CONVERTED by the box** (16 → 18, controller v0.273.0; catalog `afd3a60` moved it with the conversion mark; proven on the bench and on 9202 incl. three undo cases). Measured: `postgres:18` refuses even an EMPTY volume at `/var/lib/postgresql/data` — an 18 step moves the mount. Open: the other ten, one proof each (calcom, adventurelog/postgis, claper, rallly, immich's own image, zipline, outline, paperless-ngx, tandoor, sparkyfitness on 15). **-- 2026-09-27: paperless-ngx (to 18) and tandoor (to 17) moved, each proven on the bench and on 9202 through the product's conversion (`09` §3 decision 42, `audits/version-travel-2026-09-26/B/`); with docmost that is 3 of the 11. Not moved: calcom, claper, outline, rallly, zipline (no seed route checked, or none: R-624), immich and the PostGIS family (out of scope).** | **NARROWED — ten apps left; owner: CC; the gate stays per app** |
|
||||
| **R-464** | **[P3-LOW] MariaDB's entrypoint prints `MariaDB upgrade not required` on an UNSUPPORTED DOWNGRADE, so that line cannot be used as a soundness signal.** MEASURED 2026-09-06. After converting a datadir to `12.3.3-MariaDB` and then starting **11.6** on it, the entrypoint logs, on every start: **`[Note] [Entrypoint]: MariaDB upgrade not required`**. Asked properly, the same engine answers **`FATAL ERROR: Version mismatch (12.3.3-MariaDB -> 11.6.2-MariaDB): Trying to downgrade from a higher to lower version is not supported!`** **The entrypoint compares the datadir's recorded version against its own and concludes there is nothing to DO. That is true, and it is not a statement that the state is sound.** **THIS IS THIS PROJECT'S MOST-REPEATED CLASS, in a new costume** — the same shape as `CLAUDE.md`'s "presence is not success" and as R-443's HTTP 200 over a crash-looping app: a reassuring sentence that answers a narrower question than the one a reader will take it for. **Why it is worth a row rather than a footnote: the obvious cheap instrument for R-459 is to grep container logs for that exact line**, and such an instrument would report "fine" for an unsupported downgrade. **The correct probe is `mariadb-upgrade --check-if-upgrade-is-needed`**, which is what `upgrade-test.py`'s `engine_state_after` now uses. **Also recorded, because it nearly produced a wrong answer here: run without credentials that command returns `ERROR 1045 … FATAL ERROR: Upgrade failed` with exit 1** — an authentication failure wearing the shape of a verdict. Owner: **CC.** `audits/SPIKE-r459-mariadb-upgrade-2026-09-06.md` §5.4 | **READY — rank P3-LOW; owner: CC** |
|
||||
| **R-468** | **[P3-LOW] THE GOLDEN WAIVER — goldens on a cadence, not per release (operator ruling 2026-09-13).** 25 goldens in 26 days in August, almost one per release, because `golden_currency_gate.py` trips on every release by design and the only honest ways past it were a bake or a declared `--no-verify` (thirteen by 2026-09-01, R-404/R-417). **The ruling: bake WEEKLY, and always before any drill or fresh install.** Every release still raises the FLOOR, so both demo boxes keep getting each release in ~20 s; only the golden — which protects a fresh install and nothing else — moves to a cadence. **The mechanism (built 2026-09-13):** `documentation/tests/golden-waiver. **⚠ CORRECTED THE SAME DAY (R-472): between bakes the floor does NOT carry a release — the hub holds any floor above the vouched golden (publish-train rule 1), so releases between bakes reach the demo boxes only by hand-deploy.**yml`, four lines (`issued`, `expires`, `reason`, `register_row: R-468`), read by the gate. While valid, a golden BEHIND the record makes the gate print a loud ADVISORY and exit 0; when it expires the gate is red again until someone bakes or renews. **The 14-day cap is enforced by the gate, not the runbook** — a longer, undated, unparseable, reason-less or row-less waiver is INCONCLUSIVE (exit 2), never 0 and never silently ignored. **It never covers a golden that is UNRECORDED (R-385)** — that is not a cadence choice. **A dated waiver cannot be forgotten; it just expires** — the difference from R-242's original rule, which recurred the day after it was written. Tests: `scripts/test_golden_currency_gate.py` cases 5–15 (E/F/G/H, a 15-day, absent, unparseable, bad-row and empty-reason waiver each 2; the R-421 decoy — a file saying only `expires` — 2). **This is a PRE-CUSTOMER arrangement: the first external install retires it** (delete the file in that commit). Cadence written into `RUNBOOK-manual-build.md` §4.2 and the `felhom.eu` end-of-session checklist. **Does NOT touch R-242's open half (nothing gates the VOUCH).** | **WATCHING — rank P3-LOW; owner: CC (renew ≤ 14 days or bake); retire at the first external install** |
|
||||
| **R-469** | **[P3-LOW] REMOVE THE ENGINE-MAJOR RULE when Slice 4 (R-448) ships — a tracked act, not a lapse.** Since 2026-09-13 `app-catalog-felhom.eu` `CLAUDE.md` rules that *until the Update button takes a verified backup as its precondition, no template may move a database-engine image across a major version* (four MariaDB, eleven PostgreSQL services), and `scripts/check-engine-major.py` (fourth row of `catalog_gates.py`, run by `.githooks/pre-push` with the push range) refuses one, naming the rule and this expiry. **Why the rule:** every `mariadb:` sidecar now carries `MARIADB_AUTO_UPGRADE=1` (R-459), so a MariaDB major move CONVERTS the customer's datadir on the next Update; PostgreSQL converts nothing and refuses to start (R-463). Either way a customer-data event with no backup in front of it. **Honest limit, not re-filed:** the gate needs a parent commit and CI fetches at `--depth 1` — the R-452 gap — so on a shallow clone the runner skips it out loud and only the hook bites. **When R-448 ships:** delete the CLAUDE.md rule, the gate's row and the gate, in one commit that cites this row; then close this. **2026-09-13 — UNBLOCKED, NOT LIFTED.** R-448 shipped in controller v0.237.0/v0.238.0 (slice 4): an update now refuses without a restorable, proven Tier-2 copy, backs up first when it is stale, takes a safety dump, and holds an app that does not come up — the precondition this rule was waiting for. **The rule stays in force until someone deliberately removes it**, which is a separate act (and is worth weighing against R-475: an app with no Tier-2 copy cannot be updated at all, so the guard does not yet cover every app a major engine move would touch). **HALF-LIFTED 2026-09-21, catalog `5ff36d098cbc`.** Slice 4 shipped 2026-09-13, so the rule's own expiry condition is met — **for MariaDB**: the four `mariadb:` sidecars have both halves they need, a verified backup in front of the Update (any tier since v0.239.0) and `MARIADB_AUTO_UPGRADE=1` whose conversion the harness WATCHED run on E3/E3b with the seeded data read back after. **PostgreSQL and MySQL stay refused** — postgres performs no `pg_upgrade` and REFUSES to start on an older major's datadir across eleven templates (R-463); a backup is a route BACK, not a conversion. The refusal text now cites R-463 instead of the shipped R-448. **R-450's second half is enforced in its place:** a MariaDB major must be the ONLY image move in its template in that commit (the bookstack `0b73e5e` shape — two migrations behind one edge). The gate now PRINTS what it allowed, by name — a lifted rule that goes quiet is a lifted rule nobody can audit. Two new decoy cases; two red-proofs, each seen to fail; 40 cases green. **What remains of this row:** the PostgreSQL half, which is R-463's to clear — see `09` §3b **Q5**. **-- NARROWED 2026-09-25 (evening), catalog `6a4a5f0`, `09` §3 decision 35:** the PostgreSQL half now passes ONE app at a time — only a template whose ladder entry for the step is proven on BOTH venues and carries `engine_conversion` (the box converts it, controller v0.273.0), as the only image move in its commit. Every other PostgreSQL app stays refused; the postgis family is judged now (it was not). CLAUDE.md rule text updated the same commit. Decoys + red-proof: `audits/night-2026-09-26/C/`. | **PARTLY CLOSED 2026-09-21 — MariaDB lifted; the PostgreSQL half stands until R-463** |
|
||||
@@ -802,19 +802,14 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server`
|
||||
| **R-645** | **[P3-LOW] Lifting an update hold by the operator CLI lets the recovery unit be re-captured with the FAILED new definition within seconds — the copy the hold sentence names is overwritten.** MEASURED 2026-09-23 on 9202 during the undo bake-off: docmost was held at 07:59:16Z after a failed 0.95.0 → 0.96.0 update; `--clear-restore-hold docmost` + the controller restart it requires ran at ~07:59:23Z, and at **07:59:26Z** the controller logged *Recovery unit captured for docmost* — the unit's `compose/docker-compose.yml` now named `docmost/docmost:0.96.0`, the version that had just failed. The hold sentence had pointed the household at that unit („saját meghajtó, … 09:55"). The hold is what keeps the nightly legs off a held app (`isHeld`, v0.238.1); once it is lifted by hand, the checksum-gated refresh sees a changed definition and captures it. **Who it hits:** an operator who lifts a hold to inspect or repair, before restoring. With the undo (R-637) a failed update no longer holds unless the undo also fails, so the path is rarer — it does not go away. Candidate shapes, none chosen: the CLI refuses to lift an UPDATE hold (only a restore lifts it); or the lift also puts the pin back; or the capture skips an app whose pin is not what it is running. Evidence: `audits/undo-bakeoff-2026-09-23/docmost-40-undoF.txt` (the invalid run) and README §"Three things". **-- 2026-09-23 (controller v0.263.0):** the undo never reads the unit, so this no longer affects the automatic undo; it still affects an operator who lifts a hold by hand before restoring. | **OPEN — P3; owner: CC** |
|
||||
| **R-652** | **[P3-LOW] The memory watch counted the kernel's file cache as the app's memory.** MEASURED 2026-09-23 night on the bench: nextcloud 34.0.4 read **100 %** of its 1 GiB and immich's PostgreSQL **100 %**, each with **0** kernel `oom_kill`s — `memory.peak` includes page cache, which the kernel drops before it kills anything. Under the watch as built (R-635 follow-up) both would be marked `memory_tight`, and the gate would demand a raised `mem_limit` — a customer-box capacity figure — for cache. **Done the same night (09 §3 decision 22, CC — operator may reverse):** the watch samples the app's own memory (`anon` of `memory.stat`) every 15 s; the mark and the ladder's `memory_peak_pct` read it where measured; the cgroup peak stays beside it (`memory_cgroup_peak_pct`). **Open:** romm's backfilled entry carries M1's 80.9 % cgroup peak (measured before the anon sample existed) — re-measure it on its next step; and decide whether an app whose anon is low but whose cgroup stays pinned at its limit (cache thrash) should be marked at all. Evidence: `audits/night-2026-09-23/apps/nextcloud/bench-1024M/`, `apps/immich/bench-noanon/`. | **READY — P3; owner: CC (catalog harness)** |
|
||||
| **R-654** | **[P3-LOW] opengist 1.15 moved every page under `/-/` — a household's `/login` bookmark answers 404 after the update.** MEASURED 2026-09-23 night: 1.13 serves `/login`, `/register`, `/all`; 1.15.2 answers **404** on all three and serves `/-/login`, `/-/register`, `/-/all`; `/` redirects to `/-/all`. The app, its data and its probe (`/healthcheck`) are fine, and a household arriving at the root lands correctly — only a deep link breaks. 1.15 also marks its session cookie `Secure`. **Needs:** a line in opengist's `app_info` if the operator wants households told; nothing in the product. Evidence: `apps/opengist-oldfixture/`, `apps/opengist/`. | **READY — P3; owner: operator (copy decision) / CC (writes it)** |
|
||||
| **R-655** | **[P2-MEDIUM] adventurelog v0.13.0 cannot become healthy in the catalog's template — its update is undone on every box.** MEASURED 2026-09-23 night, both venues. v0.13.0's FRONTEND image adds its own `HEALTHCHECK` (`node -e fetch('http://127.0.0.1:3000/health')`), and `/health` answers **503 `{"ok":false,"backend":"unreachable"}`** unless the backend's `/health/` answers OK to the frontend's own request (read from the image's `django-proxy` chunk: `fetch(${getServerEndpoint()}/health/)`). On the bench the backend served `/api/` 200, the seed read back, the migration ran (6 lines) — and the frontend stayed `unhealthy` for 420 s; on 9202 the guarded Update went `verifying` → **`undoing` → `undone`** (under the drill's 90 s timeout). **MEASURED LATER THE SAME NIGHT — two causes, and the first hypothesis was wrong.** (1) The backend's `/health/` answers `200 {"ok": true}` to the frontend (read on a fresh v0.13.0 install); the unhealthy frontend is **our template's own healthcheck override**, `["CMD", "/nodejs/bin/node", …]` — v0.12.1's distroless image keeps node there, v0.13.0 moved it to `/usr/bin/node`, and Docker's health log reads `exec: "/nodejs/bin/node": no such file or directory` 19 times in a row. (2) With the override removed, a second bench run hit a harder wall: v0.13.0's backend runs `download-countries` at EVERY start, fetching world data from the internet, and a cut-short download (`ijson.common.IncompleteJSONError: Incomplete JSON content`) crash-loops the entrypoint — the backend never became healthy in 15 min. The first bench run's download had succeeded. **So v0.13.0's boot depends on an outside download, and whether an update succeeds depends on it too.** **The catalog did NOT move adventurelog.** **Needs:** the override dropped (or pointed at `/usr/bin/node`) in the SAME commit as the image move; and a measured answer on whether `download-countries` can be skipped or pre-seeded (an env switch, or the data in the volume) before the edge is re-proven on both venues. Evidence: `audits/night-2026-09-23/apps/adventurelog/`. **-- MEASURED 2026-09-25 (read from both images on the bench, `audits/night-2026-09-26/F/F3-01-entrypoint.txt`):** v0.13.0's entrypoint has an env switch, `SKIP_WORLD_DATA=1`, that skips `download-countries` (v0.12.1 has none). Both versions use the SAME dataset file, `countries+regions+states-v3.1.json`, kept in the `adventurelog_media` volume, and download only when it is absent — so an UPDATE re-uses the file v0.12.1 left. **The likely crash chain:** v0.12.1 exits only on 137 and ignores any other download failure, so a cut-off file it saved stays; v0.13.0 parses it with `ijson` and fails at every start. **Options for the move (not taken tonight):** (a) `SKIP_WORLD_DATA=1` in the template — no internet dependence at update, but a FRESH install gets no world data; (b) keep the download and have the harness prove the update with the file present (the pre-seed is the volume itself) plus a check that a truncated file is replaced (`--force` is the command's own repair). The healthcheck override fix (`/usr/bin/node`) still rides the image move. | **READY — P2; owner: CC (catalog)** |
|
||||
| **R-675** | **[P3-LOW] The unit-only restore's refusal for a file app still points to „Fájlok visszaállítása" instead of the second drive's whole restore.** `missingFileLegsRefusal` predates decision 26 (v0.269.0); when a whole copy exists on the second drive the sentence should name it. | **READY — P3; owner: CC (controller)** |
|
||||
| **R-676** | **[P3-LOW] Watch: immich's first start restarted 12 times — decision 28's crash-loop stop (6 in 10 min) would stop it.** From the 2026-09-17 chaos night (DB connection dropped during the first-start geocoding import on a 6 GB guest; it did not recover that night). No healthy app in any drill evidence restarts on a first start (1831 samples, 40 live containers), so the threshold stands; this row exists so the first immich install under v0.269.x is watched. `audits/night-2026-09-24/A3/40-first-start-restarts.txt` **2026-09-25 night (read from source, v0.271.0): a DEPLOY's first start is NOT covered by decision 28's suppression** — `Deploying` clears when `compose up -d` returns (`deploy.go` "Clear deploying flag"), and `ObserveUnhealthy` then samples the app; an automatic update's step, verify and undo ARE covered (`Updating`, pinned by `TestD28_NoCrashLoopStopDuringAnAutomaticStep`). So a first start that restarts ≥ 6 times in 10 min is stopped — which R-676 already accepts for a broken first start; a healthy slow first start would be stopped too. | **OPEN — P3; owner: CC (watch)** |
|
||||
| **R-682** | **[P3-LOW] A Remove interrupted by a controller kill leaves the app half-removed: containers gone, the app still listed as installed (and held).** MEASURED 2026-09-24 on 9202 (chaos round 9): the kill 2 s after the Remove press answered the household `502 Bad Gateway`; after the restart `chaoscrash` read deployed, stopped, `unhealthy_stop`, with NO container left. Pressing Remove again completed it cleanly (200, only the catalog template left). Recoverable by the household's own second press; nothing tells them to press it. **Fix direction:** the remove journals its intent and finishes (or says it was interrupted) at boot, as the update does. `audits/night-2026-09-24/E/round-09*.json`, `E/round-09b-remove-again.txt` | **READY — P3; owner: CC (controller)** |
|
||||
| **R-683** | **[P3-LOW] Watch: after a power cut during an update's health check, the hold named an HOUR-OLD second-drive copy, not the one the update's own backup should have just made.** 2026-09-24 chaos round 3 (nextcloud, `backup_max_age: 1m`): no `backing-up` phase was seen and the hold named Tier 2 at 13:04 for an update pressed at 14:04; the pre-cut controller log was lost with the container (the runner now saves it at arm time — R-320). Round 11, the same action without a power cut, named a fresh 14:34 copy and logged the Tier-2 copy. The sentence was TRUE (it named the copy it offered); the question is why the update did not back up first. Not reproduced; watch the next power-cut drill. `audits/night-2026-09-24/E/round-03*.json`, `E/round-11-controller-pre.log` | **OPEN — P3; owner: CC (watch)** |
|
||||
| **R-687** | **[P3-LOW] Part 7's live proof has four gaps a scratch box cannot close, and one observability gap.** (1) **W+5h reached with steps left** is proven by unit test only (`TestLeg_NoStepAtOrAfterW5h`) — the leg starts at W+105m and would need a 3-hour leg live; (2) **the off-site leg FAILING** before the update leg: 9202 has no off-site tier, so only the "no target" path ran live — failure and panic are `TestChainUpdateLeg_EveryPath`; (3) **a `files_may_change` step WITHOUT a whole copy**: both drill apps given the mark (wishlist, navidrome, romm) turned out whole on 9202 by the backup side's truth table (why, per app, is not logged — see the observability gap), so only "with a copy" ran live; (4) **the full-system gate waiting** cannot run on 9202 (no agent), and **did not occur on the demo boxes' real night either** (2026-09-25: both legs ended by 04:19, before the gate opened at 04:30, and no whole-box backup was due on either box) — unit + red-proof only (`TestD20_GateWaitsForTheLeg`). **Also cosmetic:** a leg with no steps reports `"steps": null` to the hub, not `[]`. **Observability:** when the leg TAKES a `files_may_change` step it does not log which whole copy allowed it (only the skip says why). `audits/night-2026-09-25/C/` **-- NARROWED 2026-09-25 (controller v0.273.0):** the cosmetic `"steps": null` → `[]` and the taken `files_may_change` step's missing log line are FIXED (red-proofed, `audits/night-2026-09-26/F/`). Items (1)–(4) stay; (4) did not occur on 2026-09-25 either (demo-felhom's whole-box backup ran at 07:29, three hours after its leg; demo-hp had none due). | **OPEN — P3, gaps (1)–(4) only; owner: CC** |
|
||||
| **R-688** | **[P3-LOW] The customer delete says it removes the tunnel and zone, but no leg of it calls Cloudflare.** The dialog's acknowledgement reads "the customer will be RESET — offsite repo DESTROYED, PBS revoked, tunnel/zone removed" (`hub/internal/web/customer_delete.go` `deleteCascadeAcks`), while `commitCustomerReset` has legs for Hetzner, PBS, claim, descriptor and DB only. Seen 2026-09-25 retiring `peti-felhom`, whose config carried a Cloudflare tunnel token and API token (`sajatfelhom.hu`): the tokens went with the record; any tunnel or DNS record on Cloudflare's side was neither listed nor removed. **Fix direction:** either a Cloudflare leg (tunnel + DNS by the customer's ids), or the dialog stops promising it and lists what to remove by hand. `audits/RETIRE-peti-2026-09-25.md` **-- HALF DONE 2026-09-25 (hub v0.125.0):** the dialog no longer promises a Cloudflare removal; the preview lists what the operator removes by hand, by domain (the tunnel, the DNS records), never the token — proven live on the hub (`audits/night-2026-09-26/F/`). The Cloudflare leg itself is NOT built. | **NARROWED — the Cloudflare leg only; owner: operator (decide if it is wanted) / CC (build)** |
|
||||
| **R-689** | **[P3-LOW] demo-hp's scheduled restore test picks the golden template in `local:backup/` as a backup and fails every 6 h.** Read 2026-09-25 (agent 0.134.0): `restore-test tier is DUE … archive=local:backup/felhom-golden-0.236.0.tar.zst … newest settled archive (landed 2026-09-13T20:17:01Z)` then `scheduled restore-test FAILED … extractconfig … HTTP 403: permission denied at /vms/ (missing privilege VM.Backup)` — 2026-09-24 10:36, 2026-09-25 04:57 and 10:57. The golden is not a backup of any guest; the real archive (`vzdump-lxc-9201-2026_09_24-21_59_25`) was younger than the 24 h settle. So the restore test proves nothing on demo-hp and logs an ERROR each cycle. **Fix direction:** the restore test selects only `vzdump-*` archives of a known guest (or the golden moves out of `local:backup/`). Agent-side; not built (the agent is untouched this session). `audits/night-2026-09-26/part0/P0-demo-hp-restoretest-golden.txt` | **READY — P3; owner: CC (agent)** |
|
||||
| **R-691** | **[P3-LOW] Kept data (09 §3 decision 36): two gaps of the first build.** (1) **The read-only file-browser view cannot open a folder another user owns with mode 0770** — nextcloud's `appdata/nextcloud` is `www-data` `drwxrwx---` (measured on 9202 2026-09-25), FileBrowser runs as uid 1000, so „Megőrzött adatok" shows the folder and not its files; the files are still listed, sized, loadable and deletable. Fix direction needs a decision (a read-only ACL, or a helper that lists as root) — not a chmod of the household's data. (2) **„Use my kept data" / Load looks only at the own unit (Tier 1) and the second-drive mirror (Tier 2)**; an app whose only database copy is off-site gets "no backup". Controller `43e99d1`. `audits/night-2026-09-26/E/` **-- 2026-09-25 live proof:** (1) confirmed on 9202 — the view mounts nextcloud's kept folders `:ro` but its files are `www-data` 0770. Also seen: the source's name „Megőrzött adatok" is Hungarian on an English box (the file browser's config holds one name). | **OPEN — P3; owner: CC (needs a small decision for (1))** |
|
||||
| **R-691** | **[P3-LOW] Kept data (09 §3 decision 36): two gaps of the first build.** (1) **The read-only file-browser view cannot open a folder another user owns with mode 0770** — nextcloud's `appdata/nextcloud` is `www-data` `drwxrwx---` (measured on 9202 2026-09-25), FileBrowser runs as uid 1000, so „Megőrzött adatok" shows the folder and not its files; the files are still listed, sized, loadable and deletable. Fix direction needs a decision (a read-only ACL, or a helper that lists as root) — not a chmod of the household's data. (2) **„Use my kept data" / Load looks only at the own unit (Tier 1) and the second-drive mirror (Tier 2)**; an app whose only database copy is off-site gets "no backup". Controller `43e99d1`. `audits/night-2026-09-26/E/` **-- 2026-09-25 live proof:** (1) confirmed on 9202 — the view mounts nextcloud's kept folders `:ro` but its files are `www-data` 0770. Also seen: the source's name „Megőrzött adatok" is Hungarian on an English box (the file browser's config holds one name). **-- 2026-09-27 (controller v0.275.0): (1) FIXED: the view joins the kept folder's OWNING GROUP when it is group-readable (never root's, never its own), binds stay `:ro`, nothing on disk changes (CC-unattended decision, `07` §6.5); the source's name follows a language switch (the switch re-syncs the file browser). Red-proofed, `audits/version-travel-2026-09-26/D3/`. NOT live-proven with a real nextcloud kept folder. STILL OPEN: (2), the Use/Load choice does not look at the off-site copy.** | **OPEN — P3; owner: CC — NARROWED to (2)** |
|
||||
| **R-693** | **[P3-LOW] The memory watch marks a Node app `memory_tight` at any limit — its heap sizes itself from the limit.** Measured 2026-09-25 on the bench (docmost 0.96.0, harness v4): the app's own memory (`anon`) peaked at **349 MB of 384 MB (90.9 %)**, then, with the limit raised to 512 MB, at **431 MB of 512 MB (80.4 %)** — 0 OOM kills and 0 restarts in both 10-minute watches (~12 000 requests each). So the mark (decision 22's "does not fit the memory") fires for an app that fits, and the gate's remedy (raise the limit) cannot clear it. docmost moved with the limit raised to 512 MB (decision 39). **Needs:** a basis that tells growth-to-fill from pressure (e.g. kills/restarts plus a GC-pressure signal, or a second watch at a higher limit showing the peak scales), or a per-app `memory_scales_with_limit` fact. `audits/night-2026-09-26/C/bench-run1/`, `…/bench-run2/` | **OPEN — P3; owner: CC** |
|
||||
| **R-694** | **[P3-LOW] Loading kept data (and every unit restore) regenerates a withheld login secret — does the household's shown password still work?** Seen 2026-09-25 on 9202 (E5, nextcloud): `generated replacement for [NEXTCLOUD_ADMIN_PASSWORD] — the credential was reset (old value unrecoverable)`. The unit deliberately carries no internet-reachable admin login (D5). For nextcloud the real admin password lives in the loaded DATABASE, so the new env value is likely inert — but if the app page shows the regenerated value as "your password", it is a false one. **Not measured:** what the page shows after a load, per app. `audits/night-2026-09-26/E/E5-5-use.txt` | **OPEN — P3; owner: CC (measure first)** |
|
||||
| **R-695** | **[P3-LOW] Two kept-data Deletes in the same second can leave a self-perpetuating empty kept folder.** Seen 2026-09-25 on 9202 (v0.274.0, teardown): two Deletes at 13:35:16 each started `SyncFileBrowserMounts` in a goroutine; one restarted the file browser with the OLD bind list, Docker recreated the deleted folder `kept/nextcloud/2026-09-25_141014` EMPTY (root, 13:35:17), and the next sync LISTED that empty folder as a kept item and kept binding it — so the bind recreated the folder and the folder kept the bind. Broken by removing the folder and one controller restart. Harm: an empty 0-byte row and a stale empty source in the view; no data. **Fix direction:** single-flight the file-browser sync (the second waits and re-reads), and never list or bind an EMPTY dated kept folder. `audits/night-2026-09-26/G/T1-teardown-9202.txt` | **OPEN — P3; owner: CC** |
|
||||
| **R-696** | **[P2-MEDIUM] Tier 1's "proven at" is the unit MANIFEST's refresh time, not its data's — so the kept pre-conversion copy was released on a backup taken BEFORE the conversion.** Seen 2026-09-26 on demo-hp (v0.274.0, the automatic leg): docmost converted 16 → 18 at 02:18:52Z; at 02:20:16Z the recovery unit was re-captured (its pins changed) — `manifest.json` `created_at` 02:20:16Z — while its `db-dumps/docmost-postgres.sql` is from **02:15:01Z, on PostgreSQL 16**. `UpdateRestorePoints` reads Tier 1's time from `ListRestorePoints` (the unit's time), so at 02:30:16Z `ReleaseConversionCopies` logged "a backup proven on 18: Tier 1 at 02:20:16Z" and removed the 16 datadir copy. **Harm tonight: low** — the 02:15 logical dump holds the rows the conversion's check proved equal, and the next night's dump is on 18. **The class is wider:** the update's own precondition reads the same time, and a unit is re-captured on every controller release or pin change (`CaptureRecoveryUnit`), so a stale dump can read as minutes old (9202 2026-09-25 11:06: "Tier 1 copy 2m0s old" from the 11:04 restart, dumps older). On 9202 the release was right by luck (dump 11:57 > conversion 11:13). **Fix direction:** Tier 1's time = the newest DATA in the unit (its db/volume dumps' own times), never the manifest's; the release additionally requires a dump of the converted service written after the conversion. Presence-is-not-success, `CLAUDE.md`. `audits/night-2026-09-26/G/G4-demo-hp-docmost-after.txt` **-- A1 SPIKE 2026-09-26 (9202, controller 0.274.0, `audits/version-travel-2026-09-26/A1/README.md`) — the class is WIDER than the time: the refresh re-captures the unit's DEFINITION too, so the unit pairs new pins with old data.** Measured both shapes: an app step (docmost 0.95.0 → 0.96.0) — the refresh 2 min after the update wrote 0.96.0 into `compose/` over 0.95.0's dump; a restore in that window came back whole only because docmost migrated the old data forward at its first start (four migrations, no guard, no undo). An engine step (PostgreSQL 16 → 18) — the refresh wrote the 18 definition over the 16 dump and 16 datadir tar; a restore in that window poured the 16 datadir back, `postgres:18` REFUSED it, the replay timed out and **the app was left DOWN**. The second-drive mirror, written before the update, brought it back whole at 16. From source: the OFF-SITE restore never writes the definition at all (it uses the live compose), so after any update it mixes versions until the next night's off-site run. Being fixed as Part A of the version-travel brief (controller v0.275.0). | **OPEN — P2; owner: CC** |
|
||||
| **R-697** | **[P3-LOW] A restore drops the `conversion_copy` record but not the kept pre-conversion volume — the copy is then never released.** Seen 2026-09-26 on 9202 (A1, controller 0.274.0): after docmost's 16 → 18 conversion `app.yaml` held `conversion_copy` (`docmost_docmost_postgres_data.pre-update-20260926T073003Z`); a restore from the own unit, then one from the second drive, both left `conversion_copy=None` while the volume stayed. `PersistUnitRedeployConfig` builds a fresh `AppConfig` (Deployed, DeployedAt, Env, LockedFields), so every record kept beside the env is dropped by a restore — the hourly release reads the record, so the volume is orphaned. **Harm: disk only** (the size of the old datadir), never data. **Fix direction:** carry `conversion_copy` across the restore's app.yaml rewrite (the release then removes it when a backup on the new major is proven), and say in the log when a restore supersedes one. `audits/version-travel-2026-09-26/A1/S4-restore-window-step2.txt`, `S5-restore-tier2-window.txt` | **OPEN — P3; owner: CC** |
|
||||
| **R-698** | **[P3-LOW] A backup stores the image's NAME, not the image — a restore of a version its maker has deleted cannot start.** `RecoveryManifest.image_pins` ("image NOT stored — re-pulled on restore"); since controller v0.275.0 each data file also records its running `ref@digest`, and a restore brings the data back AT ITS OWN VERSION (`07` §6.6) — so a restore asks for exactly the old image. **Measured 2026-09-26** (`audits/version-travel-2026-09-26/A7/`, registry HEADs, no pulls): the catalog's 42 ladder `ref@digest` pairs all resolve (200); an invented digest answers 404 on Docker Hub and ghcr.io (negative control). Not measured: the digests recorded on boxes (older than any ladder entry), how often makers delete versions, the catalog's 66 digest-less compose lines. **Options (decide nothing yet):** (a) keep — a restore of a deleted version fails at the pull and the household uses the next copy or a newer version; (b) mirror every INSTALLED image into the DooPlex registry, restore falls back to it — storage + bandwidth on DooPlex, a new part on the recovery path; (c) mirror only ladder-named versions — bounded, misses pre-ladder boxes; (d) `docker save` into the unit — hundreds of MB per app per copy on every tier. | **OPEN — P3; owner: operator (a decision), CC measures** |
|
||||
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
# gate ADVISORY instead of red. It never covers a golden that is UNRECORDED (R-385). At most 14 days
|
||||
# after `issued`, or the gate refuses it. Renew with a new dated commit; delete it at the first
|
||||
# external install. Issued AFTER the 0.236.0 bake landed — not over a bake that could have been done.
|
||||
issued: 2026-09-13
|
||||
expires: 2026-09-27
|
||||
# Renewed 2026-09-27 by CC for 7 days only: the version-travel brief said "no golden" this session, and the
|
||||
# weekly bake (last: 0.258.0, 2026-09-20) is DUE — STATUS asks the operator for it. Not a bypass: dated, capped.
|
||||
issued: 2026-09-27
|
||||
expires: 2026-10-04
|
||||
reason: pre-customer development; goldens on a weekly cadence (operator ruling 2026-09-13)
|
||||
register_row: R-468
|
||||
|
||||
Reference in New Issue
Block a user