Deployment & Settings Changes - v1.71.0
Release: v1.71.0 Date: 2026-08-13
Summary
Impact Level: MEDIUM
Action Required: YES
Backward Compatible: YES
A new optional configuration value for address search. Two new migrations, one of which builds an index on the largest table in the schema. New optional Helm values for GPU rasterization in the converter, for pointing PostgreSQL and Redis at an external host, and for deploying the editor and booking services independently. Section photos require object storage on the converter.
Manual steps
Allow for a longer editor start on the first boot
V116 builds an index on seat_on_event, the largest table in the schema, and
editor-service runs Flyway on startup before it serves traffic. On an instance with a
large event history the first start after upgrading takes noticeably longer than usual.
The chart’s editor startup budget has been raised to five minutes to cover this; an
operator running the service outside the chart should give it at least the same.
The index is built with CREATE INDEX CONCURRENTLY, so writes to seat_on_event
continue throughout. No maintenance window is needed.
Supply the editor’s server-side Google API key
editor-service uses a server-side Google API key for address search, separate from the
browser key the editor page uses for the map preview. It is delivered as
secrets.google.serverApiKey and reaches the service as GOOGLE_SERVER_API_KEY.
The value is optional. Left empty, editor-service falls back to secrets.google.apiKey,
which is the right result for a deployment that uses a single unrestricted key and needs
no action.
Set it when secrets.google.apiKey is referrer-restricted, as it should be on a public
site. A referrer-restricted key is rejected on a server-to-server call, because such a
call carries no referrer, so address search then needs a key of its own: restricted by
the egress IP addresses of the nodes editor-service runs on, with the Geocoding, Time
Zone and Places APIs enabled.
When applying an IP restriction, cover the address family the node actually leaves from. A dual-stack host may egress over IPv6 even where an IPv4 address is the one on record, and the restriction is matched against the address the request genuinely arrives from.
For a Flux-managed deployment, add the entry alongside the existing google-api-key one:
- kind: Secret
name: seatmap-helm-secrets
valuesKey: google-server-api-key
targetPath: secrets.google.serverApiKey
For a helm upgrade, pass --set secrets.google.serverApiKey=....
Configure object storage before using section photos
Section photos are written through the converter to object storage. Where the converter
is configured for local storage the upload endpoint reports the feature as unavailable,
which is deliberate: a locally-stored photo returns a path the buyer’s browser cannot
resolve. Set the converter’s storage type to s3 and supply the S3 values under
global.s3 to enable the feature.
Instances that do not use section photos need no action.
Size for a second converter pod before enabling GPU rasterization
converter.gpu.enabled is new and defaults to false. When enabled, the chart deploys a
second converter, {release}-converter-gpu, alongside the software one. That pod requests
gpu.intel.com/i915 and joins the host render group; the software converter keeps running
regardless, so conversion continues at software speed on a node that does not advertise the
device, and uses the GPU as soon as one is offered. Account for the extra pod when sizing
the node, and confirm the node reports a non-zero gpu.intel.com/i915 in its allocatable
resources if the GPU replica is meant to schedule.
The converter Service selects its pods by a new converter label in this release. The
upgrade that introduces it leaves the Service without an endpoint for as long as the first
replacement pod takes to become ready — expect a short gap in background and thumbnail
conversion during the rollout.
Database changes
New Migrations: YES
| File | Description | Impact | Rollback safe |
|---|---|---|---|
V115__backfill_section_name_guid_coordinates.sql |
Fills in a name, guid and x/y coordinates for any section missing them, so the stricter validation on schema save cannot reject a pre-existing schema | Row updates only, scoped to sections with a missing value. One row on our own instance; unmeasured on self-hosted instances. No lock beyond the rows it touches | Yes |
V116__seat_on_event_event_updated_at_idx.sql |
Adds an (event_id, updated_at) index on seat_on_event |
Built with CREATE INDEX CONCURRENTLY; writes continue during the build. Extends editor-service startup on a large table |
Yes - drop the index |
Out-of-order migrations
Both migrations follow the previous release’s highest version in sequence, so
spring.flyway.outOfOrder is not required for this upgrade.
Configuration changes
New Helm values
| Value | Default | Purpose |
|---|---|---|
secrets.google.serverApiKey |
'' |
Server-side Google API key for address search. Falls back to secrets.google.apiKey when empty |
converter.gpu.enabled |
false |
Deploy a second, GPU-accelerated converter alongside the software one. See the manual step above |
converter.gpu.renderGroupId |
109 |
Host render group the GPU converter container joins |
global.postgresql.host |
'' |
Point the services at an external PostgreSQL. Empty keeps the in-chart service |
global.redis.host |
'' |
Point the services at an external Redis-compatible server. Empty keeps the in-chart service |
editor.enabled |
true |
Set to false to deploy the chart without the editor |
booking.enabled |
true |
Set to false to deploy the chart without the booking service |
The two host overrides make it possible to run PostgreSQL and Redis outside the chart — a managed database, or a Redis-compatible server such as Valkey — without forking the templates. Existing deployments that leave both empty are unaffected.
Docker images
| Image | Change | Impact |
|---|---|---|
converter-service |
Base image moved from Alpine to Debian bookworm-slim | Larger image, substantially faster background conversion. No configuration change required |
booking-service |
Runtime image built with jlink |
Smaller image. No configuration change required |
Rollback
Both migrations are additive and safe to leave in place on a rollback to 1.70.x. V116’s
index is unused by the previous release and can be dropped if the space matters; V115
only fills in values that were previously absent and must not be reverted.
Related
- Release notes:
docs/releases/versions/1.71.0/release-notes.md