Skip to content

Commit 2c3a80b

Browse files
feat: implement claiming of prebuilt workspaces
1 parent 183146e commit 2c3a80b

File tree

2 files changed

+485
-0
lines changed

2 files changed

+485
-0
lines changed

enterprise/coderd/prebuilds/claim.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package prebuilds
2+
3+
import (
4+
"context"
5+
"database/sql"
6+
"errors"
7+
8+
"github.com/coder/coder/v2/coderd/prebuilds"
9+
10+
"github.com/google/uuid"
11+
"golang.org/x/xerrors"
12+
13+
"github.com/coder/coder/v2/coderd/database"
14+
)
15+
16+
type EnterpriseClaimer struct{}
17+
18+
func (_ EnterpriseClaimer) Claim(ctx context.Context, store database.Store, userID uuid.UUID, name string, presetID uuid.UUID) (*uuid.UUID, error) {
19+
var prebuildID *uuid.UUID
20+
err := store.InTx(func(db database.Store) error {
21+
// TODO: do we need this?
22+
//// Ensure no other replica can claim a prebuild for this user simultaneously.
23+
// err := store.AcquireLock(ctx, database.GenLockID(fmt.Sprintf("prebuild-user-claim-%s", userID.String())))
24+
// if err != nil {
25+
// return xerrors.Errorf("acquire claim lock for user %q: %w", userID.String(), err)
26+
//}
27+
28+
result, err := db.ClaimPrebuiltWorkspace(ctx, database.ClaimPrebuiltWorkspaceParams{
29+
NewUserID: userID,
30+
NewName: name,
31+
PresetID: presetID,
32+
})
33+
if err != nil {
34+
switch {
35+
// No eligible prebuilds found
36+
case errors.Is(err, sql.ErrNoRows):
37+
// Exit, this will result in a nil prebuildID being returned, which is fine
38+
return nil
39+
default:
40+
return xerrors.Errorf("claim prebuild for user %q: %w", userID.String(), err)
41+
}
42+
}
43+
44+
prebuildID = &result.ID
45+
46+
return nil
47+
}, &database.TxOptions{
48+
TxIdentifier: "prebuild-claim",
49+
})
50+
51+
return prebuildID, err
52+
}
53+
54+
func (_ EnterpriseClaimer) Initiator() uuid.UUID {
55+
return prebuilds.SystemUserID
56+
}
57+
58+
var _ prebuilds.Claimer = &EnterpriseClaimer{}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy