From 26eb00c7b844cc27450003d9d454c1db096b8174 Mon Sep 17 00:00:00 2001 From: Spike Curtis Date: Thu, 22 Jun 2023 08:08:08 +0000 Subject: [PATCH] feat: enable PG Coordinator as experiment Signed-off-by: Spike Curtis --- coderd/apidoc/docs.go | 6 ++++-- coderd/apidoc/swagger.json | 8 ++++++-- codersdk/deployment.go | 4 ++++ docs/api/schemas.md | 9 +++++---- enterprise/coderd/coderd.go | 7 ++++++- site/src/api/typesGenerated.ts | 11 +++++++++-- 6 files changed, 34 insertions(+), 11 deletions(-) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index 10d5743688729..a49247c7abf9c 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -7389,11 +7389,13 @@ const docTemplate = `{ "type": "string", "enum": [ "moons", - "workspace_actions" + "workspace_actions", + "tailnet_pg_coordinator" ], "x-enum-varnames": [ "ExperimentMoons", - "ExperimentWorkspaceActions" + "ExperimentWorkspaceActions", + "ExperimentTailnetPGCoordinator" ] }, "codersdk.Feature": { diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index d93a869c421c2..946e6e4455d53 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -6612,8 +6612,12 @@ }, "codersdk.Experiment": { "type": "string", - "enum": ["moons", "workspace_actions"], - "x-enum-varnames": ["ExperimentMoons", "ExperimentWorkspaceActions"] + "enum": ["moons", "workspace_actions", "tailnet_pg_coordinator"], + "x-enum-varnames": [ + "ExperimentMoons", + "ExperimentWorkspaceActions", + "ExperimentTailnetPGCoordinator" + ] }, "codersdk.Feature": { "type": "object", diff --git a/codersdk/deployment.go b/codersdk/deployment.go index 028481c8cf41d..34bc0028da8f4 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -1729,6 +1729,10 @@ const ( // https://github.com/coder/coder/milestone/19 ExperimentWorkspaceActions Experiment = "workspace_actions" + // ExperimentTailnetPGCoordinator enables the PGCoord in favor of the pubsub- + // only Coordinator + ExperimentTailnetPGCoordinator Experiment = "tailnet_pg_coordinator" + // Add new experiments here! // ExperimentExample Experiment = "example" ) diff --git a/docs/api/schemas.md b/docs/api/schemas.md index f71c566a59674..b6083f03e0736 100644 --- a/docs/api/schemas.md +++ b/docs/api/schemas.md @@ -2495,10 +2495,11 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in #### Enumerated Values -| Value | -| ------------------- | -| `moons` | -| `workspace_actions` | +| Value | +| ------------------------ | +| `moons` | +| `workspace_actions` | +| `tailnet_pg_coordinator` | ## codersdk.Feature diff --git a/enterprise/coderd/coderd.go b/enterprise/coderd/coderd.go index aa460629cd929..6545e599202f3 100644 --- a/enterprise/coderd/coderd.go +++ b/enterprise/coderd/coderd.go @@ -414,7 +414,12 @@ func (api *API) updateEntitlements(ctx context.Context) error { if changed, enabled := featureChanged(codersdk.FeatureHighAvailability); changed { coordinator := agpltailnet.NewCoordinator(api.Logger) if enabled { - haCoordinator, err := tailnet.NewCoordinator(api.Logger, api.Pubsub) + var haCoordinator agpltailnet.Coordinator + if api.AGPL.Experiments.Enabled(codersdk.ExperimentTailnetPGCoordinator) { + haCoordinator, err = tailnet.NewPGCoord(ctx, api.Logger, api.Pubsub, api.Database) + } else { + haCoordinator, err = tailnet.NewCoordinator(api.Logger, api.Pubsub) + } if err != nil { api.Logger.Error(ctx, "unable to set up high availability coordinator", slog.Error(err)) // If we try to setup the HA coordinator and it fails, nothing diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 0e3bb85e7a9f0..e1a1f859578c9 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1346,8 +1346,15 @@ export const Entitlements: Entitlement[] = [ ] // From codersdk/deployment.go -export type Experiment = "moons" | "workspace_actions" -export const Experiments: Experiment[] = ["moons", "workspace_actions"] +export type Experiment = + | "moons" + | "tailnet_pg_coordinator" + | "workspace_actions" +export const Experiments: Experiment[] = [ + "moons", + "tailnet_pg_coordinator", + "workspace_actions", +] // From codersdk/deployment.go export type FeatureName =