Newer
Older
openstack-caracal-dc-dc / docs / audit / stage4-mirror-gate-20260727.txt
=== Stage 4 mirror gate -- measured state 2026-07-27 (read-only) ===
repo HEAD: 4b192a19ee8142313d0f3788399075fd067a01c3  branch: dc-dc-stage4-phase3-maas-deploy

WHY THIS CAPTURE EXISTS. The Stage 4 DoD (runbooks/dc-dc-phase3-maas-enlist-deploy.md:472-485)
requires 'per-DC mirror reachable from nodes'. GA-R6 requires a stage to close on a NAMED
executable check whose output the closing commit cites. That check -- dc-mirror.sh check --
was FALSE-GREENING on the single most important line: it tested that last-sync.status EXISTS
and printed the contents behind an unconditional 'OK'. Both racks read PASS while neither
had a good sync. Fixed this session (harness 19 -> 24); below is the state the FIXED check
reports. The mirror gate is therefore NOT MET as of this capture -- honestly, for the first
time.

--- 1. dc0 (full mirror, D-135 item 1) : dc-mirror.sh check ---
  OK   /usr/local/sbin/dc0-mirror-net-apply matches
  OK   /etc/systemd/system/dc0-mirror-net.service matches
  OK   /etc/systemd/resolved.conf.d/dc0-mirror.conf matches
  OK   /usr/local/sbin/dc0-mirror-sync matches
  OK   /etc/systemd/system/dc0-mirror-sync.service matches
  OK   /etc/systemd/system/dc0-mirror-sync.timer matches
  OK   /etc/nginx/sites-available/dc0-mirror matches
  OK   /etc/nginx/sites-enabled/dc0-mirror enabled
  OK   dc0-mirror-net.service enabled
  OK   dc0-mirror-sync.timer enabled
  OK   10.12.8.4/22 on virbr2 (vr1-dc0-metal-admin)
  OK   default route via edge 10.12.4.1
  OK   nginx active
  OK   mirror answers http://10.12.8.4/ (200)
  MISS last-sync FAILED: FAIL 2026-07-27T00:54:54Z ubuntu=255 uca=0 -- the mirror content is NOT attested current; investigate before any gate cites this check
dc-mirror check (dc0): FAIL

--- 2. dc0 root cause: transient upstream fetch failure, content intact ---
FAIL 2026-07-27T00:54:54Z ubuntu=255 uca=0
949G	/var/lib/dc-mirror/ubuntu
342M	/var/lib/dc-mirror/cloud-archive
jammy
jammy-security
jammy-updates
Result=exit-code
ExecMainStatus=1
ActiveState=failed
NextElapseUSecRealtime=Tue 2026-07-28 00:14:48 UTC
LastTriggerUSec=Mon 2026-07-27 00:49:42 UTC
Jul 27 00:54:49 vvr1-dc0 dc0-mirror-sync[1560492]: Download of dists/jammy/Release failed: 500 read timeout
Jul 27 00:54:50 vvr1-dc0 dc0-mirror-sync[1560492]: Errors:
Jul 27 00:54:50 vvr1-dc0 dc0-mirror-sync[1560492]:  Download of dists/jammy/Release failed: 500 read timeout
Jul 27 00:54:50 vvr1-dc0 dc0-mirror-sync[1560492]: Failed to download some Release, Release.gpg or InRelease files!
Jul 27 00:54:54 vvr1-dc0 systemd[1]: dc0-mirror-sync.service: Failed with result 'exit-code'.
Jul 27 00:54:54 vvr1-dc0 systemd[1]: Failed to start dc0-mirror-sync.service - dc0 mirror upstream sync (dc-mirror.sh; D-135 item 1: apt+UCA).

--- 3. dc1 (apt caching proxy is the RULED artifact path, D-135 amendment) ---
  OK   apt-cacher-ng installed
  OK   /etc/apt-cacher-ng/acng.conf.d/dc1-cache-proxy.conf matches
  OK   apt-cacher-ng active
  OK   listening on :3142
  OK   10.12.68.4/22 on virbr6 (vr1-dc1-metal-admin)
  OK   default route via edge 10.12.64.1
  OK   proxy serves http://archive.ubuntu.com/ubuntu/dists/jammy/Release (200)
  OK   proxy serves http://ubuntu-cloud.archive.canonical.com/ubuntu/dists/jammy-updates/caracal/Release (200)
