From 92a905a2d98ddd9cf89840608a90590a8c1b1cc7 Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Thu, 14 Dec 2023 11:38:01 +0000 Subject: [PATCH 1/2] feat(coderd/database): add api_version to provisioner_daemons table --- coderd/database/dump.sql | 5 ++++- .../000179_provisionerdaemon_add_apiversion.down.sql | 2 ++ .../000179_provisionerdaemon_add_apiversion.up.sql | 3 +++ coderd/database/models.go | 2 ++ coderd/database/queries.sql.go | 6 ++++-- 5 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 coderd/database/migrations/000179_provisionerdaemon_add_apiversion.down.sql create mode 100644 coderd/database/migrations/000179_provisionerdaemon_add_apiversion.up.sql diff --git a/coderd/database/dump.sql b/coderd/database/dump.sql index a1cf4b08477d2..b555970c5884e 100644 --- a/coderd/database/dump.sql +++ b/coderd/database/dump.sql @@ -514,9 +514,12 @@ CREATE TABLE provisioner_daemons ( replica_id uuid, tags jsonb DEFAULT '{}'::jsonb NOT NULL, last_seen_at timestamp with time zone, - version text DEFAULT ''::text NOT NULL + version text DEFAULT ''::text NOT NULL, + api_version text DEFAULT '1.0'::text NOT NULL ); +COMMENT ON COLUMN provisioner_daemons.api_version IS 'The API version of the provisioner daemon'; + CREATE TABLE provisioner_job_logs ( job_id uuid NOT NULL, created_at timestamp with time zone NOT NULL, diff --git a/coderd/database/migrations/000179_provisionerdaemon_add_apiversion.down.sql b/coderd/database/migrations/000179_provisionerdaemon_add_apiversion.down.sql new file mode 100644 index 0000000000000..60a26878871b3 --- /dev/null +++ b/coderd/database/migrations/000179_provisionerdaemon_add_apiversion.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE ONLY provisioner_daemons + DROP COLUMN api_version; diff --git a/coderd/database/migrations/000179_provisionerdaemon_add_apiversion.up.sql b/coderd/database/migrations/000179_provisionerdaemon_add_apiversion.up.sql new file mode 100644 index 0000000000000..9467c9511c753 --- /dev/null +++ b/coderd/database/migrations/000179_provisionerdaemon_add_apiversion.up.sql @@ -0,0 +1,3 @@ +ALTER TABLE ONLY provisioner_daemons + ADD COLUMN api_version text NOT NULL DEFAULT '1.0'; +COMMENT ON COLUMN provisioner_daemons.api_version IS 'The API version of the provisioner daemon'; diff --git a/coderd/database/models.go b/coderd/database/models.go index 47b095a7557d6..1fd9f241fa417 100644 --- a/coderd/database/models.go +++ b/coderd/database/models.go @@ -1845,6 +1845,8 @@ type ProvisionerDaemon struct { Tags StringMap `db:"tags" json:"tags"` LastSeenAt sql.NullTime `db:"last_seen_at" json:"last_seen_at"` Version string `db:"version" json:"version"` + // The API version of the provisioner daemon + APIVersion string `db:"api_version" json:"api_version"` } type ProvisionerJob struct { diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 03d595d9ec1ce..9b7bc2aacb384 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -3019,7 +3019,7 @@ func (q *sqlQuerier) DeleteOldProvisionerDaemons(ctx context.Context) error { const getProvisionerDaemons = `-- name: GetProvisionerDaemons :many SELECT - id, created_at, name, provisioners, replica_id, tags, last_seen_at, version + id, created_at, name, provisioners, replica_id, tags, last_seen_at, version, api_version FROM provisioner_daemons ` @@ -3042,6 +3042,7 @@ func (q *sqlQuerier) GetProvisionerDaemons(ctx context.Context) ([]ProvisionerDa &i.Tags, &i.LastSeenAt, &i.Version, + &i.APIVersion, ); err != nil { return nil, err } @@ -3083,7 +3084,7 @@ VALUES ( WHERE -- Only ones with the same tags are allowed clobber provisioner_daemons.tags <@ $4 :: jsonb -RETURNING id, created_at, name, provisioners, replica_id, tags, last_seen_at, version +RETURNING id, created_at, name, provisioners, replica_id, tags, last_seen_at, version, api_version ` type UpsertProvisionerDaemonParams struct { @@ -3114,6 +3115,7 @@ func (q *sqlQuerier) UpsertProvisionerDaemon(ctx context.Context, arg UpsertProv &i.Tags, &i.LastSeenAt, &i.Version, + &i.APIVersion, ) return i, err } From adb70752dea6cc389ad6a699decfd451d87c2802 Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Thu, 14 Dec 2023 12:16:23 +0000 Subject: [PATCH 2/2] fixup! feat(coderd/database): add api_version to provisioner_daemons table --- coderd/database/dbpurge/dbpurge_test.go | 10 +++++++++- coderd/database/queries.sql.go | 11 ++++++++--- coderd/database/queries/provisionerdaemons.sql | 9 ++++++--- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/coderd/database/dbpurge/dbpurge_test.go b/coderd/database/dbpurge/dbpurge_test.go index 0cff0b140fd19..59000e463888d 100644 --- a/coderd/database/dbpurge/dbpurge_test.go +++ b/coderd/database/dbpurge/dbpurge_test.go @@ -217,6 +217,8 @@ func TestDeleteOldProvisionerDaemons(t *testing.T) { Tags: database.StringMap{provisionersdk.TagScope: provisionersdk.ScopeOrganization}, CreatedAt: now.Add(-14 * 24 * time.Hour), LastSeenAt: sql.NullTime{Valid: true, Time: now.Add(-7 * 24 * time.Hour).Add(time.Minute)}, + Version: "1.0.0", + APIVersion: "1.0", }) require.NoError(t, err) _, err = db.UpsertProvisionerDaemon(ctx, database.UpsertProvisionerDaemonParams{ @@ -226,6 +228,8 @@ func TestDeleteOldProvisionerDaemons(t *testing.T) { Tags: database.StringMap{provisionersdk.TagScope: provisionersdk.ScopeOrganization}, CreatedAt: now.Add(-8 * 24 * time.Hour), LastSeenAt: sql.NullTime{Valid: true, Time: now.Add(-8 * 24 * time.Hour).Add(time.Hour)}, + Version: "1.0.0", + APIVersion: "1.0", }) require.NoError(t, err) _, err = db.UpsertProvisionerDaemon(ctx, database.UpsertProvisionerDaemonParams{ @@ -236,7 +240,9 @@ func TestDeleteOldProvisionerDaemons(t *testing.T) { provisionersdk.TagScope: provisionersdk.ScopeUser, provisionersdk.TagOwner: uuid.NewString(), }, - CreatedAt: now.Add(-9 * 24 * time.Hour), + CreatedAt: now.Add(-9 * 24 * time.Hour), + Version: "1.0.0", + APIVersion: "1.0", }) require.NoError(t, err) _, err = db.UpsertProvisionerDaemon(ctx, database.UpsertProvisionerDaemonParams{ @@ -249,6 +255,8 @@ func TestDeleteOldProvisionerDaemons(t *testing.T) { }, CreatedAt: now.Add(-6 * 24 * time.Hour), LastSeenAt: sql.NullTime{Valid: true, Time: now.Add(-6 * 24 * time.Hour)}, + Version: "1.0.0", + APIVersion: "1.0", }) require.NoError(t, err) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 9b7bc2aacb384..72ad223ef22c0 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -3066,7 +3066,8 @@ INSERT INTO provisioners, tags, last_seen_at, - "version" + "version", + api_version ) VALUES ( gen_random_uuid(), @@ -3075,12 +3076,14 @@ VALUES ( $3, $4, $5, - $6 + $6, + $7 ) ON CONFLICT("name", lower((tags ->> 'owner'::text))) DO UPDATE SET provisioners = $3, tags = $4, last_seen_at = $5, - "version" = $6 + "version" = $6, + api_version = $7 WHERE -- Only ones with the same tags are allowed clobber provisioner_daemons.tags <@ $4 :: jsonb @@ -3094,6 +3097,7 @@ type UpsertProvisionerDaemonParams struct { Tags StringMap `db:"tags" json:"tags"` LastSeenAt sql.NullTime `db:"last_seen_at" json:"last_seen_at"` Version string `db:"version" json:"version"` + APIVersion string `db:"api_version" json:"api_version"` } func (q *sqlQuerier) UpsertProvisionerDaemon(ctx context.Context, arg UpsertProvisionerDaemonParams) (ProvisionerDaemon, error) { @@ -3104,6 +3108,7 @@ func (q *sqlQuerier) UpsertProvisionerDaemon(ctx context.Context, arg UpsertProv arg.Tags, arg.LastSeenAt, arg.Version, + arg.APIVersion, ) var i ProvisionerDaemon err := row.Scan( diff --git a/coderd/database/queries/provisionerdaemons.sql b/coderd/database/queries/provisionerdaemons.sql index 7cc37bdc40faa..3041efad9419e 100644 --- a/coderd/database/queries/provisionerdaemons.sql +++ b/coderd/database/queries/provisionerdaemons.sql @@ -23,7 +23,8 @@ INSERT INTO provisioners, tags, last_seen_at, - "version" + "version", + api_version ) VALUES ( gen_random_uuid(), @@ -32,12 +33,14 @@ VALUES ( @provisioners, @tags, @last_seen_at, - @version + @version, + @api_version ) ON CONFLICT("name", lower((tags ->> 'owner'::text))) DO UPDATE SET provisioners = @provisioners, tags = @tags, last_seen_at = @last_seen_at, - "version" = @version + "version" = @version, + api_version = @api_version WHERE -- Only ones with the same tags are allowed clobber provisioner_daemons.tags <@ @tags :: jsonb