Finish RPF-WP-0018; RPF-WP-0019 repository-complete
RPF-WP-0018 closed: all seven tasks done. The provider-declaration finding was adopted upstream and its canonical form is the provider: block in tenancy.yaml; adaptive-pricing declined the standing co-signature and supplied typed tier minima instead, recorded in ADR-0002. Three corrections against our own output are recorded in the documents rather than edited away. RPF-WP-0019 T03 done (ceiling of three, memory binding, apps-pg-2 named as overflow, enforced by make apps-pg-verify-capacity). T01/T02 are repository-complete: backup target, retention, per-consumer connection limits, role timeouts and Burstable resources are declared in source and published in s3-consumer-interfaces 1.1.0 before rollout. They stay in progress because no live application, backup success or restore proof exists, and declared configuration is not a section 13 artifact. T04 waits on that window. apps-pg R reason corrected to say the target is declared-not-applied rather than absent. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
e52ae26001
commit
dc4245361d
20 changed files with 650 additions and 73 deletions
|
|
@ -55,29 +55,28 @@ provisions the role and CNPG `Database`, labels the namespace
|
|||
RW endpoint: `apps-pg-rw.databases.svc.cluster.local:5432`. Bootstrap
|
||||
role `apps_admin` is not a consumer credential.
|
||||
|
||||
**Quotas and limits** — read from `helm/apps-pg-cluster.yaml`, 2026-08-17:
|
||||
**Quotas and limits** — declared in `helm/apps-pg-cluster.yaml` and
|
||||
`helm/apps-pg-consumer-controls.sql`, 2026-08-18. These values are published
|
||||
before the corresponding live rollout:
|
||||
|
||||
| Property | Value | Note |
|
||||
| --- | --- | --- |
|
||||
| `max_connections` | **PostgreSQL default (100)** | Not tuned in the CR. Not partitioned per consumer — there is no per-consumer connection allowance, so one consumer can exhaust the cluster. |
|
||||
| `statement_timeout` | **none** | Not set. A runaway query runs until it finishes. |
|
||||
| `idle_in_transaction_session_timeout` | **none** | Not set. |
|
||||
| CPU / memory limits | **none declared** | The pod is BestEffort QoS and is the first thing evicted under node pressure. |
|
||||
| `max_connections` | 100 | Explicit aggregate cap. Forty connections remain outside the declared three-consumer ceiling for operator/CNPG overhead. |
|
||||
| Per-consumer connections | 20 | CNPG `managed.roles[].connectionLimit`, for both current roles. |
|
||||
| `statement_timeout` | 15s | Per role; idempotent operator SQL because CNPG 1.28 has no managed-role settings field. |
|
||||
| `idle_in_transaction_session_timeout` | 15s | Per role, same enforcement path. |
|
||||
| CPU / memory | 100m / 256Mi requests; 1 CPU / 1Gi limits | Burstable QoS; memory is expected to bind before connections if workload size grows. |
|
||||
| Instances | 1 | No HA. Restart recovery only, per the single-node rail. |
|
||||
| Storage | 10Gi | |
|
||||
| Backup | **none configured** | No `barmanObjectStore`, no `retentionPolicy`. |
|
||||
| Effective erasure horizon | **undefined** | Follows from the line above. |
|
||||
| Backup | 30d; daily 02:15 UTC + continuous WAL | S3 prefix `s3://railiance-platform-pg-backup/apps-pg/`; rollout is not evidence of recoverability until first backup and restore proof exist. |
|
||||
| Effective erasure horizon | 30d, or the max across co-residents | Shared-cluster rule from placement policy §7. |
|
||||
| Declared ceiling / overflow | 3 consumers / `apps-pg-2` | Memory is the binding safety constraint; provision the named overflow substrate before admitting a fourth. |
|
||||
|
||||
**Read the backup row before provisioning against this cluster.** `apps-pg`
|
||||
has no backup at all — not a short retention, none. Recovery from data loss is
|
||||
not available on this interface today. This is disclosed rather than fixed
|
||||
because §10.2 requires disclosure now and the fix needs a backup target; it is
|
||||
recorded as the R-axis gap in `docs/tenancy-posture.md` and is the highest
|
||||
value item that declaration surfaced.
|
||||
|
||||
The unpartitioned connection pool is the same shape of risk `rapp-postgres`
|
||||
reported for `platform-pg`: the bound is aggregate, so every consumer can be
|
||||
politely inside its own expectations while the cluster still fails.
|
||||
The manifests close the configuration gap, not the evidence gap. Until the
|
||||
cluster change is applied and `LastBackupSucceeded=True` plus a scratch restore
|
||||
are captured, recovery remains operationally unproven. Likewise the P1 noisy-
|
||||
neighbour claim waits for the controlled probe window; source configuration is
|
||||
not substituted for either artifact.
|
||||
|
||||
## `rapp-postgres.v1`
|
||||
|
||||
|
|
@ -99,7 +98,7 @@ Consumer is a `consumers[].declaration`. Boundary unit is
|
|||
| Backup retention | 30d | Instance-wide, per `rapp-postgres` ADR-0002. |
|
||||
| Effective erasure horizon | **30d, or the max across co-residents** | A consumer needing shorter cannot have it at P1. See `docs/placement-policy.md` §7. |
|
||||
| Statement timeout | consumer-set | `tenant-engine` sets 5s for its own path; not a platform default. |
|
||||
| Declared ceiling / overflow target | **not yet declared** | Owed by `rapp-postgres` before the third consumer, per `docs/placement-policy.md` Rule P-4.1. |
|
||||
| Declared ceiling / overflow target | **4 declarations / `platform-pg-2`** | The isolation probe counts. `rapp-postgres` rejects a fifth declaration on one cell; ADR-0004 owns the number. |
|
||||
|
||||
Service classes currently co-resident on `platform-pg`: `latency-critical`
|
||||
(`tenant-engine`) and `batch` (`audit-core`). Nothing prioritises between them
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue