Repository navigation
Open
Labels
area: platformPlatform, deployment, cluster, or runtime concern.Platform, deployment, cluster, or runtime concern.priority: P2Medium; normal planned work.Medium; normal planned work.status: blockedCannot move forward until an external dependency is resolved.Cannot move forward until an external dependency is resolved.type: choreMaintenance work without intended behavior change.Maintenance work without intended behavior change.
Description
Parent
Hand over data to the estate path, the W5 follow-up on JorisJonkers-dev/estate#216.
What this is
Data's handover goes ahead without MongoDB (decided 2026-10-30): Overleaf's MongoDB stays on the old path, in fleet-infra's apps-data-leftovers, and follows on its own once a mongo-backup image exists. The image now exists in code (JorisJonkers-dev/delivery#109, merged). This ticket is the rest.
What it needs
- A delivery release carrying
mongo-backup, and the estate's Platform images lock pinning it (by pull request in JorisJonkers-dev/estate, as for the other backup images). - A login, or a decision not to have one. The live MongoDB runs without authentication, deliberately: fleet-infra's
cluster/flux/apps/data/mongo/statefulset.yamlsays auth on a replica set needs a shared keyFile, which the official image cannot combine withMONGO_INITDB_ROOT_*.mongo-backuplogs in asMONGO_USERNAMEwithMONGO_PASSWORD, a user ofadmin, and refuses to run without them. So one of:- turn auth on (a keyFile Secret, a user made after
rs.initiate, a rolling restart; Overleaf's connection string gains the login), which that file names as the change to make once a second client appears. The backup is that client. Or: - let the method dump unauthenticated when its credential holds no login, a change in delivery.
- turn auth on (a keyFile Secret, a user made after
- The backup credential at
secret/data/data/mongo/backup(MONGO_USERNAME,MONGO_PASSWORD), added tobootstrap/secrets.sh --only data(feat(bootstrap): copy the data Project's catalog and backup logins estate#267) once the login exists. - The declaration in the estate's
platform/data/data.project.yml: themongoengine, itsirreplaceableorrecoverableclaim adopted asmongo-data-mongo-0, and the Platform document'sengines.mongoentry. - The replica set's member host. It is
mongo-0.mongo.data-system.svc.cluster.local, a StatefulSet ordinal name the render does not make. The member must be reconfigured (rs.reconfig) to the rendered Service's name in the window, or the render must give a stable per-pod name. --oplog: the dump is taken without it. On a one-member replica set it would give a point-in-time dump; on a standalone it fails. Decide whether the method adds it.- The fleet-infra change that moves
mongoout ofapps-data-leftovers, with the PVRetaincheck formongo-data-mongo-0.
Acceptance criteria
- MongoDB is delivered by the estate path, its claim adopted in place, and Overleaf reconnects.
- Its derived backup's first run writes a generation that
mongorestorereads back. - Nothing of MongoDB is left in
apps-data-leftovers.
Metadata
Metadata
Assignees
Labels
area: platformPlatform, deployment, cluster, or runtime concern.Platform, deployment, cluster, or runtime concern.priority: P2Medium; normal planned work.Medium; normal planned work.status: blockedCannot move forward until an external dependency is resolved.Cannot move forward until an external dependency is resolved.type: choreMaintenance work without intended behavior change.Maintenance work without intended behavior change.
Activity
ExtraToast commentedon Oct 30, 2026
Groundwork done, 2026-10-30
The plan is
docs/runbooks/mongo-handover.mdon JorisJonkers-dev/estate#272. Nothing live was written.Found
base.env, with no login. No Secret or other workload names MongoDB.mongo-0.mongo.data-system.svc.cluster.local:27017,mongo:8.0at the digest the lock pins. 20Gilocal-pathonfrankfurt-contabo-1, PV reclaim stillDelete. The claim template's claim has no owner, and the StatefulSet keeps it on delete. The Service is headless.--authon a replica set without cluster auth. It also refuses a keyFile any group can read. A Secret under the render'sfsGroupis always root:gid 0440, so the model cannot deliver a keyFile (A file grant's fileMode is not what the container sees under a volume's fsGroup #761). x.509 membership works on today's model, with one self-signed PEM in Vault.REMOVEDand stays that way. Fixed in fix(model): resolve a mongo's own Service name to itself, so its replica set member finds itself #757 (merged): amongoresolves its own Service name to itself.fsGroupChangePolicy, though chapter 10 says it does (fix(model): the render writes fsGroup without the OnRootMismatch change policy chapter 10 states #760).All of the above was tested in Docker on
mongo:8.0: auth on after the member moves host, transactions and change streams asoverleaf, and a dump by themongo-backup:ciimage asbackup.PRs
toolkit.ymlon itengines.mongo,mongo-backuplock placeholderplatform-mongoapps-latexDecisions open for the maintainer
All in the runbook, each with a recommendation:
--oplogalways.irreplaceable.readWriteanddbAdminonsharelatex.