diff --git a/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go b/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go index f5099106522..98c5576fb0c 100644 --- a/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go +++ b/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go @@ -531,12 +531,14 @@ func (s *Server) Upgrade(ctx context.Context, in *machine.UpgradeRequest) (*mach return nil, fmt.Errorf("error validating installer image %q: %w", in.GetImage(), err) } - if !inMaintenance && s.Controller.Runtime().Config().Machine().Type() != machinetype.TypeWorker && !in.GetForce() { + if !inMaintenance && s.Controller.Runtime().Config().Machine().Type() != machinetype.TypeWorker && !in.GetForce() && !in.GetPreserve() { etcdClient, err := etcd.NewClientFromControlPlaneIPs(ctx, s.Controller.Runtime().State().V1Alpha2().Resources()) if err != nil { return nil, fmt.Errorf("failed to create etcd client: %w", err) } + defer etcdClient.Close() //nolint:errcheck + // acquire the upgrade mutex unlocker, err := tryLockUpgradeMutex(ctx, etcdClient) if err != nil { diff --git a/internal/pkg/etcd/etcd.go b/internal/pkg/etcd/etcd.go index 43dc079b392..0026d9c9734 100644 --- a/internal/pkg/etcd/etcd.go +++ b/internal/pkg/etcd/etcd.go @@ -145,6 +145,8 @@ func validateMemberHealth(ctx context.Context, memberURIs []string) (err error) return fmt.Errorf("failed to create client to member: %w", err) } + defer c.Close() //nolint:errcheck + return c.ValidateQuorum(ctx) }