Production Checklist
Work through this before you ship. Every item here is a failure that is cheap to prevent now and painful to diagnose later.
Submitting tickets
Section titled “Submitting tickets”- Ticket IDs are UUIDs generated in your backend, and a timed-out
CreateTicketis retried with the same ID. - Everything the engine needs is in
engine_input; everything you want back is inmetadata. -
Player.latenciesuses host keys that map directly onto your provisioning layer’s placement identifiers. - Your
mmrvalues are on the same scale as the queue’smmr_normalization_ref. The parameter defaults assume a normalised0.0-1.0range; a raw ladder rating in the thousands will dominate every other term until you rescale. - The player is shown a queue state on the
CreateTicketack, not a match.
Consuming outcomes
Section titled “Consuming outcomes”- Outcomes are handled idempotently, keyed on
Outcome.idorMatch.id. Delivery is at-least-once on every sink. - Your handler acknowledges fast and does provisioning asynchronously. A handler that provisions before responding will hit the delivery timeout and cause a retry storm, with duplicate provisioning attempts as the visible symptom.
-
ticket.expiredandticket.removedare handled as lists; both are batched. -
ticket.removedreasons are distinguished: re-queue for most, stop routing forQUEUE_RETIRED.
Honouring matches
Section titled “Honouring matches”-
match.createdis treated as a commitment: you either provision, or you compensate withReactivateTickets. - You walk
host.acceptablebefore declaring provisioning failed. -
terminal_retention_ttl_secsis set above your orchestrator’s worst-case provisioning time plus the fallback walk. - A non-empty
failed_ticket_idsfromReactivateTicketsis alerted on, not ignored.
Error handling
Section titled “Error handling”-
FAILED_PRECONDITIONonCancelTicketis handled as “a match is coming”, and thematch.createdthat follows is still honoured. -
UNAVAILABLEis retried with backoff rather than surfaced to the player. -
FAILED_PRECONDITIONwithx-ivk-reason: QUEUE_RETIRINGstops you routing to that queue instead of retrying it.
Configuration
Section titled “Configuration”-
expiration_ttl_secsis slightly above the longest wait your game will display, so the timeout the player sees is your decision. - Credentials are loaded from your secret store, not from source control, configuration files, or a game client.
- If you run more than one ruleset,
fairness_weightreflects which mode is the headline one.
Backfill
Section titled “Backfill”- Backfill requests are cancelled when a match fills or ends.
- Nothing in your launch plan depends on backfill being fulfilled. It is not yet implemented.