From e88c1a8f6c005dc39da3543b9e90239129532b51 Mon Sep 17 00:00:00 2001 From: Praveenrajmani Date: Thu, 22 Aug 2024 11:22:21 +0530 Subject: [PATCH] Fix size probe for invalid devices for any invalid (or) detached drives, size probe will fail with the following error ``` strconv.ParseUint: parsing "": invalid syntax ``` which prevents the directpv containers to start bonus: improve probe error messages --- pkg/device/probe_linux.go | 31 ++++++++++++++++--------------- pkg/device/sysfs_linux.go | 2 +- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/pkg/device/probe_linux.go b/pkg/device/probe_linux.go index 720b86e7..d830ae3c 100644 --- a/pkg/device/probe_linux.go +++ b/pkg/device/probe_linux.go @@ -20,6 +20,7 @@ package device import ( "errors" + "fmt" "os" "github.com/minio/directpv/pkg/sys" @@ -52,31 +53,31 @@ func newDevice( } if device.Size, err = getSize(name); err != nil { - return nil, err + return nil, fmt.Errorf("unable to get size for device %v; %v", name, err) } device.Hidden = getHidden(name) if device.Removable, err = getRemovable(name); err != nil { - return nil, err + return nil, fmt.Errorf("unable to get removable info for device %v; %v", name, err) } if device.ReadOnly, err = getReadOnly(name); err != nil { - return nil, err + return nil, fmt.Errorf("unable to get read-only info for device %v; %v", name, err) } if device.Holders, err = getHolders(name); err != nil { - return nil, err + return nil, fmt.Errorf("unable to get holders for device %v; %v", name, err) } partitions, err := getPartitions(name) if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get partition info for device %v; %v", name, err) } device.Partitioned = len(partitions) != 0 if device.DMName, err = getDMName(name); err != nil { - return nil, err + return nil, fmt.Errorf("unable to get dmname info for device %v; %v", name, err) } return device, nil @@ -85,22 +86,22 @@ func newDevice( func probe() (devices []Device, err error) { deviceMap, udevDataMap, err := probeFromUdev() if err != nil { - return nil, err + return nil, fmt.Errorf("unable to probe from udev; %v", err) } _, deviceMountMap, majorMinorMap, _, err := sys.GetMounts(true) if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get mounts; %v", err) } cdroms, err := getCDROMs() if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get CDROM information; %v", err) } swaps, err := getSwaps() if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get SWAP information; %v", err) } for name, udevData := range udevDataMap { @@ -117,17 +118,17 @@ func probe() (devices []Device, err error) { func probeDevices(majorMinor ...string) (devices []Device, err error) { _, deviceMountMap, majorMinorMap, _, err := sys.GetMounts(true) if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get mounts; %v", err) } cdroms, err := getCDROMs() if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get CDROM information; %v", err) } swaps, err := getSwaps() if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get SWAP information; %v", err) } for i := range majorMinor { @@ -137,12 +138,12 @@ func probeDevices(majorMinor ...string) (devices []Device, err error) { continue } - return nil, err + return nil, fmt.Errorf("unable to read udev data for majorminor: %v; %v", majorMinor[i], err) } name, err := getDeviceName(majorMinor[i]) if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get device name for majorminor: %v; %v", majorMinor[i], err) } device, err := newDevice(deviceMountMap, majorMinorMap, cdroms, swaps, name, majorMinor[i], udevData) diff --git a/pkg/device/sysfs_linux.go b/pkg/device/sysfs_linux.go index 0724149a..1c3f90e1 100644 --- a/pkg/device/sysfs_linux.go +++ b/pkg/device/sysfs_linux.go @@ -73,7 +73,7 @@ func getReadOnly(name string) (bool, error) { func getSize(name string) (uint64, error) { s, err := readFirstLine("/sys/class/block/" + name + "/size") - if err != nil { + if err != nil || s == "" { return 0, err } ui64, err := strconv.ParseUint(s, 10, 64)