Skip to content

Commit c988802

Browse files
committed
Add disk online/offline into Stage/Unstage volumes
Disk might be offline when attaching to VMs due to different reasons. Add disk online logic into NodeStageVolume to make sure disk can be accessed. Also add disk offline logic into NodeUnstageVolume to make sure disk is in a clean state when detaching from VM. Disk online/offline API is in csi proxy disk.v1beta2 api group, so updating to use this group
1 parent ac63d0f commit c988802

File tree

8 files changed

+1261
-4
lines changed

8 files changed

+1261
-4
lines changed

deploy/kubernetes/base/node_windows/node.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,5 @@ spec:
8383
hostPath:
8484
path: \var\lib\kubelet\plugins\pd.csi.storage.gke.io
8585
type: DirectoryOrCreate
86+
tolerations:
87+
- operator: Exists

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/golang/protobuf v1.4.2
1010
github.com/google/uuid v1.1.1
1111
github.com/hashicorp/go-multierror v1.0.0 // indirect
12-
github.com/kubernetes-csi/csi-proxy/client v0.2.1
12+
github.com/kubernetes-csi/csi-proxy/client v0.2.2
1313
github.com/kubernetes-csi/csi-test/v3 v3.0.0
1414
github.com/onsi/ginkgo v1.11.0
1515
github.com/onsi/gomega v1.7.1

go.sum

+3
Original file line numberDiff line numberDiff line change
@@ -476,8 +476,11 @@ github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
476476
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
477477
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
478478
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
479+
github.com/kubernetes-csi/csi-proxy v0.2.2 h1:LqablYFEGw7FYBjwoh5TeXFzlcx8C+YQjKfGy6fFWJs=
479480
github.com/kubernetes-csi/csi-proxy/client v0.2.1 h1:n21d2U9HvgQ6jfJayafRv8kXXtLvnRNEqoD0mQNucKc=
480481
github.com/kubernetes-csi/csi-proxy/client v0.2.1/go.mod h1:6ptQQmti5QHwBxSsh8Cy00oGdogj0JXewFnu8FFjgOs=
482+
github.com/kubernetes-csi/csi-proxy/client v0.2.2 h1:VpMddHnbYA1oBeU5nrisdyrpOAAT0HqME7fsTi6BG2w=
483+
github.com/kubernetes-csi/csi-proxy/client v0.2.2/go.mod h1:6ptQQmti5QHwBxSsh8Cy00oGdogj0JXewFnu8FFjgOs=
481484
github.com/kubernetes-csi/csi-test/v3 v3.0.0 h1:mVsfA4J67uNm8fdF/Pr84oMqL92qjIhjWbEUH8zv1fU=
482485
github.com/kubernetes-csi/csi-test/v3 v3.0.0/go.mod h1:VdIKGnDZHOjg4M5yd0OZICtsoEzdn64d0K33N6dm35Q=
483486
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=

pkg/mount-manager/safe-mounter_windows.go

+33-2
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@ import (
2222
"fmt"
2323
"os"
2424
"path/filepath"
25+
"strconv"
2526
"strings"
2627

27-
diskapi "github.com/kubernetes-csi/csi-proxy/client/api/disk/v1beta1"
28-
diskclient "github.com/kubernetes-csi/csi-proxy/client/groups/disk/v1beta1"
28+
diskapi "github.com/kubernetes-csi/csi-proxy/client/api/disk/v1beta2"
29+
diskclient "github.com/kubernetes-csi/csi-proxy/client/groups/disk/v1beta2"
2930

3031
fsapi "github.com/kubernetes-csi/csi-proxy/client/api/filesystem/v1beta1"
3132
fsclient "github.com/kubernetes-csi/csi-proxy/client/groups/filesystem/v1beta1"
@@ -159,6 +160,25 @@ func (mounter *CSIProxyMounter) UnmountDevice(target string) error {
159160
if err != nil {
160161
return err
161162
}
163+
164+
// Set disk to offline mode to have a clean state
165+
getDiskNumberRequest := &volumeapi.VolumeDiskNumberRequest{
166+
VolumeId: volumeId,
167+
}
168+
id, err := mounter.VolumeClient.GetVolumeDiskNumber(context.Background(), getDiskNumberRequest)
169+
if err != nil {
170+
return err
171+
}
172+
diskId := id.GetDiskNumber()
173+
klog.V(4).Infof("get disk number %d from volume %s", diskId, volumeId)
174+
setDiskRequest := &diskapi.SetAttachStateRequest{
175+
DiskID: strconv.FormatInt(diskId, 10),
176+
IsOnline: false,
177+
}
178+
if _, err = mounter.DiskClient.SetAttachState(context.Background(), setDiskRequest); err != nil {
179+
return err
180+
}
181+
162182
return nil
163183
}
164184

@@ -203,6 +223,17 @@ func (mounter *CSIProxyMounter) FormatAndMount(source string, target string, fst
203223
if err != nil {
204224
return err
205225
}
226+
227+
// make sure disk is online. if disk is already online, this call should also succeed.
228+
setDiskRequest := &diskapi.SetAttachStateRequest{
229+
DiskID: source,
230+
IsOnline: true,
231+
}
232+
_, err = mounter.DiskClient.SetAttachState(context.Background(), setDiskRequest)
233+
if err != nil {
234+
return err
235+
}
236+
206237
volumeIDsRequest := &volumeapi.ListVolumesOnDiskRequest{
207238
DiskId: source,
208239
}

0 commit comments

Comments
 (0)