Skip to content

Commit 2c6ea13

Browse files
authored
Merge pull request moby#3726 from aaronlehmann/register-build-earlier
Register builds before recording build history
2 parents 81f565f + 396b276 commit 2c6ea13

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

solver/llbsolver/solver.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -421,15 +421,6 @@ func (s *Solver) Solve(ctx context.Context, id string, sessionID string, req fro
421421

422422
if internal {
423423
defer j.CloseProgress()
424-
} else {
425-
rec, err1 := s.recordBuildHistory(ctx, id, req, exp, j)
426-
if err != nil {
427-
defer j.CloseProgress()
428-
return nil, err1
429-
}
430-
defer func() {
431-
err = rec(resProv, descref, err)
432-
}()
433424
}
434425

435426
set, err := entitlements.WhiteList(ent, supportedEntitlements(s.entitlements))
@@ -445,14 +436,32 @@ func (s *Solver) Solve(ctx context.Context, id string, sessionID string, req fro
445436
j.SessionID = sessionID
446437

447438
br := s.bridge(j)
439+
var fwd gateway.LLBBridgeForwarder
448440
if s.gatewayForwarder != nil && req.Definition == nil && req.Frontend == "" {
449-
fwd := gateway.NewBridgeForwarder(ctx, br, s.workerController, req.FrontendInputs, sessionID, s.sm)
441+
fwd = gateway.NewBridgeForwarder(ctx, br, s.workerController, req.FrontendInputs, sessionID, s.sm)
450442
defer fwd.Discard()
443+
// Register build before calling s.recordBuildHistory, because
444+
// s.recordBuildHistory can block for several seconds on
445+
// LeaseManager calls, and there is a fixed 3s timeout in
446+
// GatewayForwarder on build registration.
451447
if err := s.gatewayForwarder.RegisterBuild(ctx, id, fwd); err != nil {
452448
return nil, err
453449
}
454450
defer s.gatewayForwarder.UnregisterBuild(ctx, id)
451+
}
452+
453+
if !internal {
454+
rec, err1 := s.recordBuildHistory(ctx, id, req, exp, j)
455+
if err1 != nil {
456+
defer j.CloseProgress()
457+
return nil, err1
458+
}
459+
defer func() {
460+
err = rec(resProv, descref, err)
461+
}()
462+
}
455463

464+
if fwd != nil {
456465
var err error
457466
select {
458467
case <-fwd.Done():

0 commit comments

Comments
 (0)