@@ -15,6 +15,7 @@ import (
15
15
"tailscale.com/types/key"
16
16
17
17
"github.com/coder/coder/v2/cli/clibase"
18
+ "github.com/coder/coder/v2/coderd/database"
18
19
"github.com/coder/coder/v2/cryptorand"
19
20
"github.com/coder/coder/v2/enterprise/audit"
20
21
"github.com/coder/coder/v2/enterprise/audit/backends"
@@ -37,21 +38,41 @@ func (r *RootCmd) Server(_ func()) *clibase.Cmd {
37
38
}
38
39
39
40
options .DERPServer = derp .NewServer (key .NewNode (), tailnet .Logger (options .Logger .Named ("derp" )))
40
- meshKey , err := options .Database .GetDERPMeshKey (ctx )
41
- if err != nil {
41
+
42
+ var meshKey string
43
+ err := options .Database .InTx (func (tx database.Store ) error {
44
+ // This will block until the lock is acquired, and will be
45
+ // automatically released when the transaction ends.
46
+ err := tx .AcquireLock (ctx , database .LockIDEnterpriseDeploymentSetup )
47
+ if err != nil {
48
+ return xerrors .Errorf ("acquire lock: %w" , err )
49
+ }
50
+
51
+ meshKey , err = tx .GetDERPMeshKey (ctx )
52
+ if err == nil {
53
+ return nil
54
+ }
42
55
if ! errors .Is (err , sql .ErrNoRows ) {
43
- return nil , nil , xerrors .Errorf ("get mesh key: %w" , err )
56
+ return xerrors .Errorf ("get DERP mesh key: %w" , err )
44
57
}
45
58
meshKey , err = cryptorand .String (32 )
46
59
if err != nil {
47
- return nil , nil , xerrors .Errorf ("generate mesh key: %w" , err )
60
+ return xerrors .Errorf ("generate DERP mesh key: %w" , err )
48
61
}
49
- err = options . Database .InsertDERPMeshKey (ctx , meshKey )
62
+ err = tx .InsertDERPMeshKey (ctx , meshKey )
50
63
if err != nil {
51
- return nil , nil , xerrors .Errorf ("insert mesh key: %w" , err )
64
+ return xerrors .Errorf ("insert DERP mesh key: %w" , err )
52
65
}
66
+ return nil
67
+ }, nil )
68
+ if err != nil {
69
+ return nil , nil , err
70
+ }
71
+ if meshKey == "" {
72
+ return nil , nil , xerrors .New ("mesh key is empty" )
53
73
}
54
74
options .DERPServer .SetMeshKey (meshKey )
75
+
55
76
options .Auditor = audit .NewAuditor (
56
77
options .Database ,
57
78
audit .DefaultFilter ,
0 commit comments