diff --git a/coderd/prebuilds/api.go b/coderd/prebuilds/api.go index 1bedeb10130c8..ed39f2a322776 100644 --- a/coderd/prebuilds/api.go +++ b/coderd/prebuilds/api.go @@ -66,5 +66,4 @@ type Claimer interface { nextStartAt sql.NullTime, ttl sql.NullInt64, ) (*uuid.UUID, error) - Initiator() uuid.UUID } diff --git a/coderd/prebuilds/noop.go b/coderd/prebuilds/noop.go index ebb6d6964214e..170b0a12af6fd 100644 --- a/coderd/prebuilds/noop.go +++ b/coderd/prebuilds/noop.go @@ -35,8 +35,4 @@ func (NoopClaimer) Claim(context.Context, time.Time, uuid.UUID, string, uuid.UUI return nil, ErrAGPLDoesNotSupportPrebuiltWorkspaces } -func (NoopClaimer) Initiator() uuid.UUID { - return uuid.Nil -} - var DefaultClaimer Claimer = NoopClaimer{} diff --git a/coderd/workspaces.go b/coderd/workspaces.go index 8f2317fc96375..d67fa2ef4b5a7 100644 --- a/coderd/workspaces.go +++ b/coderd/workspaces.go @@ -719,7 +719,6 @@ func createWorkspace( } else { // Prebuild found! workspaceID = claimedWorkspace.ID - initiatorID = prebuildsClaimer.Initiator() } // We have to refetch the workspace for the joined in fields. diff --git a/enterprise/coderd/prebuilds/claim.go b/enterprise/coderd/prebuilds/claim.go index daea281d38d60..743513cedbc6a 100644 --- a/enterprise/coderd/prebuilds/claim.go +++ b/enterprise/coderd/prebuilds/claim.go @@ -55,8 +55,4 @@ func (c EnterpriseClaimer) Claim( return &result.ID, nil } -func (EnterpriseClaimer) Initiator() uuid.UUID { - return database.PrebuildsSystemUserID -} - var _ prebuilds.Claimer = &EnterpriseClaimer{} diff --git a/enterprise/coderd/prebuilds/claim_test.go b/enterprise/coderd/prebuilds/claim_test.go index 9ed7e9ffd19e0..217a9ff09614a 100644 --- a/enterprise/coderd/prebuilds/claim_test.go +++ b/enterprise/coderd/prebuilds/claim_test.go @@ -86,10 +86,6 @@ func (m *storeSpy) ClaimPrebuiltWorkspace(ctx context.Context, arg database.Clai func TestClaimPrebuild(t *testing.T) { t.Parallel() - if !dbtestutil.WillUsePostgres() { - t.Skip("This test requires postgres") - } - const ( desiredInstances = 1 presetCount = 2 @@ -260,13 +256,15 @@ func TestClaimPrebuild(t *testing.T) { switch { case tc.claimingErr != nil && (isNoPrebuiltWorkspaces || isUnsupported): require.NoError(t, err) - build := coderdtest.AwaitWorkspaceBuildJobCompleted(t, userClient, userWorkspace.LatestBuild.ID) - _ = build + coderdtest.AwaitWorkspaceBuildJobCompleted(t, userClient, userWorkspace.LatestBuild.ID) // Then: the number of running prebuilds hasn't changed because claiming prebuild is failed and we fallback to creating new workspace. currentPrebuilds, err := spy.GetRunningPrebuiltWorkspaces(ctx) require.NoError(t, err) require.Equal(t, expectedPrebuildsCount, len(currentPrebuilds)) + // If there are no prebuilt workspaces to claim, a new workspace is created from scratch + // and the initiator is set as usual. + require.Equal(t, user.ID, userWorkspace.LatestBuild.Job.InitiatorID) return case tc.claimingErr != nil && errors.Is(tc.claimingErr, unexpectedClaimingError): @@ -278,6 +276,9 @@ func TestClaimPrebuild(t *testing.T) { currentPrebuilds, err := spy.GetRunningPrebuiltWorkspaces(ctx) require.NoError(t, err) require.Equal(t, expectedPrebuildsCount, len(currentPrebuilds)) + // If a prebuilt workspace claim fails for an unanticipated, erroneous reason, + // no workspace is created and therefore the initiator is not set. + require.Equal(t, uuid.Nil, userWorkspace.LatestBuild.Job.InitiatorID) return default: @@ -285,6 +286,8 @@ func TestClaimPrebuild(t *testing.T) { require.NoError(t, err) build := coderdtest.AwaitWorkspaceBuildJobCompleted(t, userClient, userWorkspace.LatestBuild.ID) require.Equal(t, build.Job.Status, codersdk.ProvisionerJobSucceeded) + // Prebuild claims are initiated by the user who requested to create a workspace. + require.Equal(t, user.ID, userWorkspace.LatestBuild.Job.InitiatorID) } // at this point we know that tc.claimingErr is nil