Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 29a019a

Browse files
committed
Fix agent lock
1 parent 1726ead commit 29a019a

28 files changed

+80
-289
lines changed

agent/agent.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,10 @@ type server struct {
7777
clientDialer Dialer
7878
options *peer.ConnOptions
7979

80-
closeCancel context.CancelFunc
81-
closeMutex sync.Mutex
82-
closed chan struct{}
80+
connCloseWait sync.WaitGroup
81+
closeCancel context.CancelFunc
82+
closeMutex sync.Mutex
83+
closed chan struct{}
8384

8485
sshServer *ssh.Server
8586
}
@@ -279,11 +280,16 @@ func (s *server) run(ctx context.Context) {
279280
s.run(ctx)
280281
return
281282
}
283+
s.connCloseWait.Add(1)
282284
go s.handlePeerConn(ctx, conn)
283285
}
284286
}
285287

286288
func (s *server) handlePeerConn(ctx context.Context, conn *peer.Conn) {
289+
go func() {
290+
<-conn.Closed()
291+
s.connCloseWait.Done()
292+
}()
287293
for {
288294
channel, err := conn.Accept(ctx)
289295
if err != nil {
@@ -325,5 +331,6 @@ func (s *server) Close() error {
325331
close(s.closed)
326332
s.closeCancel()
327333
_ = s.sshServer.Close()
334+
s.connCloseWait.Wait()
328335
return nil
329336
}

cli/login.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func login() *cobra.Command {
5959
}
6060

6161
client := codersdk.New(serverURL)
62-
hasInitialUser, err := client.HasInitialUser(cmd.Context())
62+
hasInitialUser, err := client.HasFirstUser(cmd.Context())
6363
if err != nil {
6464
return xerrors.Errorf("has initial user: %w", err)
6565
}
@@ -119,7 +119,7 @@ func login() *cobra.Command {
119119
return xerrors.Errorf("specify password prompt: %w", err)
120120
}
121121

122-
_, err = client.CreateInitialUser(cmd.Context(), coderd.CreateInitialUserRequest{
122+
_, err = client.CreateFirstUser(cmd.Context(), coderd.CreateFirstUserRequest{
123123
Email: email,
124124
Username: username,
125125
Password: password,

cli/login_test.go

+3-22
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package cli_test
22

33
import (
4-
"context"
54
"testing"
65

76
"github.com/stretchr/testify/require"
87

98
"github.com/coder/coder/cli/clitest"
10-
"github.com/coder/coder/coderd"
119
"github.com/coder/coder/coderd/coderdtest"
1210
"github.com/coder/coder/pty/ptytest"
1311
)
@@ -56,18 +54,7 @@ func TestLogin(t *testing.T) {
5654
t.Run("ExistingUserValidTokenTTY", func(t *testing.T) {
5755
t.Parallel()
5856
client := coderdtest.New(t, nil)
59-
_, err := client.CreateInitialUser(context.Background(), coderd.CreateInitialUserRequest{
60-
Username: "test-user",
61-
62-
Organization: "acme-corp",
63-
Password: "password",
64-
})
65-
require.NoError(t, err)
66-
token, err := client.LoginWithPassword(context.Background(), coderd.LoginWithPasswordRequest{
67-
68-
Password: "password",
69-
})
70-
require.NoError(t, err)
57+
coderdtest.CreateFirstUser(t, client)
7158

7259
root, _ := clitest.New(t, "login", client.URL.String(), "--force-tty", "--no-open")
7360
pty := ptytest.New(t)
@@ -79,20 +66,14 @@ func TestLogin(t *testing.T) {
7966
}()
8067

8168
pty.ExpectMatch("Paste your token here:")
82-
pty.WriteLine(token.SessionToken)
69+
pty.WriteLine(client.SessionToken)
8370
pty.ExpectMatch("Welcome to Coder")
8471
})
8572

8673
t.Run("ExistingUserInvalidTokenTTY", func(t *testing.T) {
8774
t.Parallel()
8875
client := coderdtest.New(t, nil)
89-
_, err := client.CreateInitialUser(context.Background(), coderd.CreateInitialUserRequest{
90-
Username: "test-user",
91-
92-
Organization: "acme-corp",
93-
Password: "password",
94-
})
95-
require.NoError(t, err)
76+
coderdtest.CreateFirstUser(t, client)
9677

9778
root, _ := clitest.New(t, "login", client.URL.String(), "--force-tty", "--no-open")
9879
pty := ptytest.New(t)

cli/projectcreate.go

+16-17
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func projectCreate() *cobra.Command {
5656
Default: filepath.Base(directory),
5757
Label: "What's your project's name?",
5858
Validate: func(s string) error {
59-
project, _ := client.Project(cmd.Context(), organization.Name, s)
59+
project, _ := client.ProjectByName(cmd.Context(), organization.ID, s)
6060
if project.ID.String() != uuid.Nil.String() {
6161
return xerrors.New("A project already exists with that name!")
6262
}
@@ -71,9 +71,9 @@ func projectCreate() *cobra.Command {
7171
if err != nil {
7272
return err
7373
}
74-
project, err := client.CreateProject(cmd.Context(), organization.Name, coderd.CreateProjectRequest{
75-
Name: name,
76-
VersionImportJobID: job.ID,
74+
project, err := client.CreateProject(cmd.Context(), organization.ID, coderd.CreateProjectRequest{
75+
Name: name,
76+
VersionID: job.ID,
7777
})
7878
if err != nil {
7979
return err
@@ -118,7 +118,7 @@ func projectCreate() *cobra.Command {
118118
return cmd
119119
}
120120

121-
func validateProjectVersionSource(cmd *cobra.Command, client *codersdk.Client, organization coderd.Organization, provisioner database.ProvisionerType, directory string, parameters ...coderd.CreateParameterValueRequest) (*coderd.ProvisionerJob, error) {
121+
func validateProjectVersionSource(cmd *cobra.Command, client *codersdk.Client, organization coderd.Organization, provisioner database.ProvisionerType, directory string, parameters ...coderd.CreateParameterValueRequest) (*coderd.ProjectVersion, error) {
122122
spin := spinner.New(spinner.CharSets[5], 100*time.Millisecond)
123123
spin.Writer = cmd.OutOrStdout()
124124
spin.Suffix = " Uploading current directory..."
@@ -139,7 +139,7 @@ func validateProjectVersionSource(cmd *cobra.Command, client *codersdk.Client, o
139139
}
140140

141141
before := time.Now()
142-
job, err := client.CreateProjectImportJob(cmd.Context(), organization.Name, coderd.CreateProjectImportJobRequest{
142+
version, err := client.CreateProjectVersion(cmd.Context(), organization.ID, coderd.CreateProjectVersionRequest{
143143
StorageMethod: database.ProvisionerStorageMethodFile,
144144
StorageSource: resp.Hash,
145145
Provisioner: provisioner,
@@ -149,7 +149,7 @@ func validateProjectVersionSource(cmd *cobra.Command, client *codersdk.Client, o
149149
return nil, err
150150
}
151151
spin.Suffix = " Waiting for the import to complete..."
152-
logs, err := client.ProjectImportJobLogsAfter(cmd.Context(), organization.Name, job.ID, before)
152+
logs, err := client.ProjectVersionLogsAfter(cmd.Context(), version.ID, before)
153153
if err != nil {
154154
return nil, err
155155
}
@@ -162,22 +162,22 @@ func validateProjectVersionSource(cmd *cobra.Command, client *codersdk.Client, o
162162
logBuffer = append(logBuffer, log)
163163
}
164164

165-
job, err = client.ProjectImportJob(cmd.Context(), organization.Name, job.ID)
165+
version, err = client.ProjectVersion(cmd.Context(), version.ID)
166166
if err != nil {
167167
return nil, err
168168
}
169-
parameterSchemas, err := client.ProjectImportJobSchemas(cmd.Context(), organization.Name, job.ID)
169+
parameterSchemas, err := client.ProjectVersionSchema(cmd.Context(), version.ID)
170170
if err != nil {
171171
return nil, err
172172
}
173-
parameterValues, err := client.ProjectImportJobParameters(cmd.Context(), organization.Name, job.ID)
173+
parameterValues, err := client.ProjectVersionParameters(cmd.Context(), version.ID)
174174
if err != nil {
175175
return nil, err
176176
}
177177
spin.Stop()
178178

179-
if provisionerd.IsMissingParameterError(job.Error) {
180-
valuesBySchemaID := map[string]coderd.ComputedParameterValue{}
179+
if provisionerd.IsMissingParameterError(version.Job.Error) {
180+
valuesBySchemaID := map[string]coderd.ProjectVersionParameter{}
181181
for _, parameterValue := range parameterValues {
182182
valuesBySchemaID[parameterValue.SchemaID.String()] = parameterValue
183183
}
@@ -202,21 +202,20 @@ func validateProjectVersionSource(cmd *cobra.Command, client *codersdk.Client, o
202202
return validateProjectVersionSource(cmd, client, organization, provisioner, directory, parameters...)
203203
}
204204

205-
if job.Status != coderd.ProvisionerJobStatusSucceeded {
205+
if version.Job.Status != coderd.ProvisionerJobSucceeded {
206206
for _, log := range logBuffer {
207207
_, _ = fmt.Fprintf(cmd.OutOrStdout(), "%s %s\n", color.HiGreenString("[tf]"), log.Output)
208208
}
209-
210-
return nil, xerrors.New(job.Error)
209+
return nil, xerrors.New(version.Job.Error)
211210
}
212211

213212
_, _ = fmt.Fprintf(cmd.OutOrStdout(), "%s Successfully imported project source!\n", color.HiGreenString("✓"))
214213

215-
resources, err := client.ProjectImportJobResources(cmd.Context(), organization.Name, job.ID)
214+
resources, err := client.ProjectVersionResources(cmd.Context(), version.ID)
216215
if err != nil {
217216
return nil, err
218217
}
219-
return &job, displayProjectImportInfo(cmd, parameterSchemas, parameterValues, resources)
218+
return &version, displayProjectImportInfo(cmd, parameterSchemas, parameterValues, resources)
220219
}
221220

222221
func tarDirectory(directory string) ([]byte, error) {

cli/projectlist.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func projectList() *cobra.Command {
2323
if err != nil {
2424
return err
2525
}
26-
projects, err := client.Projects(cmd.Context(), organization.Name)
26+
projects, err := client.ProjectsByOrganization(cmd.Context(), organization.ID)
2727
if err != nil {
2828
return err
2929
}

cli/projectlist_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ func TestProjectList(t *testing.T) {
3535
client := coderdtest.New(t, nil)
3636
user := coderdtest.CreateFirstUser(t, client)
3737
daemon := coderdtest.NewProvisionerDaemon(t, client)
38-
job := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, nil)
39-
coderdtest.AwaitProjectImportJob(t, client, user.OrganizationID, job.ID)
38+
version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, nil)
39+
coderdtest.AwaitProjectVersionJob(t, client, version.ID)
4040
_ = daemon.Close()
41-
project := coderdtest.CreateProject(t, client, user.OrganizationID, job.ID)
41+
project := coderdtest.CreateProject(t, client, user.OrganizationID, version.ID)
4242
cmd, root := clitest.New(t, "projects", "list")
4343
clitest.SetupConfig(t, client, root)
4444
pty := ptytest.New(t)

cli/projects.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ func projects() *cobra.Command {
4040
return cmd
4141
}
4242

43-
func displayProjectImportInfo(cmd *cobra.Command, parameterSchemas []coderd.ParameterSchema, parameterValues []coderd.ComputedParameterValue, resources []coderd.WorkspaceResource) error {
44-
schemaByID := map[string]coderd.ParameterSchema{}
43+
func displayProjectImportInfo(cmd *cobra.Command, parameterSchemas []coderd.ProjectVersionParameterSchema, parameterValues []coderd.ProjectVersionParameter, resources []coderd.WorkspaceResource) error {
44+
schemaByID := map[string]coderd.ProjectVersionParameterSchema{}
4545
for _, schema := range parameterSchemas {
4646
schemaByID[schema.ID.String()] = schema
4747
}

cli/root.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ func createClient(cmd *cobra.Command) (*codersdk.Client, error) {
108108

109109
// currentOrganization returns the currently active organization for the authenticated user.
110110
func currentOrganization(cmd *cobra.Command, client *codersdk.Client) (coderd.Organization, error) {
111-
orgs, err := client.UserOrganizations(cmd.Context(), "me")
111+
orgs, err := client.OrganizationsByUser(cmd.Context(), "me")
112112
if err != nil {
113113
return coderd.Organization{}, nil
114114
}

cli/workspaceagent.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func workspaceAgent() *cobra.Command {
3939
}
4040
switch {
4141
case probe.GCP():
42-
response, err := client.AuthenticateWorkspaceAgentUsingGoogleCloudIdentity(cmd.Context(), "", nil)
42+
response, err := client.AuthWorkspaceGoogleInstanceIdentity(cmd.Context(), "", nil)
4343
if err != nil {
4444
return xerrors.Errorf("authenticate workspace with gcp: %w", err)
4545
}
@@ -49,7 +49,7 @@ func workspaceAgent() *cobra.Command {
4949
}
5050
}
5151
client.SessionToken = sessionToken
52-
closer := agent.New(client.WorkspaceAgentServe, nil)
52+
closer := agent.New(client.ListenWorkspaceAgent, nil)
5353
<-cmd.Context().Done()
5454
return closer.Close()
5555
},

cli/workspacecreate.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func workspaceCreate() *cobra.Command {
3939
if s == "" {
4040
return xerrors.Errorf("You must provide a name!")
4141
}
42-
workspace, _ := client.Workspace(cmd.Context(), "", s)
42+
workspace, _ := client.WorkspaceByName(cmd.Context(), "", s)
4343
if workspace.ID.String() != uuid.Nil.String() {
4444
return xerrors.New("A workspace already exists with that name!")
4545
}
@@ -56,23 +56,23 @@ func workspaceCreate() *cobra.Command {
5656

5757
_, _ = fmt.Fprintf(cmd.OutOrStdout(), "%s Previewing project create...\n", caret)
5858

59-
project, err := client.Project(cmd.Context(), organization.Name, args[0])
59+
project, err := client.ProjectByName(cmd.Context(), organization.ID, args[0])
6060
if err != nil {
6161
return err
6262
}
63-
projectVersion, err := client.ProjectVersion(cmd.Context(), organization.Name, project.Name, project.ActiveVersionID.String())
63+
projectVersion, err := client.ProjectVersion(cmd.Context(), project.ActiveVersionID)
6464
if err != nil {
6565
return err
6666
}
67-
parameterSchemas, err := client.ProjectImportJobSchemas(cmd.Context(), organization.Name, projectVersion.ImportJobID)
67+
parameterSchemas, err := client.ProjectVersionSchema(cmd.Context(), projectVersion.ID)
6868
if err != nil {
6969
return err
7070
}
71-
parameterValues, err := client.ProjectImportJobParameters(cmd.Context(), organization.Name, projectVersion.ImportJobID)
71+
parameterValues, err := client.ProjectVersionParameters(cmd.Context(), projectVersion.ID)
7272
if err != nil {
7373
return err
7474
}
75-
resources, err := client.ProjectImportJobResources(cmd.Context(), organization.Name, projectVersion.ImportJobID)
75+
resources, err := client.ProjectVersionResources(cmd.Context(), projectVersion.ID)
7676
if err != nil {
7777
return err
7878
}
@@ -100,15 +100,15 @@ func workspaceCreate() *cobra.Command {
100100
if err != nil {
101101
return err
102102
}
103-
history, err := client.CreateWorkspaceBuild(cmd.Context(), "", workspace.Name, coderd.CreateWorkspaceBuildRequest{
103+
version, err := client.CreateWorkspaceBuild(cmd.Context(), workspace.ID, coderd.CreateWorkspaceBuildRequest{
104104
ProjectVersionID: projectVersion.ID,
105105
Transition: database.WorkspaceTransitionStart,
106106
})
107107
if err != nil {
108108
return err
109109
}
110110

111-
logs, err := client.WorkspaceBuildJobLogsAfter(cmd.Context(), organization.Name, history.ProvisionJobID, time.Time{})
111+
logs, err := client.WorkspaceBuildLogsAfter(cmd.Context(), version.ID, time.Time{})
112112
if err != nil {
113113
return err
114114
}

cli/workspacecreate_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func TestWorkspaceCreate(t *testing.T) {
1919
client := coderdtest.New(t, nil)
2020
user := coderdtest.CreateFirstUser(t, client)
2121
_ = coderdtest.NewProvisionerDaemon(t, client)
22-
job := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, &echo.Responses{
22+
version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, &echo.Responses{
2323
Parse: echo.ParseComplete,
2424
Provision: []*proto.Provision_Response{{
2525
Type: &proto.Provision_Response_Complete{
@@ -32,8 +32,8 @@ func TestWorkspaceCreate(t *testing.T) {
3232
},
3333
}},
3434
})
35-
coderdtest.AwaitProjectImportJob(t, client, user.OrganizationID, job.ID)
36-
project := coderdtest.CreateProject(t, client, user.OrganizationID, job.ID)
35+
coderdtest.AwaitProjectVersionJob(t, client, version.ID)
36+
project := coderdtest.CreateProject(t, client, user.OrganizationID, version.ID)
3737
cmd, root := clitest.New(t, "workspaces", "create", project.Name)
3838
clitest.SetupConfig(t, client, root)
3939

coderd/coderdtest/coderdtest.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ func CreateProjectVersion(t *testing.T, client *codersdk.Client, organization st
191191
require.NoError(t, err)
192192
file, err := client.Upload(context.Background(), codersdk.ContentTypeTar, data)
193193
require.NoError(t, err)
194-
projectVersion, err := client.CreateProjectVersion(context.Background(), organization, coderd.CreateProjectVersion{
194+
projectVersion, err := client.CreateProjectVersion(context.Background(), organization, coderd.CreateProjectVersionRequest{
195195
StorageSource: file.Hash,
196196
StorageMethod: database.ProvisionerStorageMethodFile,
197197
Provisioner: database.ProvisionerTypeEcho,

coderd/files.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,5 +96,5 @@ func (api *api) fileByHash(rw http.ResponseWriter, r *http.Request) {
9696
}
9797
rw.Header().Set("Content-Type", file.Mimetype)
9898
rw.WriteHeader(http.StatusOK)
99-
rw.Write(file.Data)
99+
_, _ = rw.Write(file.Data)
100100
}

coderd/organizations.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ type CreateProjectRequest struct {
5252
VersionID uuid.UUID `json:"project_version_id" validate:"required"`
5353
}
5454

55-
func (api *api) organization(rw http.ResponseWriter, r *http.Request) {
55+
func (*api) organization(rw http.ResponseWriter, r *http.Request) {
5656
organization := httpmw.OrganizationParam(r)
5757
render.Status(r, http.StatusOK)
5858
render.JSON(rw, r, convertOrganization(organization))

0 commit comments

Comments
 (0)