Skip to content

Commit a0b8eed

Browse files
Fix size probe for invalid devices (#931)
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
1 parent 6643fbd commit a0b8eed

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

pkg/device/probe_linux.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package device
2020

2121
import (
2222
"errors"
23+
"fmt"
2324
"os"
2425

2526
"github.com/minio/directpv/pkg/sys"
@@ -52,31 +53,31 @@ func newDevice(
5253
}
5354

5455
if device.Size, err = getSize(name); err != nil {
55-
return nil, err
56+
return nil, fmt.Errorf("unable to get size; device=%v; err=%w", name, err)
5657
}
5758

5859
device.Hidden = getHidden(name)
5960

6061
if device.Removable, err = getRemovable(name); err != nil {
61-
return nil, err
62+
return nil, fmt.Errorf("unable to get removable flag; device=%v; err=%w", name, err)
6263
}
6364

6465
if device.ReadOnly, err = getReadOnly(name); err != nil {
65-
return nil, err
66+
return nil, fmt.Errorf("unable to get read-only flag; device=%v; err=%w", name, err)
6667
}
6768

6869
if device.Holders, err = getHolders(name); err != nil {
69-
return nil, err
70+
return nil, fmt.Errorf("unable to get holders; device=%v; %w", name, err)
7071
}
7172

7273
partitions, err := getPartitions(name)
7374
if err != nil {
74-
return nil, err
75+
return nil, fmt.Errorf("unable to get partition info; device=%v; err=%w", name, err)
7576
}
7677
device.Partitioned = len(partitions) != 0
7778

7879
if device.DMName, err = getDMName(name); err != nil {
79-
return nil, err
80+
return nil, fmt.Errorf("unable to get DM name; device=%v; err=%w", name, err)
8081
}
8182

8283
return device, nil
@@ -85,22 +86,22 @@ func newDevice(
8586
func probe() (devices []Device, err error) {
8687
deviceMap, udevDataMap, err := probeFromUdev()
8788
if err != nil {
88-
return nil, err
89+
return nil, fmt.Errorf("unable to probe from udev; %w", err)
8990
}
9091

9192
_, deviceMountMap, majorMinorMap, _, err := sys.GetMounts(true)
9293
if err != nil {
93-
return nil, err
94+
return nil, fmt.Errorf("unable to get mounts; %w", err)
9495
}
9596

9697
cdroms, err := getCDROMs()
9798
if err != nil {
98-
return nil, err
99+
return nil, fmt.Errorf("unable to get CDROM information; %w", err)
99100
}
100101

101102
swaps, err := getSwaps()
102103
if err != nil {
103-
return nil, err
104+
return nil, fmt.Errorf("unable to get swap information; %w", err)
104105
}
105106

106107
for name, udevData := range udevDataMap {
@@ -117,17 +118,17 @@ func probe() (devices []Device, err error) {
117118
func probeDevices(majorMinor ...string) (devices []Device, err error) {
118119
_, deviceMountMap, majorMinorMap, _, err := sys.GetMounts(true)
119120
if err != nil {
120-
return nil, err
121+
return nil, fmt.Errorf("unable to get mounts; %w", err)
121122
}
122123

123124
cdroms, err := getCDROMs()
124125
if err != nil {
125-
return nil, err
126+
return nil, fmt.Errorf("unable to get CDROM information; %w", err)
126127
}
127128

128129
swaps, err := getSwaps()
129130
if err != nil {
130-
return nil, err
131+
return nil, fmt.Errorf("unable to get swap information; %w", err)
131132
}
132133

133134
for i := range majorMinor {
@@ -137,12 +138,12 @@ func probeDevices(majorMinor ...string) (devices []Device, err error) {
137138
continue
138139
}
139140

140-
return nil, err
141+
return nil, fmt.Errorf("unable to read udev data; majorminor=%v; err=%w", majorMinor[i], err)
141142
}
142143

143144
name, err := getDeviceName(majorMinor[i])
144145
if err != nil {
145-
return nil, err
146+
return nil, fmt.Errorf("unable to get device name; majorminor=%v; err=%w", majorMinor[i], err)
146147
}
147148

148149
device, err := newDevice(deviceMountMap, majorMinorMap, cdroms, swaps, name, majorMinor[i], udevData)

pkg/device/sysfs_linux.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func getReadOnly(name string) (bool, error) {
7373

7474
func getSize(name string) (uint64, error) {
7575
s, err := readFirstLine("/sys/class/block/" + name + "/size")
76-
if err != nil {
76+
if err != nil || s == "" {
7777
return 0, err
7878
}
7979
ui64, err := strconv.ParseUint(s, 10, 64)

0 commit comments

Comments
 (0)