fix: use existing transaction to claim prebuild (#21862)

- Claiming a prebuild was happening outside a transaction
This commit is contained in:
Jon Ayers
2026-02-02 17:57:59 -06:00
committed by GitHub
parent 5d24e17796
commit 3c1db17361
8 changed files with 20 additions and 22 deletions
+1 -1
View File
@@ -1332,5 +1332,5 @@ func (api *API) setupPrebuilds(featureEnabled bool) (agplprebuilds.Reconciliatio
api.TracerProvider,
int(api.DeploymentValues.PostgresConnMaxOpen.Value()),
)
return reconciler, prebuilds.NewEnterpriseClaimer(api.Database)
return reconciler, prebuilds.NewEnterpriseClaimer()
}
+7 -10
View File
@@ -13,18 +13,15 @@ import (
"github.com/coder/coder/v2/coderd/prebuilds"
)
type EnterpriseClaimer struct {
store database.Store
type EnterpriseClaimer struct{}
func NewEnterpriseClaimer() *EnterpriseClaimer {
return &EnterpriseClaimer{}
}
func NewEnterpriseClaimer(store database.Store) *EnterpriseClaimer {
return &EnterpriseClaimer{
store: store,
}
}
func (c EnterpriseClaimer) Claim(
func (EnterpriseClaimer) Claim(
ctx context.Context,
store database.Store,
now time.Time,
userID uuid.UUID,
name string,
@@ -33,7 +30,7 @@ func (c EnterpriseClaimer) Claim(
nextStartAt sql.NullTime,
ttl sql.NullInt64,
) (*uuid.UUID, error) {
result, err := c.store.ClaimPrebuiltWorkspace(ctx, database.ClaimPrebuiltWorkspaceParams{
result, err := store.ClaimPrebuiltWorkspace(ctx, database.ClaimPrebuiltWorkspaceParams{
NewUserID: userID,
NewName: name,
Now: now,
+1 -1
View File
@@ -175,7 +175,7 @@ func TestClaimPrebuild(t *testing.T) {
noop.NewTracerProvider(),
10,
)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer(spy)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer()
api.AGPL.PrebuildsClaimer.Store(&claimer)
version := coderdtest.CreateTemplateVersion(t, client, orgID, templateWithAgentAndPresetsWithPrebuilds(desiredInstances))
+6 -6
View File
@@ -1992,7 +1992,7 @@ func TestPrebuildsAutobuild(t *testing.T) {
noop.NewTracerProvider(),
10,
)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer(db)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer()
api.AGPL.PrebuildsClaimer.Store(&claimer)
// Setup user, template and template version with a preset with 1 prebuild instance
@@ -2116,7 +2116,7 @@ func TestPrebuildsAutobuild(t *testing.T) {
noop.NewTracerProvider(),
10,
)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer(db)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer()
api.AGPL.PrebuildsClaimer.Store(&claimer)
// Setup user, template and template version with a preset with 1 prebuild instance
@@ -2240,7 +2240,7 @@ func TestPrebuildsAutobuild(t *testing.T) {
noop.NewTracerProvider(),
10,
)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer(db)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer()
api.AGPL.PrebuildsClaimer.Store(&claimer)
// Setup user, template and template version with a preset with 1 prebuild instance
@@ -2386,7 +2386,7 @@ func TestPrebuildsAutobuild(t *testing.T) {
noop.NewTracerProvider(),
10,
)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer(db)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer()
api.AGPL.PrebuildsClaimer.Store(&claimer)
// Setup user, template and template version with a preset with 1 prebuild instance
@@ -2533,7 +2533,7 @@ func TestPrebuildsAutobuild(t *testing.T) {
noop.NewTracerProvider(),
10,
)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer(db)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer()
api.AGPL.PrebuildsClaimer.Store(&claimer)
// Setup user, template and template version with a preset with 1 prebuild instance
@@ -2980,7 +2980,7 @@ func TestWorkspaceProvisionerdServerMetrics(t *testing.T) {
noop.NewTracerProvider(),
10,
)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer(db)
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer()
api.AGPL.PrebuildsClaimer.Store(&claimer)
organizationName, err := client.Organization(ctx, owner.OrganizationID)