-
Notifications
You must be signed in to change notification settings - Fork 38.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GetMountRefs fixed to handle corrupted mounts by treating it like an unmounted volume #74625
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -496,10 +496,14 @@ func getAllParentLinks(path string) ([]string, error) { | |
|
||
// GetMountRefs : empty implementation here since there is no place to query all mount points on Windows | ||
func (mounter *Mounter) GetMountRefs(pathname string) ([]string, error) { | ||
if _, err := os.Stat(normalizeWindowsPath(pathname)); os.IsNotExist(err) { | ||
pathExists, pathErr := PathExists(normalizeWindowsPath(pathname)) | ||
// TODO(#75012): Need a Windows specific IsCorruptedMnt function that checks against whatever errno's | ||
// Windows emits when we try to Stat a corrupted mount | ||
// https://golang.org/pkg/syscall/?GOOS=windows&GOARCH=amd64#Errno | ||
if !pathExists { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. how about checking IsCorruptedMnt? This function should work for both windows and linux? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. technically it "works" as in it compiles, but I think it is checking the incorrect error codes. Since there is no |
||
return []string{}, nil | ||
} else if err != nil { | ||
return nil, err | ||
} else if pathErr != nil { | ||
return nil, fmt.Errorf("error checking path %s: %v", normalizeWindowsPath(pathname), pathErr) | ||
} | ||
return []string{pathname}, nil | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
does windows also need fixing since the original change also added a stat check for mount_windows? cc @jingxu97 @andyzhangx
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks like PathExists in the mount_helper does not consider windows OS. We could add a windows version of PathExists or add windows handling inside of PathExists?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure which windows errors are because of corrupted mount that correspond with unix errors
ENOTCONN
,ESTALE
,EIO
.Windows error list here: https://github.com/golang/sys/blob/master/windows/types_windows.go#L9
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note that pkg syscall and sys are different
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
right, pkg
sys
seems to imply that the samesyscall.Errno
codes mean different things in windows vs. unix.And
IsCorruptedMnt
seems to be using the unix interpretation of the error codes so I would think we need a Windows specific version ofPathExists
andIsCorruptedMnt
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
whether
PathExists
works on windows os depends on whetherIsCorruptedMnt
works on windows, it at least could compile on windows. Since the original issue is related to XFS mount issue, and windows does not support that, I think use same fix on windows would be ok.@davidz627 could you do same fix on
windows_mount.go
?BTW, as I implemented
GetMountRefs
func in the beginning, you could see it's not reliable since there is no place to query all mount points on Windows, different from Linux.kubernetes/pkg/util/mount/mount_windows.go
Lines 497 to 505 in 4fa5ece
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i've updated the windows
GetMountRefs
as well. I believe the errcodes are different for windows though. Therefore I have removed theIsCorruptedMnt
check as I believe it would be just checking "random" error codes and may mask real issues.Since XFS mount issue doesn't exist on windows anyway this is not a necessary addition.