dc-cache-proxy check (dc1): PASS

--- 4. dc1 dormant debmirror: the fallback, and how fragile its dormancy is ---
  OK   /usr/local/sbin/dc1-mirror-net-apply matches
  OK   /etc/systemd/system/dc1-mirror-net.service matches
  OK   /etc/systemd/resolved.conf.d/dc1-mirror.conf matches
  OK   /usr/local/sbin/dc1-mirror-sync matches
  OK   /etc/systemd/system/dc1-mirror-sync.service matches
  OK   /etc/systemd/system/dc1-mirror-sync.timer matches
  OK   /etc/nginx/sites-available/dc1-mirror matches
  OK   /etc/nginx/sites-enabled/dc1-mirror enabled
  OK   dc1-mirror-net.service enabled
  OK   dc1-mirror-sync.timer enabled
  OK   10.12.68.4/22 on virbr6 (vr1-dc1-metal-admin)
  OK   default route via edge 10.12.64.1
  OK   nginx active
  OK   mirror answers http://10.12.68.4/ (200)
  MISS last-sync UNKNOWN: status says RUNNING (RUNNING 2026-07-23T21:49:35Z) but dc1-mirror-sync.service is NOT active -- the sync died without writing a terminal state (stale marker, not a success)
dc-mirror check (dc1): FAIL
RUNNING 2026-07-23T21:49:35Z
330G	/var/lib/dc-mirror/ubuntu
enabled
NextElapseUSecRealtime=
LastTriggerUSec=Fri 2026-07-24 00:52:13 UTC
Result=signal
ActiveState=failed

READING OF 4: the timer is ENABLED with an EMPTY next-elapse because the service sits in
failed/Result=signal from the 2026-07-24 pause-kill. D-135-amended ruling says dc1's
debmirror is PAUSED and 'kept dormant as the fallback' -- but nothing ENFORCES that. The
dormancy is a side effect of a failed unit, not a declared state; a systemctl reset-failed
would re-arm a 330G -> ~949G pull on a rack whose artifact path is now the proxy.

================================================================================
CORRECTION APPENDED 2026-07-27 (same day, after further measurement). Appended
rather than edited in place: this file is dated evidence, so a wrong analytical
claim inside it is superseded openly, not quietly rewritten.

THE CLAIM ABOVE (section 4 reading, line ~89) IS WRONG:
  "a systemctl reset-failed would re-arm a 330G -> ~949G pull"

MEASURED afterwards, the re-arm vector is a REBOOT, not reset-failed:
  dc1-mirror-sync.timer   is-enabled = enabled   is-active = INACTIVE (dead)
  NextElapseUSecRealtime  = (empty)              Persistent = yes
  LastTriggerUSec         = Fri 2026-07-24 00:52:13 UTC

The timer was STOPPED (not disabled) at the 07-24 pause. Nothing is scheduled while
it is inactive, so `reset-failed` on the SERVICE does not start the TIMER and would
NOT have re-armed anything. What re-arms it is a reboot: `enabled` means systemd
starts the timer at boot, and `Persistent=yes` means a timer whose scheduled time has
already passed fires IMMEDIATELY on activation to catch up -- so the pull would have
begun at once, not at the next 00:xx window. That vector was real and recurring: the
rack lives inside vvr1-dc1 on the vcloud host, so a vcloud reboot reboots the rack.

MOOT AS OF THE SAME DAY: dc1's mirror was REMOVED entirely
(docs/audit/dc1-mirror-teardown-20260727.txt), so no dc1 timer exists to re-arm. The
correction is recorded because the CAUSAL LESSON generalises and dc0's timer is still
enabled with Persistent=yes -- see the systemd-timer entry in the operating skill's
platform-traps reference.