Skip to content

Commit 68b0e29

Browse files
author
Mehrdad Biukian Naeini
committed
fix: handle 'delayed' state in sync_completed parsing
Add 'delayed' to the special values in sync_completed parsing (similar to 'none'). When multiple MD RAID arrays share physical devices and a check/resync is triggered for more than one, the kernel delays the action on all but one device, so sync_completed contains 'delayed' instead of 'none' or 'N / M', which previously caused 'error parsing mdraids: expected integer'. Adds a regression fixture (testdata/fixtures/sys/issue770) and TestMdraidDelayedSyncCompleted covering the delayed state. Fixes #786 Signed-off-by: Mehrdad Biukian Naeini <mehrdad.biu@mtnirancell.ir>
1 parent acd9909 commit 68b0e29

3 files changed

Lines changed: 113 additions & 1 deletion

File tree

sysfs/mdraid.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ func (fs FS) Mdraids() ([]Mdraid, error) {
166166
}
167167

168168
if val, err := util.SysReadFile(filepath.Join(path, "sync_completed")); err == nil {
169-
if val != "none" {
169+
if val != "none" && val != "delayed" {
170170
var a, b uint64
171171

172172
// File contains two values representing the fraction of number of completed

sysfs/mdraid_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,26 @@ func TestMdraidStats(t *testing.T) {
155155
t.Fatalf("unexpected Mdraid (-want +got):\n%s", diff)
156156
}
157157
}
158+
func TestMdraidDelayedSyncCompleted(t *testing.T) {
159+
fs, err := NewFS("testdata/fixtures/sys/issue770")
160+
if err != nil {
161+
t.Fatal(err)
162+
}
163+
164+
mdraids, err := fs.Mdraids()
165+
if err != nil {
166+
t.Fatal(err)
167+
}
168+
169+
if len(mdraids) != 1 {
170+
t.Fatalf("expected 1 mdraid, got %d", len(mdraids))
171+
}
172+
173+
md := mdraids[0]
174+
if md.SyncCompleted != 0 {
175+
t.Fatalf("expected SyncCompleted=0 for 'delayed' state, got %f", md.SyncCompleted)
176+
}
177+
if md.SyncAction != "resync" {
178+
t.Fatalf("expected SyncAction='resync', got '%s'", md.SyncAction)
179+
}
180+
}

testdata/fixtures.ttar

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19494,6 +19494,95 @@ Lines: 1
1949419494
extent_alloc 2 0 0 0
1949519495
Mode: 644
1949619496
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19497+
Directory: fixtures/sys/issue770
19498+
Mode: 755
19499+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19500+
Directory: fixtures/sys/issue770/block
19501+
Mode: 755
19502+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19503+
Directory: fixtures/sys/issue770/block/md127
19504+
Mode: 755
19505+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19506+
Directory: fixtures/sys/issue770/block/md127/md
19507+
Mode: 755
19508+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19509+
Path: fixtures/sys/issue770/block/md127/md/array_state
19510+
Lines: 1
19511+
clean
19512+
Mode: 644
19513+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19514+
Path: fixtures/sys/issue770/block/md127/md/chunk_size
19515+
Lines: 1
19516+
524288
19517+
Mode: 644
19518+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19519+
Path: fixtures/sys/issue770/block/md127/md/degraded
19520+
Lines: 1
19521+
0
19522+
Mode: 644
19523+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19524+
Directory: fixtures/sys/issue770/block/md127/md/dev-sdaa
19525+
Mode: 755
19526+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19527+
Path: fixtures/sys/issue770/block/md127/md/dev-sdaa/state
19528+
Lines: 1
19529+
spare
19530+
Mode: 644
19531+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19532+
Directory: fixtures/sys/issue770/block/md127/md/dev-sdn
19533+
Mode: 755
19534+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19535+
Path: fixtures/sys/issue770/block/md127/md/dev-sdn/state
19536+
Lines: 1
19537+
in_sync
19538+
Mode: 644
19539+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19540+
Directory: fixtures/sys/issue770/block/md127/md/dev-sdo
19541+
Mode: 755
19542+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19543+
Path: fixtures/sys/issue770/block/md127/md/dev-sdo/state
19544+
Lines: 1
19545+
in_sync
19546+
Mode: 644
19547+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19548+
Directory: fixtures/sys/issue770/block/md127/md/dev-sdp
19549+
Mode: 755
19550+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19551+
Path: fixtures/sys/issue770/block/md127/md/dev-sdp/state
19552+
Lines: 1
19553+
faulty
19554+
Mode: 644
19555+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19556+
Path: fixtures/sys/issue770/block/md127/md/level
19557+
Lines: 1
19558+
raid1
19559+
Mode: 644
19560+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19561+
Path: fixtures/sys/issue770/block/md127/md/metadata_version
19562+
Lines: 1
19563+
1.2
19564+
Mode: 644
19565+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19566+
Path: fixtures/sys/issue770/block/md127/md/raid_disks
19567+
Lines: 1
19568+
3
19569+
Mode: 644
19570+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19571+
Path: fixtures/sys/issue770/block/md127/md/sync_action
19572+
Lines: 1
19573+
resync
19574+
Mode: 644
19575+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19576+
Path: fixtures/sys/issue770/block/md127/md/sync_completed
19577+
Lines: 1
19578+
delayed
19579+
Mode: 644
19580+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19581+
Path: fixtures/sys/issue770/block/md127/md/uuid
19582+
Lines: 1
19583+
7615b98d-f2ba-4d99-bee8-6202d8e130b9
19584+
Mode: 644
19585+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1949719586
Directory: fixtures/sys/kernel
1949819587
Mode: 755
1949919588
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

0 commit comments

Comments
 (0)