requires that client.stateMu is held
( ctx context.Context, client *daggerClient, opts *ClientInitOpts, )
| 528 | |
| 529 | // requires that client.stateMu is held |
| 530 | func (srv *Server) initializeDaggerClient( |
| 531 | ctx context.Context, |
| 532 | client *daggerClient, |
| 533 | opts *ClientInitOpts, |
| 534 | ) error { |
| 535 | slog := slog.With( |
| 536 | "isMainClient", client.clientID == client.daggerSession.mainClientCallerID, |
| 537 | "sessionID", client.daggerSession.sessionID, |
| 538 | "clientID", client.clientID, |
| 539 | "mainClientID", client.daggerSession.mainClientCallerID, |
| 540 | ) |
| 541 | slog.Info("initializing new client") |
| 542 | var callerG singleflight.Group[string, engineutil.SessionCaller] |
| 543 | client.getClientCaller = func(ctx context.Context, id string) (engineutil.SessionCaller, error) { |
| 544 | ctx, cancel := context.WithTimeout(context.WithoutCancel(ctx), 10*time.Second) |
| 545 | defer cancel() |
| 546 | caller, _, err := callerG.Do(ctx, id, func(ctx context.Context) (engineutil.SessionCaller, error) { |
| 547 | return client.daggerSession.attachables.Wait(ctx, id) |
| 548 | }) |
| 549 | return caller, err |
| 550 | } |
| 551 | client.hostServiceProxyClientID = opts.HostServiceProxyClientID |
| 552 | client.getHostServiceCaller = func(ctx context.Context, id string) (engineutil.SessionCaller, error) { |
| 553 | return client.resolveHostServiceCaller(ctx, id) |
| 554 | } |
| 555 | |
| 556 | var err error |
| 557 | client.dialer = &net.Dialer{ |
| 558 | Resolver: &net.Resolver{ |
| 559 | PreferGo: true, |
| 560 | Dial: func(ctx context.Context, network, address string) (net.Conn, error) { |
| 561 | if len(srv.dns.Nameservers) == 0 { |
| 562 | return nil, errors.New("no nameservers configured") |
| 563 | } |
| 564 | |
| 565 | var errs []error |
| 566 | for _, ns := range srv.dns.Nameservers { |
| 567 | conn, err := client.dialer.DialContext(ctx, network, net.JoinHostPort(ns, "53")) |
| 568 | if err != nil { |
| 569 | errs = append(errs, err) |
| 570 | continue |
| 571 | } |
| 572 | |
| 573 | return conn, nil |
| 574 | } |
| 575 | |
| 576 | return nil, errors.Join(errs...) |
| 577 | }, |
| 578 | }, |
| 579 | } |
| 580 | |
| 581 | engineUtilOpts := *srv.engineUtilOpts |
| 582 | engineUtilOpts.Dialer = client.dialer |
| 583 | engineUtilOpts.GetClientCaller = client.getClientCaller |
| 584 | engineUtilOpts.GetHostServiceCaller = client.getHostServiceCaller |
| 585 | engineUtilOpts.GetMainClientCaller = client.getMainClientCaller |
| 586 | engineUtilOpts.GetRegistryResolver = srv.RegistryResolver |
| 587 | engineUtilOpts.Interactive = client.daggerSession.interactive |
no test coverage detected