@@ -122,16 +122,8 @@ func (c *filesystemCollector) processStat(labels filesystemLabels) filesystemSta
122
122
123
123
buf := new (unix.Statfs_t )
124
124
err := unix .Statfs (rootfsFilePath (labels .mountPoint ), buf )
125
- stuckMountsMtx .Lock ()
126
125
close (success )
127
126
128
- // If the mount has been marked as stuck, unmark it and log it's recovery.
129
- if _ , ok := stuckMounts [labels .mountPoint ]; ok {
130
- level .Debug (c .logger ).Log ("msg" , "Mount point has recovered, monitoring will resume" , "mountpoint" , labels .mountPoint )
131
- delete (stuckMounts , labels .mountPoint )
132
- }
133
- stuckMountsMtx .Unlock ()
134
-
135
127
if err != nil {
136
128
level .Debug (c .logger ).Log ("msg" , "Error on statfs() system call" , "rootfs" , rootfsFilePath (labels .mountPoint ), "err" , err )
137
129
return filesystemStats {
@@ -161,17 +153,29 @@ func stuckMountWatcher(mountPoint string, success chan struct{}, logger log.Logg
161
153
select {
162
154
case <- success :
163
155
// Success
156
+ // If the mount has been marked as stuck, unmark it and log it's recovery.
157
+ stuckMountsMtx .Lock ()
158
+ defer stuckMountsMtx .Unlock ()
159
+ if _ , ok := stuckMounts [mountPoint ]; ok {
160
+ level .Debug (logger ).Log ("msg" , "Mount point has recovered, monitoring will resume" , "mountpoint" , mountPoint )
161
+ delete (stuckMounts , mountPoint )
162
+ }
164
163
case <- mountCheckTimer .C :
165
164
// Timed out, mark mount as stuck
166
165
stuckMountsMtx .Lock ()
166
+ defer stuckMountsMtx .Unlock ()
167
167
select {
168
168
case <- success :
169
169
// Success came in just after the timeout was reached, don't label the mount as stuck
170
+ // If the mount has been marked as stuck, unmark it and log it's recovery.
171
+ if _ , ok := stuckMounts [mountPoint ]; ok {
172
+ level .Debug (logger ).Log ("msg" , "Mount point has recovered, monitoring will resume" , "mountpoint" , mountPoint )
173
+ delete (stuckMounts , mountPoint )
174
+ }
170
175
default :
171
176
level .Debug (logger ).Log ("msg" , "Mount point timed out, it is being labeled as stuck and will not be monitored" , "mountpoint" , mountPoint )
172
177
stuckMounts [mountPoint ] = struct {}{}
173
178
}
174
- stuckMountsMtx .Unlock ()
175
179
}
176
180
}
177
181
0 commit comments