Skip to content

Commit 770c9d1

Browse files
aaronlehmanntonistiigi
authored andcommitted
Register builds before recording build history
Recording build history calls into LeaseManager, which can block for several seconds. This can trigger a 3 second timeout in GatewayForwarder while it waits for a build ID to be registered. Longer-term, we should figure out the performance issues in the containerd metadata DB, but this addresses the immediate problems of timeouts that manifest in these error messages: forwarding Ping: no such job 93oss3bmbagcpq8yokla3921z Signed-off-by: Aaron Lehmann <[email protected]> (cherry picked from commit 396b276)
1 parent 2f79b14 commit 770c9d1

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
@@ -423,15 +423,6 @@ func (s *Solver) Solve(ctx context.Context, id string, sessionID string, req fro
423423

424424
if internal {
425425
defer j.CloseProgress()
426-
} else {
427-
rec, err1 := s.recordBuildHistory(ctx, id, req, exp, j)
428-
if err != nil {
429-
defer j.CloseProgress()
430-
return nil, err1
431-
}
432-
defer func() {
433-
err = rec(resProv, descref, err)
434-
}()
435426
}
436427

437428
set, err := entitlements.WhiteList(ent, supportedEntitlements(s.entitlements))
@@ -447,14 +438,32 @@ func (s *Solver) Solve(ctx context.Context, id string, sessionID string, req fro
447438
j.SessionID = sessionID
448439

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

466+
if fwd != nil {
458467
var err error
459468
select {
460469
case <-fwd.Done():

0 commit comments

Comments
 (0)