Skip to content

Commit 8906c76

Browse files
davidcheng0922derekbit
authored andcommitted
fix(node_controller): check node responsibility before deletion
Signed-off-by: David Cheng <davidcheng0922@gmail.com>
1 parent 83e35de commit 8906c76

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

controller/monitor/disk_monitor.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,11 @@ func (m *DiskMonitor) run(value interface{}) error {
141141
return errors.Wrapf(err, "failed to get longhorn node %v", m.nodeName)
142142
}
143143

144+
if node.DeletionTimestamp != nil {
145+
logrus.Infof("Skipping disk monitoring for node %v: node is being deleted", m.nodeName)
146+
return nil
147+
}
148+
144149
collectedData := m.collectDiskData(node)
145150
if !reflect.DeepEqual(m.collectedData, collectedData) {
146151
func() {

controller/node_controller.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1585,20 +1585,22 @@ func (nc *NodeController) alignDiskSpecAndStatus(node *longhorn.Node) {
15851585
continue
15861586
}
15871587

1588-
if err := nc.deleteDisk(diskStatus.Type, diskName, diskStatus.DiskUUID, diskStatus.DiskPath, string(diskStatus.DiskDriver)); err != nil {
1588+
if err := nc.deleteDisk(node.Name, diskStatus.Type, diskName, diskStatus.DiskUUID, diskStatus.DiskPath, string(diskStatus.DiskDriver)); err != nil {
15891589
nc.logger.WithError(err).Warnf("Failed to delete disk %v", diskName)
15901590
}
15911591
delete(node.Status.DiskStatus, diskName)
15921592
}
15931593
}
15941594
}
15951595

1596-
func (nc *NodeController) deleteDisk(diskType longhorn.DiskType, diskName, diskUUID, diskPath, diskDriver string) error {
1596+
func (nc *NodeController) deleteDisk(nodeName string, diskType longhorn.DiskType, diskName, diskUUID, diskPath, diskDriver string) error {
15971597
nc.logger.Infof("Deleting disk %v with diskUUID %v", diskName, diskUUID)
15981598

15991599
dataEngine := util.GetDataEngineForDiskType(diskType)
16001600

1601-
im, err := nc.ds.GetRunningInstanceManagerByNodeRO(nc.controllerID, dataEngine)
1601+
// use nodeName instead of nc.controllerID to get the instance manager
1602+
// allow to delete the non-own node disks
1603+
im, err := nc.ds.GetRunningInstanceManagerByNodeRO(nodeName, dataEngine)
16021604
if err != nil {
16031605
return errors.Wrapf(err, "failed to get running instance manager for data engine %v", dataEngine)
16041606
}
@@ -1613,6 +1615,7 @@ func (nc *NodeController) deleteDisk(diskType longhorn.DiskType, diskName, diskU
16131615
return errors.Wrapf(err, "failed to delete disk %v", diskName)
16141616
}
16151617

1618+
nc.logger.Infof("Deleted disk %v with diskUUID %v", diskName, diskUUID)
16161619
return nil
16171620
}
16181621

@@ -1649,7 +1652,7 @@ func (nc *NodeController) cleanupDisksBeforeNodeDeletion(node *longhorn.Node) er
16491652
// Note: Use diskName instead of diskStatus.Name since they are different:
16501653
// diskName: default-disk-block-1
16511654
// diskStatus.Name: default-disk-block-1n1
1652-
if err := nc.deleteDisk(diskStatus.Type, diskName, diskStatus.DiskUUID, diskStatus.DiskPath, string(diskStatus.DiskDriver)); err != nil {
1655+
if err := nc.deleteDisk(node.Name, diskStatus.Type, diskName, diskStatus.DiskUUID, diskStatus.DiskPath, string(diskStatus.DiskDriver)); err != nil {
16531656
nc.logger.WithError(err).Errorf("Failed to delete SPDK disk %v during node cleanup", diskStatus.DiskName)
16541657
errs.Append("errors", errors.Wrapf(err, "failed to delete SPDK disk %v during node cleanup", diskStatus.DiskName))
16551658
continue

0 commit comments

Comments
 (0)