Skip to content

Commit 5d2220a

Browse files
committed
Prototype: multi-version CSI-proxy
1 parent 64b14a7 commit 5d2220a

File tree

1 file changed

+91
-21
lines changed

1 file changed

+91
-21
lines changed

Diff for: pkg/mount-manager/safe-mounter_windows.go

+91-21
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ import (
2828
diskapi "github.com/kubernetes-csi/csi-proxy/client/api/disk/v1beta2"
2929
diskclient "github.com/kubernetes-csi/csi-proxy/client/groups/disk/v1beta2"
3030

31+
diskapiv1beta1 "github.com/kubernetes-csi/csi-proxy/client/api/disk/v1beta1"
32+
diskclientv1beta1 "github.com/kubernetes-csi/csi-proxy/client/groups/disk/v1beta1"
33+
3134
fsapi "github.com/kubernetes-csi/csi-proxy/client/api/filesystem/v1beta1"
3235
fsclient "github.com/kubernetes-csi/csi-proxy/client/groups/filesystem/v1beta1"
3336

@@ -40,11 +43,13 @@ import (
4043
)
4144

4245
var _ mount.Interface = &CSIProxyMounter{}
46+
var version = 2
4347

4448
type CSIProxyMounter struct {
45-
FsClient *fsclient.Client
46-
DiskClient *diskclient.Client
47-
VolumeClient *volumeclient.Client
49+
FsClient *fsclient.Client
50+
DiskClient *diskclient.Client
51+
DiskClientV1beta1 *diskclientv1beta1.Client
52+
VolumeClient *volumeclient.Client
4853
}
4954

5055
func NewCSIProxyMounter() (*CSIProxyMounter, error) {
@@ -56,14 +61,28 @@ func NewCSIProxyMounter() (*CSIProxyMounter, error) {
5661
if err != nil {
5762
return nil, err
5863
}
64+
diskClientv1beta1, err := diskclientv1beta1.NewClient()
65+
if err != nil {
66+
return nil, err
67+
}
68+
69+
klog.Infof("start disk client v1beta2")
70+
listRequest := &diskapi.ListDiskIDsRequest{}
71+
_, err = diskClient.ListDiskIDs(context.Background(), listRequest)
72+
if err != nil {
73+
klog.Errorf("disk v1beta2 api failed %v", err)
74+
version = 1
75+
}
76+
5977
volumeClient, err := volumeclient.NewClient()
6078
if err != nil {
6179
return nil, err
6280
}
6381
return &CSIProxyMounter{
64-
FsClient: fsClient,
65-
DiskClient: diskClient,
66-
VolumeClient: volumeClient,
82+
FsClient: fsClient,
83+
DiskClient: diskClient,
84+
VolumeClient: volumeClient,
85+
DiskClientV1beta1: diskClientv1beta1,
6786
}, nil
6887
}
6988

@@ -175,6 +194,11 @@ func (mounter *CSIProxyMounter) UnmountDevice(target string) error {
175194
DiskID: strconv.FormatInt(diskId, 10),
176195
IsOnline: false,
177196
}
197+
if version == 1 {
198+
klog.Infof("skip online")
199+
return nil
200+
}
201+
klog.Infof("set onlin")
178202
if _, err = mounter.DiskClient.SetAttachState(context.Background(), setDiskRequest); err != nil {
179203
return err
180204
}
@@ -188,6 +212,31 @@ func (mounter *CSIProxyMounter) Unmount(target string) error {
188212

189213
func (mounter *CSIProxyMounter) GetDevicePath(deviceName string, partition string, volumeKey string) (string, error) {
190214
id := "page83"
215+
216+
if version == 1 {
217+
listRequest := &diskapiv1beta1.ListDiskIDsRequest{}
218+
diskIDsResponse, err := mounter.DiskClientV1beta1.ListDiskIDs(context.Background(), listRequest)
219+
if err != nil {
220+
return "", err
221+
}
222+
diskIDsMap := diskIDsResponse.GetDiskIDs()
223+
for diskNum, diskInfo := range diskIDsMap {
224+
klog.V(4).Infof("found disk number %s, disk info %v", diskNum, diskInfo)
225+
idValue, found := diskInfo.Identifiers[id]
226+
// The page83 id for gce pd has format of "Google pvc-xxxxxxx(the device name passed in here)"
227+
if !found || idValue == "" {
228+
continue
229+
}
230+
names := strings.Fields(idValue)
231+
klog.V(4).Infof("get page83 id %s", idValue)
232+
if names[len(names)-1] == deviceName {
233+
return diskNum, nil
234+
}
235+
}
236+
return "", fmt.Errorf("could not find disk number for device %s", deviceName)
237+
238+
}
239+
191240
listRequest := &diskapi.ListDiskIDsRequest{}
192241
diskIDsResponse, err := mounter.DiskClient.ListDiskIDs(context.Background(), listRequest)
193242
if err != nil {
@@ -215,25 +264,38 @@ func (mounter *CSIProxyMounter) GetDevicePath(deviceName string, partition strin
215264
// After formatting, it will mount the disk to target path on the host
216265
func (mounter *CSIProxyMounter) FormatAndMount(source string, target string, fstype string, options []string) error {
217266
// Call PartitionDisk CSI proxy call to partition the disk and return the volume id
218-
partionDiskRequest := &diskapi.PartitionDiskRequest{
219-
DiskID: source,
220-
}
221267

222-
_, err := mounter.DiskClient.PartitionDisk(context.Background(), partionDiskRequest)
223-
if err != nil {
224-
return err
225-
}
268+
if version == 1 {
269+
partionDiskRequest := &diskapiv1beta1.PartitionDiskRequest{
270+
DiskID: source,
271+
}
226272

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,
273+
_, err := mounter.DiskClientV1beta1.PartitionDisk(context.Background(), partionDiskRequest)
274+
if err != nil {
275+
return err
276+
}
277+
278+
} else {
279+
partionDiskRequest := &diskapi.PartitionDiskRequest{
280+
DiskID: source,
281+
}
282+
283+
_, err := mounter.DiskClient.PartitionDisk(context.Background(), partionDiskRequest)
284+
if err != nil {
285+
return err
286+
}
231287
}
232-
_, err = mounter.DiskClient.SetAttachState(context.Background(), setDiskRequest)
233-
if err != nil {
234-
return err
288+
if version == 2 {
289+
// make sure disk is online. if disk is already online, this call should also succeed.
290+
setDiskRequest := &diskapi.SetAttachStateRequest{
291+
DiskID: source,
292+
IsOnline: true,
293+
}
294+
_, err := mounter.DiskClient.SetAttachState(context.Background(), setDiskRequest)
295+
if err != nil {
296+
return err
297+
}
235298
}
236-
237299
volumeIDsRequest := &volumeapi.ListVolumesOnDiskRequest{
238300
DiskId: source,
239301
}
@@ -313,6 +375,14 @@ func (mounter *CSIProxyMounter) ExistsPath(path string) (bool, error) {
313375
}
314376

315377
func (mounter *CSIProxyMounter) GetBlockSizeBytes(diskId string) (int64, error) {
378+
if version == 1 {
379+
DiskStatsResponse, err := mounter.DiskClientV1beta1.DiskStats(context.Background(),
380+
&diskapiv1beta1.DiskStatsRequest{
381+
DiskID: diskId,
382+
})
383+
return DiskStatsResponse.DiskSize, err
384+
}
385+
316386
DiskStatsResponse, err := mounter.DiskClient.DiskStats(context.Background(),
317387
&diskapi.DiskStatsRequest{
318388
DiskID: diskId,

0 commit comments

Comments
 (0)