You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
kubevirt-csi node: NFS publish and unpublish can still block on a dead server #4814
The kubevirt-csi node plugin can still get stuck on a dead NFS server in a few places after the soft temp mount fix. That fix is #4791. It mounts the temp NFS root soft and allows one publish per target path at a time. The guard keeps each case below to one stuck call per target, but the call never ends.
A publish whose target path is already hard-mounted from the dead server blocks for good in the IsLikelyNotMountPoint check at the start of NodePublishVolume.
Unpublish goes to the upstream NodeService method, which does not look at the guard. It can run against a target that a stuck publish still holds.
Over NFSv4 a soft RPC fails only once the TCP connection is declared dead. If the connection stays up while the NFS service hangs, the temp mount's RPCs do not time out.
The Mount call from mount-utils runs mount with no deadline.
Moving old files into /data checks the destination and then renames. An entry that appears in /data between the two is replaced by the rename. As far as I know the NFS client has no RENAME_NOREPLACE, so there is no simple fix.
All of it is in packages/apps/kubernetes/images/kubevirt-csi-driver/node.go.
The kubevirt-csi node plugin can still get stuck on a dead NFS server in a few places after the soft temp mount fix. That fix is #4791. It mounts the temp NFS root soft and allows one publish per target path at a time. The guard keeps each case below to one stuck call per target, but the call never ends.
IsLikelyNotMountPointcheck at the start ofNodePublishVolume.NodeServicemethod, which does not look at the guard. It can run against a target that a stuck publish still holds.Mountcall from mount-utils runsmountwith no deadline.umount.nfscan stay stuck inumount2(), and astatmay run beforeumount2. Both come from the follow-up comment on kubevirt-csi node: NFS publish hangs on the temp mount when the NFS server stops answering #4581. The soft temp mount may end them sooner, but I have not verified that./datachecks the destination and then renames. An entry that appears in/databetween the two is replaced by the rename. As far as I know the NFS client has noRENAME_NOREPLACE, so there is no simple fix.All of it is in
packages/apps/kubernetes/images/kubevirt-csi-driver/node.go.