From 004499a89359a45078c7397ee1eeb74508c71fed 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..41859125 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; device=%v; err=%w", 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; device=%v; err=%w", name, err) } if device.ReadOnly, err = getReadOnly(name); err != nil { - return nil, err + return nil, fmt.Errorf("unable to get read-only info; device=%v; err=%w", name, err) } if device.Holders, err = getHolders(name); err != nil { - return nil, err + return nil, fmt.Errorf("unable to get holders; device=%v; %w", name, err) } partitions, err := getPartitions(name) if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get partition info; device=%v; err=%w", 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; device=%v; err=%w", 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; %w", err) } _, deviceMountMap, majorMinorMap, _, err := sys.GetMounts(true) if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get mounts; %w", err) } cdroms, err := getCDROMs() if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get CDROM information; %w", err) } swaps, err := getSwaps() if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get SWAP information; %w", 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; %w", err) } cdroms, err := getCDROMs() if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get CDROM information; %w", err) } swaps, err := getSwaps() if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get SWAP information; %w", 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; majorminor=%v; err=%w", majorMinor[i], err) } name, err := getDeviceName(majorMinor[i]) if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get device name; majorminor=%v; err=%w", 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)