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.


  • Release notes: docs/releases/versions/1.71.0/release-notes.md