Skip to content

Commit 9a6b99a

Browse files
authored
feat: Add the command name to show who is holding dir lock (#5935)
Signed-off-by: Luke Massa <[email protected]>
1 parent 6c3fa30 commit 9a6b99a

12 files changed

+127
-97
lines changed

server/controllers/api_controller.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (a *APIController) Plan(w http.ResponseWriter, r *http.Request) {
9696
return
9797
}
9898

99-
err = a.apiSetup(ctx)
99+
err = a.apiSetup(ctx, command.Plan)
100100
if err != nil {
101101
a.apiReportError(w, http.StatusInternalServerError, err)
102102
return
@@ -130,7 +130,7 @@ func (a *APIController) Apply(w http.ResponseWriter, r *http.Request) {
130130
return
131131
}
132132

133-
err = a.apiSetup(ctx)
133+
err = a.apiSetup(ctx, command.Apply)
134134
if err != nil {
135135
a.apiReportError(w, http.StatusInternalServerError, err)
136136
return
@@ -211,12 +211,12 @@ func (a *APIController) ListLocks(w http.ResponseWriter, r *http.Request) {
211211
a.respond(w, logging.Warn, http.StatusOK, "%s", string(response))
212212
}
213213

214-
func (a *APIController) apiSetup(ctx *command.Context) error {
214+
func (a *APIController) apiSetup(ctx *command.Context, cmdName command.Name) error {
215215
pull := ctx.Pull
216216
baseRepo := ctx.Pull.BaseRepo
217217
headRepo := ctx.HeadRepo
218218

219-
unlockFn, err := a.WorkingDirLocker.TryLock(baseRepo.FullName, pull.Num, events.DefaultWorkspace, events.DefaultRepoRelDir)
219+
unlockFn, err := a.WorkingDirLocker.TryLock(baseRepo.FullName, pull.Num, events.DefaultWorkspace, events.DefaultRepoRelDir, cmdName)
220220
if err != nil {
221221
return err
222222
}

server/controllers/api_controller_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ func setup(t *testing.T) (controllers.APIController, *MockProjectCommandBuilder,
268268
Ok(t, err)
269269

270270
workingDirLocker := NewMockWorkingDirLocker()
271-
When(workingDirLocker.TryLock(Any[string](), Any[int](), Eq(events.DefaultWorkspace), Eq(events.DefaultRepoRelDir))).
271+
When(workingDirLocker.TryLock(Any[string](), Any[int](), Eq(events.DefaultWorkspace), Eq(events.DefaultRepoRelDir), Any[command.Name]())).
272272
ThenReturn(func() {}, nil)
273273

274274
projectCommandBuilder := NewMockProjectCommandBuilder()

server/events/mocks/mock_custom_step_runner.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/events/mocks/mock_working_dir_locker.go

Lines changed: 15 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/events/post_workflow_hooks_command_runner.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func (w *DefaultPostWorkflowHooksCommandRunner) RunPostHooks(ctx *command.Contex
5252

5353
ctx.Log.Info("Post-workflow hooks configured, running...")
5454

55-
unlockFn, err := w.WorkingDirLocker.TryLock(ctx.Pull.BaseRepo.FullName, ctx.Pull.Num, DefaultWorkspace, DefaultRepoRelDir)
55+
unlockFn, err := w.WorkingDirLocker.TryLock(ctx.Pull.BaseRepo.FullName, ctx.Pull.Num, DefaultWorkspace, DefaultRepoRelDir, cmd.Name)
5656
if err != nil {
5757
return err
5858
}

server/events/post_workflow_hooks_command_runner_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
166166
postWh.GlobalCfg = globalCfg
167167

168168
When(postWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
169-
events.DefaultRepoRelDir)).ThenReturn(unlockFn, nil)
169+
events.DefaultRepoRelDir, command.Plan)).ThenReturn(unlockFn, nil)
170170
When(postWhWorkingDir.Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
171171
Eq(events.DefaultWorkspace))).ThenReturn(repoDir, nil)
172172
When(whPostWorkflowHookRunner.Run(Any[models.WorkflowHookCommandContext](), Eq(testHook.RunCommand), Any[string](),
@@ -207,7 +207,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
207207
expectedCtx.HookDescription = "Post workflow hook #0"
208208

209209
When(postWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
210-
events.DefaultRepoRelDir)).ThenReturn(unlockFn, nil)
210+
events.DefaultRepoRelDir, command.Plan)).ThenReturn(unlockFn, nil)
211211
When(postWhWorkingDir.Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
212212
Eq(events.DefaultWorkspace))).ThenReturn(repoDir, nil)
213213
When(whPostWorkflowHookRunner.Run(
@@ -256,7 +256,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
256256

257257
whPostWorkflowHookRunner.VerifyWasCalled(Never()).Run(Any[models.WorkflowHookCommandContext](),
258258
Eq(testHook.RunCommand), Eq(defaultShell), Eq(defaultShellArgs), Eq(repoDir))
259-
postWhWorkingDirLocker.VerifyWasCalled(Never()).TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace, "path")
259+
postWhWorkingDirLocker.VerifyWasCalled(Never()).TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace, "path", command.Plan)
260260
postWhWorkingDir.VerifyWasCalled(Never()).Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
261261
Eq(events.DefaultWorkspace))
262262
})
@@ -277,7 +277,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
277277
postWh.GlobalCfg = globalCfg
278278

