@@ -421,15 +421,6 @@ func (s *Solver) Solve(ctx context.Context, id string, sessionID string, req fro
421
421
422
422
if internal {
423
423
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
- }()
433
424
}
434
425
435
426
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
445
436
j .SessionID = sessionID
446
437
447
438
br := s .bridge (j )
439
+ var fwd gateway.LLBBridgeForwarder
448
440
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 )
450
442
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.
451
447
if err := s .gatewayForwarder .RegisterBuild (ctx , id , fwd ); err != nil {
452
448
return nil , err
453
449
}
454
450
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
+ }
455
463
464
+ if fwd != nil {
456
465
var err error
457
466
select {
458
467
case <- fwd .Done ():
0 commit comments