Skip to content

Shared persistent server-side state #310

Description

@lfrancke

Epic: Shared persistent server-side state

All server-side state is held in process-local Maps, so the deployment is capped at one replica and a restart drops everything.
Part of this is already tackled in the ongoing FileBrowser PRs.

Note

This text is AI generated against our normal policy because it is migrated from another place, when we tackle this for real it needs to be properly rewritten

Four places:

  • Trino connection configsrc/lib/server/trino/user-clients.ts:18,
    new Map<string, UserEntry>(). Per-user URL and credentials.
  • Sessions and userssrc/lib/server/auth.ts. betterAuth() is called without a
    database option, so it uses the built-in memory adapter.
  • Query statesrc/lib/server/trino/queries.ts:76,79. Progress, rows, status and
    per-tab access times.
  • Readinesssrc/routes/healthz/+server.ts. Liveness and readiness both point at
    /healthz, which always returns 200.

What this costs

  • replicaCount is a plain user-settable chart value (values.yaml:4, documented as
    "Number of replicas") with nothing stopping someone setting it to 2. At two replicas
    users are logged out at random, a query started on one pod is invisible to the other,
    and a saved connection only exists on the pod that received it.
  • A restart orphans running queries in Trino, loses completed results, and logs everyone out.
  • A readiness probe has nothing meaningful to check, so /readyz would be a placeholder
    until a backing store exists.

Scope

  • Pick a backing store and wire all four consumers to it. Allow using postres as storage backend for better-auth #41 proposes PostgreSQL for
    better-auth; whatever is chosen should cover all four rather than solving them separately.
  • Split /healthz (liveness, trivial) and /readyz (readiness, checks the store), and
    update the Helm probes.
  • Decide what replicaCount > 1 does until then: document the constraint, or make the
    chart reject it.

Out of scope

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions