- Future Work §6: validate_host() implementation plan (CN allowlist, admin-cn flag, reject/log unauthorised OP_upgradeConfig requests) - Future Work §7: OP_replConfig access control hardening (peer validation, rate-limiting, minimum_role check) - Future Work §8: lost_and_found reserved-name validation in admin config tool, with migration path for pre-existing clusters - config-replication-design.md: expand CONF_ENABLE_UPGRADE_CONFIG safety gate section with gating prerequisites
4.3 KiB
XCE Controller: Future Work Items
Status: Tracked from config-replication-design.md review Last Updated: 2026-05-12
1. Admin Config Tool (prerequisite for Phase 2)
OP_upgradeConfig requires an admin tool to drive it. The tool must:
- Encode a
ClusterConfigYAML/JSON file to Cap'n Proto binary - Compute SHA-256 over the binary bytes
- Connect to the primary controller's endpoint (SSL, same CA as controllers)
- Send
OP_upgradeConfigwith the binary blob and SHA-256 - Display the reply: new version tag, acked count, and any error message
- Poll
OP_probeafter restart to confirm the primary is back online with the new config
Suggested interface: xce-config push --controller <host:port> --config cluster.yaml
2. Quorum-ACK Gate Before Restart (§14.4 extension)
Current OP_upgradeConfig restarts the primary after best-effort push to standbys.
A quorum-ACK gate would refuse to restart unless a minimum number of standbys
acknowledge the push, preventing silent rollback when all standbys are offline.
Requires: OP_upgradeConfig reply to include --require-standby-ack=N flag.
3. OP_heartbeat Peers Cross-Validation (§11.2)
Include a hash of the local --peers string in the heartbeat request. If two
candidates disagree on the peers list, log ERROR. Detects misconfigured nodes
at election time rather than silently producing dual-primary split-brain.
4. Lost and Found Drain Command (§6.5 extension)
xcecli lost-and-found drain — reassign or cancel sidelined jobs, reset
lost_and_found_job_count to 0. Automates operator cleanup after config upgrade.
5. OP_upgradeConfig Standby Redirect (§10.12 verification)
Test that a standby correctly returns an error reply with the primary's address
when an admin tool sends OP_upgradeConfig to a standby, and the admin tool
retries against the primary.
6. validate_host() Implementation Plan
validate_host() is currently a stub that returns success for all peers. Before
CONF_ENABLE_UPGRADE_CONFIG can be set to 1, it MUST be enhanced with a real
authorisation check. Minimum viable implementation:
- Verify the peer's X.509 certificate Common Name (CN) against a configured allowlist of authorised admin hosts.
- Add
--admin-cnCLI flag oradmin_cn_listconfig field to specify allowed CNs. - Reject
OP_upgradeConfigrequests from peers whose CN is not in the allowlist with a clear error message. - Log all rejected attempts at WARN level with peer CN and IP.
Future extensions (not required for gate removal): IP allowlist, role-based access, mutual-TLS with admin-specific CA.
7. OP_replConfig Access Control Hardening
OP_replConfig currently serves the full cluster config blob to any peer that
completes an SSL handshake with a CA-signed cert (trusted-LAN model, §5.3).
Enhancements to consider:
- Verify the requesting peer is a known controller (listed in
--peers) before serving the config blob. - Rate-limit
OP_replConfigrequests per peer to prevent repeated disk I/O on the primary. - Add a
minimum_rolecheck (e.g., only serve toHostRole_controllerpeers, not arbitrary SSL clients).
8. Lost-and-Found Internal Keyword Validation
The name "lost_and_found" is an internal controller keyword for synthetic
queue and host entries created during WAL recovery (§6.5). The controller
rejects this name at both load_primary_config() and OP_upgradeConfig entry
points.
Config tool responsibility: The admin config tool (Future Work §1) MUST
validate that user-authored config files do not use the reserved names
"lost_and_found" for any queue or host. The tool should emit a clear error
and refuse to encode the config blob. This provides defence-in-depth: the
controller enforces at runtime, and the tool prevents at authoring time.
Migration path for pre-existing clusters: If a cluster already has a
user-defined queue or host named "lost_and_found" before upgrading to this
controller version, the operator must rename it in the cluster config YAML
before the upgrade. The admin config tool will validate this; if bypassing
the tool and hand-crafting a Cap'n Proto blob, the controller's
load_primary_config() will FATAL with a message identifying the reserved
name. See config-replication-design.md §6.5 and §7.1.