[client] Keep the device name on the context used to authenticate

Moving authentication onto the start context dropped the device name with it:
registration happens during login and reads the name from the context, so every
client registered under the host's hostname instead of its configured name. A
run of 100 embedded clients produced 191 peers all sharing one name.

Carry the value onto the start context explicitly so the deadline and the
device name travel together.
This commit is contained in:
mlsmaycon
2026-09-04 04:27:56 +02:00
parent 231054c172
commit 3823bf5be9
+7 -2
View File
@@ -305,13 +305,18 @@ func (c *Client) Start(startCtx context.Context) error {
// never completes a stream leaves them retrying with no deadline of their
// own, so a caller's start timeout has to reach them. Neither outlives
// startup: authClient is closed below.
authClient, err := auth.NewAuth(startCtx, c.config.PrivateKey, c.config.ManagementURL, c.config)
// Carry the device name onto the start context: registration happens during
// login and reads it from there, so authenticating on a context without it
// would register every client under the host's hostname instead.
authCtx := context.WithValue(startCtx, system.DeviceNameCtxKey, c.deviceName) //nolint:staticcheck
authClient, err := auth.NewAuth(authCtx, c.config.PrivateKey, c.config.ManagementURL, c.config)
if err != nil {
return fmt.Errorf("create auth client: %w", err)
}
defer authClient.Close()
if err, _ := authClient.Login(startCtx, c.setupKey, c.jwtToken); err != nil {
if err, _ := authClient.Login(authCtx, c.setupKey, c.jwtToken); err != nil {
return fmt.Errorf("login: %w", err)
}
client := internal.NewConnectClient(ctx, c.config, c.recorder)