From afaec3d5b768ef60dab077ee8a25e28b039baf5e Mon Sep 17 00:00:00 2001 From: Vicente Cheng Date: Thu, 9 May 2024 11:27:00 +0800 Subject: [PATCH] scanner: simplify the complex Method Signed-off-by: Vicente Cheng --- pkg/controller/blockdevice/scanner.go | 63 ++++++++++++++++----------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/pkg/controller/blockdevice/scanner.go b/pkg/controller/blockdevice/scanner.go index ede81fbd5..e8e56ded9 100644 --- a/pkg/controller/blockdevice/scanner.go +++ b/pkg/controller/blockdevice/scanner.go @@ -123,6 +123,40 @@ func (s *Scanner) collectAllDevices() []*deviceWithAutoProvision { return allDevices } +func (s *Scanner) handleExistingDev(oldBd *diskv1.BlockDevice, newBd *diskv1.BlockDevice, autoProvisioned bool) { + if isDevPathChanged(oldBd, newBd) { + logrus.Debugf("Enqueue block device %s for device path change", newBd.Name) + s.Blockdevices.Enqueue(s.Namespace, newBd.Name) + } else if isDevAlreadyProvisioned(newBd) { + logrus.Debugf("Skip the provisioned device: %s", newBd.Name) + } else if s.NeedsAutoProvision(oldBd, autoProvisioned) { + logrus.Debugf("Enqueue block device %s for auto-provisioning", newBd.Name) + s.Blockdevices.Enqueue(s.Namespace, newBd.Name) + } else { + logrus.Debugf("Skip updating device %s", newBd.Name) + } +} + +func (s *Scanner) deactivateBlockDevices(oldBds map[string]*diskv1.BlockDevice) error { + for _, oldBd := range oldBds { + if oldBd.Status.State == diskv1.BlockDeviceInactive { + logrus.Debugf("The device %s is already inactive, continue.", oldBd.Name) + continue + } + logrus.Debugf("Change the device %s to inactive.", oldBd.Name) + newBd := oldBd.DeepCopy() + newBd.Status.State = diskv1.BlockDeviceInactive + if !reflect.DeepEqual(oldBd, newBd) { + logrus.Debugf("Update block device %s for new formatting and mount state", oldBd.Name) + if _, err := s.Blockdevices.Update(newBd); err != nil { + logrus.Errorf("Update device %s status error", oldBd.Name) + return err + } + } + } + return nil +} + // scanBlockDevicesOnNode scans block devices on the node, and it will either create or update them. func (s *Scanner) scanBlockDevicesOnNode() error { logrus.Debugf("Scan block devices of node: %s", s.NodeName) @@ -144,17 +178,7 @@ func (s *Scanner) scanBlockDevicesOnNode() error { autoProvisioned := device.AutoProvisioned logrus.Debugf("Processing block device %s with wwn: %s", bd.Name, bd.Status.DeviceStatus.Details.WWN) if oldBd, ok := oldBds[bd.Name]; ok { - if isDevPathChanged(oldBd, bd) { - logrus.Debugf("Enqueue block device %s for device path change", bd.Name) - s.Blockdevices.Enqueue(s.Namespace, bd.Name) - } else if isDevAlreadyProvisioned(bd) { - logrus.Debugf("Skip the provisioned device: %s", bd.Name) - } else if s.NeedsAutoProvision(oldBd, autoProvisioned) { - logrus.Debugf("Enqueue block device %s for auto-provisioning", bd.Name) - s.Blockdevices.Enqueue(s.Namespace, bd.Name) - } else { - logrus.Debugf("Skip updating device %s", bd.Name) - } + s.handleExistingDev(oldBd, bd, autoProvisioned) // only first time to update the cache if !CacheDiskTags.Initialized() && oldBd.Spec.Tags != nil && len(oldBd.Spec.Tags) > 0 { CacheDiskTags.UpdateDiskTags(oldBd.Name, oldBd.Spec.Tags) @@ -185,21 +209,8 @@ func (s *Scanner) scanBlockDevicesOnNode() error { // We do not remove the block device that maybe just temporily not available. // Set it to inactive and give the chance to recover. - for _, oldBd := range oldBds { - if oldBd.Status.State == diskv1.BlockDeviceInactive { - logrus.Debugf("The device %s is already inactive, continue.", oldBd.Name) - continue - } - logrus.Debugf("Change the device %s to inactive.", oldBd.Name) - newBd := oldBd.DeepCopy() - newBd.Status.State = diskv1.BlockDeviceInactive - if !reflect.DeepEqual(oldBd, newBd) { - logrus.Debugf("Update block device %s for new formatting and mount state", oldBd.Name) - if _, err := s.Blockdevices.Update(newBd); err != nil { - logrus.Errorf("Update device %s status error", oldBd.Name) - return err - } - } + if err := s.deactivateBlockDevices(oldBds); err != nil { + return err } return nil }