279279
When(postWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
280-
events.DefaultRepoRelDir)).ThenReturn(func() {}, errors.New("some error"))
280+
events.DefaultRepoRelDir, command.Plan)).ThenReturn(func() {}, errors.New("some error"))
281281

282282
err := postWh.RunPostHooks(ctx, planCmd)
283283

@@ -310,7 +310,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
310310
postWh.GlobalCfg = globalCfg
311311

312312
When(postWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
313-
events.DefaultRepoRelDir)).ThenReturn(unlockFn, nil)
313+
events.DefaultRepoRelDir, command.Plan)).ThenReturn(unlockFn, nil)
314314
When(postWhWorkingDir.Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
315315
Eq(events.DefaultWorkspace))).ThenReturn(repoDir, errors.New("some error"))
316316

@@ -345,7 +345,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
345345
postWh.GlobalCfg = globalCfg
346346

347347
When(postWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
348-
events.DefaultRepoRelDir)).ThenReturn(unlockFn, nil)
348+
events.DefaultRepoRelDir, command.Plan)).ThenReturn(unlockFn, nil)
349349
When(postWhWorkingDir.Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
350350
Eq(events.DefaultWorkspace))).ThenReturn(repoDir, nil)
351351
When(whPostWorkflowHookRunner.Run(Any[models.WorkflowHookCommandContext](), Eq(testHook.RunCommand),
@@ -387,7 +387,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
387387
postWh.GlobalCfg = globalCfg
388388

389389
When(postWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
390-
events.DefaultRepoRelDir)).ThenReturn(unlockFn, nil)
390+
events.DefaultRepoRelDir, command.Plan)).ThenReturn(unlockFn, nil)
391391
When(postWhWorkingDir.Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
392392
Eq(events.DefaultWorkspace))).ThenReturn(repoDir, nil)
393393
When(whPostWorkflowHookRunner.Run(Any[models.WorkflowHookCommandContext](), Eq(testHook.RunCommand),
@@ -423,7 +423,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
423423
postWh.GlobalCfg = globalCfg
424424

425425
When(postWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
426-
events.DefaultRepoRelDir)).ThenReturn(unlockFn, nil)
426+
events.DefaultRepoRelDir, command.Plan)).ThenReturn(unlockFn, nil)
427427
When(postWhWorkingDir.Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
428428
Eq(events.DefaultWorkspace))).ThenReturn(repoDir, nil)
429429
When(whPostWorkflowHookRunner.Run(Any[models.WorkflowHookCommandContext](), Eq(testHookWithShell.RunCommand),
@@ -459,7 +459,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
459459
postWh.GlobalCfg = globalCfg
460460

461461
When(postWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
462-
events.DefaultRepoRelDir)).ThenReturn(unlockFn, nil)
462+
events.DefaultRepoRelDir, command.Plan)).ThenReturn(unlockFn, nil)
463463
When(postWhWorkingDir.Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
464464
Eq(events.DefaultWorkspace))).ThenReturn(repoDir, nil)
465465
When(whPostWorkflowHookRunner.Run(Any[models.WorkflowHookCommandContext](), Eq(testHook.RunCommand),
@@ -495,7 +495,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
495495
postWh.GlobalCfg = globalCfg
496496

497497
When(postWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
498-
events.DefaultRepoRelDir)).ThenReturn(unlockFn, nil)
498+
events.DefaultRepoRelDir, command.Plan)).ThenReturn(unlockFn, nil)
499499
When(postWhWorkingDir.Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
500500
Eq(events.DefaultWorkspace))).ThenReturn(repoDir, nil)
501501
When(whPostWorkflowHookRunner.Run(Any[models.WorkflowHookCommandContext](), Eq(testHookWithShellandShellArgs.RunCommand),
@@ -532,7 +532,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
532532
preWh.GlobalCfg = globalCfg
533533

534534
When(preWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
535-
events.DefaultRepoRelDir)).ThenReturn(unlockFn, nil)
535+
events.DefaultRepoRelDir, command.Plan)).ThenReturn(unlockFn, nil)
536536
When(preWhWorkingDir.Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
537537
Eq(events.DefaultWorkspace))).ThenReturn(repoDir, nil)
538538
When(whPreWorkflowHookRunner.Run(Any[models.WorkflowHookCommandContext](),
@@ -568,7 +568,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
568568
preWh.GlobalCfg = globalCfg
569569

570570
When(preWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
571-
events.DefaultRepoRelDir)).ThenReturn(unlockFn, nil)
571+
events.DefaultRepoRelDir, command.Apply)).ThenReturn(unlockFn, nil)
572572
When(preWhWorkingDir.Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
573573
Eq(events.DefaultWorkspace))).ThenReturn(repoDir, nil)
574574
When(whPreWorkflowHookRunner.Run(Any[models.WorkflowHookCommandContext](), Eq(testHookWithPlanCommand.RunCommand),
@@ -604,7 +604,7 @@ func TestRunPostHooks_Clone(t *testing.T) {
604604
preWh.GlobalCfg = globalCfg
605605

606606
When(preWhWorkingDirLocker.TryLock(testdata.GithubRepo.FullName, newPull.Num, events.DefaultWorkspace,
607-
events.DefaultRepoRelDir)).ThenReturn(unlockFn, nil)
607+
events.DefaultRepoRelDir, command.Plan)).ThenReturn(unlockFn, nil)
608608
When(preWhWorkingDir.Clone(Any[logging.SimpleLogging](), Eq(testdata.GithubRepo), Eq(newPull),
609609
Eq(events.DefaultWorkspace))).ThenReturn(repoDir, nil)
610610
When(whPreWorkflowHookRunner.Run(Any[models.WorkflowHookCommandContext](), Eq(testHookWithPlanApplyCommands.RunCommand),

server/events/pre_workflow_hooks_command_runner.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func (w *DefaultPreWorkflowHooksCommandRunner) RunPreHooks(ctx *command.Context,
5252

5353
ctx.Log.Info("Pre-workflow hooks configured, running...")
5454

55-
unlockFn, err := w.WorkingDirLocker.TryLock(ctx.Pull.BaseRepo.FullName, ctx.Pull.Num, DefaultWorkspace, DefaultRepoRelDir)
55+
unlockFn, err := w.WorkingDirLocker.TryLock(ctx.Pull.BaseRepo.FullName, ctx.Pull.Num, DefaultWorkspace, DefaultRepoRelDir, cmd.Name)
5656
if err != nil {
5757
return err
5858
}

0 commit comments

Comments
 (0)