Extract PostgreSQL, Podman runtime and systemd lifecycle adapters while preserving existing lifecycle and scoring behavior. Update RPM layout and add guarded operator-run lab harnesses. Record successful manual stop/start, promotion, demotion and rewind-only rejoin with pinned installed hashes. The unfenced lab does not validate automatic failover, Pacemaker-managed transitions or divergent-data rewind. Validation: 103 offline tests, original-function differential checks, checksum manifest and whitespace checks passed.
120 lines
6.2 KiB
Markdown
120 lines
6.2 KiB
Markdown
# ELITEDESK plugin installation and basic checks
|
|
|
|
Status: installed on DAVID-ELITEDESK; operator-reported basic checks passed.
|
|
All 15 installed code files were subsequently verified read-only against the
|
|
working candidate and matched byte-for-byte.
|
|
No production or peer-node actions are part of this procedure.
|
|
|
|
Read-only preflight on DAVID-ELITEDESK found its PostgreSQL container running as
|
|
an asynchronous streaming standby of 192.168.1.2 using ha_david_elitedesk.
|
|
All 11 installed RA/module/helper files match source freeze 488a167; their exact
|
|
hashes are captured in lab-installed-before-plugin.sha256. This is a lab snapshot,
|
|
not the outstanding production snapshot. Current cluster maintenance state could
|
|
not be read without sudo; the installer verifies it live before any replacement.
|
|
|
|
Run in the operator's terminal:
|
|
|
|
```sh
|
|
sudo python3 /home/david/codex-postgres-ha-refactor/scripts/test-elitedesk-plugin.py
|
|
```
|
|
|
|
The command requires the existing postgres-ra-test cluster, exactly the two lab
|
|
nodes, pg-ha under pg-ha-clone, expected local container/database settings, and
|
|
maintenance-mode already true. It does not enable maintenance mode or modify CIB
|
|
configuration. It copies parameters from the live resource and rejects ambiguous
|
|
parameter sets. Native sudo prompts stay in the terminal; never share a password.
|
|
|
|
It verifies source checksums, stages root-owned code, backs up the installed agent
|
|
and modules under /var/backups/managed-container-plugin-lab-*, validates staged
|
|
metadata and configuration, then replaces the complete module tree and entrypoint.
|
|
The installation remains in place after success. A failed post-install check
|
|
restores the old agent and module tree and retains diagnostic files.
|
|
|
|
Basic checks are metadata (16 parameters), validate-all, monitor, status, an
|
|
idempotent start on the already-running standby, and another monitor. Before and
|
|
after checks require the same PostgreSQL system identifier, postmaster start time,
|
|
recovery role, streaming sender and slot. No stop, promote, demote, rejoin or
|
|
fencing is invoked. Normal monitors/start may refresh local promotion evidence
|
|
and the pg-ha promotion score; those expected side effects are part of testing.
|
|
A score of -INFINITY is recorded rather than mistaken for a failed role monitor;
|
|
strict catch-up can fluctuate. Investigate that result before broader HA testing.
|
|
|
|
The script prints its backup/result directory and action results. It records
|
|
results.json and installed-SHA256SUMS there with root-only access. Return the
|
|
terminal output before progressing to disruptive stop/start or switchover tests.
|
|
|
|
Preparation validation: current structural/differential tests passed; two
|
|
isolated installer tests passed, covering basic-action-only success and restoration
|
|
of both agent and modules on an injected installed-monitor failure. These tests
|
|
mock privilege/cluster boundaries and touch only temporary directories; they do
|
|
not claim live installation success.
|
|
|
|
## Completed basic lab run
|
|
|
|
The operator supplied successful installer output for backup/result directory
|
|
`/var/backups/managed-container-plugin-lab-mow_t6zi`:
|
|
|
|
- Staged metadata and validate-all: rc=0.
|
|
- Installed validate-all, monitor, status, idempotent start, monitor: rc=0.
|
|
- Final promotion score: 100.
|
|
- The installer reported PostgreSQL was not restarted and maintenance remained true.
|
|
- No stop, promote, demote, rejoin, fencing, or peer-node actions ran.
|
|
|
|
Codex independently compared every installed entrypoint/module/helper file with
|
|
the working candidate using read-only filesystem access; all 15 matched. Exact
|
|
installed SHA-256 values are recorded in [lab-installed-plugin.sha256](lab-installed-plugin.sha256).
|
|
The root-only results.json was not independently read; the action results above
|
|
are attributed to the operator-supplied output. This validates the installation
|
|
and non-disruptive standby path, not actual stop/start, switchover or failover.
|
|
|
|
Installed-file comparison captured at 2026-09-13T03:01:11.114949+00:00 UTC.
|
|
|
|
## Controlled standby stop/start — operator-reported pass
|
|
|
|
The operator ran:
|
|
|
|
```sh
|
|
sudo python3 /home/david/codex-postgres-ha-refactor/scripts/test-elitedesk-cycle.py
|
|
```
|
|
|
|
This briefly interrupts only the ELITEDESK standby. The script requires the same
|
|
lab identity, maintenance=true, streaming sender/slot and exact installed hashes.
|
|
It validates/monitors, runs RA stop, checks systemd inactive and the container
|
|
stopped/absent, expects monitor=7 and score=-INFINITY, then runs RA start. It
|
|
requires the same database identifier, a new postmaster start time, recovery and
|
|
streaming from DV6, monitor/status=0 and score=100 within the verification window.
|
|
Each RA action has a 60-second timeout with a 5-second kill grace. Post-start
|
|
streaming/eligibility checks have a 60-second retry window (an in-flight bounded
|
|
check can finish after the deadline). No source files or cluster configuration
|
|
are replaced, and no promotion, demotion, rejoin, fencing or peer action runs.
|
|
|
|
Failures halt without automatic recovery and may leave the standby stopped.
|
|
Inspect the printed /var/backups/managed-container-cycle-lab-* result directory
|
|
before proceeding. It contains root-only results.json and per-action output.
|
|
Three mocked harness tests passed: successful cycle, stop failure without start,
|
|
and start failure without retry. Those are preparation checks, not live results.
|
|
|
|
|
|
### Completed cycle result
|
|
|
|
The operator supplied successful output with evidence directory
|
|
`/var/backups/managed-container-cycle-lab-b1048r6q`:
|
|
|
|
| Check | Result |
|
|
| --- | --- |
|
|
| Initial validate-all and monitor | rc=0 |
|
|
| RA stop | rc=0 |
|
|
| Monitor while stopped | rc=7 |
|
|
| Stopped lifecycle state | systemd inactive; container stopped/absent |
|
|
| Stopped promotion score | -INFINITY |
|
|
| RA start, subsequent monitor and status | rc=0 |
|
|
| Database identity | Same system identifier; new postmaster start time |
|
|
| Replication after restart | Streaming from DV6; score 100 |
|
|
| Cluster maintenance | Remained true |
|
|
|
|
These results are attributed to the operator-supplied script output; Codex has
|
|
not independently read the root-only results.json. No promotion, demotion,
|
|
rejoin, fencing or peer-node actions ran. The basic standby lifecycle now has
|
|
live lab coverage; this does not establish switchover/failover behavior for the
|
|
plugin extraction or constitute production deployment validation.
|