From e5549057d695c2a47b5a433210bf16d8ffa33804 Mon Sep 17 00:00:00 2001 From: wanyaoqi <18528551+wanyaoqi@users.noreply.github.com> Date: Tue, 7 Nov 2023 07:22:26 +0800 Subject: [PATCH] fix(host-deployer): detach nbd device do not block main thread (#18578) --- pkg/hostman/diskutils/nbd/nbdman.go | 4 ++- .../hostdeployer/deployserver/deployserver.go | 28 +++++++++---------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/pkg/hostman/diskutils/nbd/nbdman.go b/pkg/hostman/diskutils/nbd/nbdman.go index e6a6afbf72..d00005e13b 100644 --- a/pkg/hostman/diskutils/nbd/nbdman.go +++ b/pkg/hostman/diskutils/nbd/nbdman.go @@ -49,13 +49,13 @@ func NewNBDManager() (*SNBDManager, error) { ret.nbdDevs = make(map[string]bool, 0) ret.nbdLock = new(sync.Mutex) - ret.cleanupNbdDevices() if err := ret.reloadNbdDevices(); err != nil { return ret, errors.Wrap(err, "reloadNbdDevices") } if err := ret.findNbdDevices(); err != nil { return ret, errors.Wrap(err, "findNbdDevices") } + go ret.cleanupNbdDevices() return ret, nil } @@ -120,6 +120,8 @@ func (m *SNBDManager) cleanupNbdDevices() { err := tryDetachNbd(nbddev) if err != nil { log.Errorf("tryDetachNbd fail %s", err) + } else { + m.ReleaseNbddev(nbddev) } } i++ diff --git a/pkg/hostman/hostdeployer/deployserver/deployserver.go b/pkg/hostman/hostdeployer/deployserver/deployserver.go index f622c9b505..815a897a9f 100644 --- a/pkg/hostman/hostdeployer/deployserver/deployserver.go +++ b/pkg/hostman/hostdeployer/deployserver/deployserver.go @@ -440,6 +440,20 @@ func (s *SDeployService) checkLvmRemote() error { } func (s *SDeployService) InitService() { + s.SignalTrap(func() { + for { + if len(connectedEsxiDisks) > 0 { + log.Warningf("Waiting for esxi disks %d disconnect !!!", len(connectedEsxiDisks)) + time.Sleep(time.Second * 1) + } else { + if s.grpcServer != nil { + s.grpcServer.Stop() + } else { + os.Exit(0) + } + } + } + }) log.Infof("exec socket path: %s", DeployOption.ExecutorSocketPath) if DeployOption.EnableRemoteExecutor { execlient.Init(DeployOption.ExecutorSocketPath) @@ -462,20 +476,6 @@ func (s *SDeployService) InitService() { if len(DeployOption.DeployServerSocketPath) == 0 { log.Fatalf("missing deploy server socket path") } - s.SignalTrap(func() { - for { - if len(connectedEsxiDisks) > 0 { - log.Warningf("Waiting for esxi disks %d disconnect !!!", len(connectedEsxiDisks)) - time.Sleep(time.Second * 1) - } else { - if s.grpcServer != nil { - s.grpcServer.Stop() - } else { - os.Exit(0) - } - } - } - }) } func (s *SDeployService) OnExitService() {}