Skip to content

Commit 666f2b9

Browse files
committed
Use new csi-proxy client beta versions
1 parent 4a31476 commit 666f2b9

File tree

31 files changed

+9224
-98
lines changed

31 files changed

+9224
-98
lines changed

Diff for: pkg/gce-pd-csi-driver/utils_windows.go

+16-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package gceGCEDriver
1717

1818
import (
1919
"fmt"
20+
"strconv"
2021
"strings"
2122

2223
"k8s.io/mount-utils"
@@ -31,7 +32,11 @@ func formatAndMount(source, target, fstype string, options []string, m *mount.Sa
3132
switch m.Interface.(type) {
3233
case *mounter.CSIProxyMounterV1:
3334
proxy := m.Interface.(*mounter.CSIProxyMounterV1)
34-
return proxy.FormatAndMount(source, target, fstype, options)
35+
diskNumber, err := strconv.ParseUint(source, 10, 64)
36+
if err != nil {
37+
return err
38+
}
39+
return proxy.FormatAndMount(uint32(diskNumber), target, fstype, options)
3540

3641
case *mounter.CSIProxyMounterV1Beta:
3742
proxy := m.Interface.(*mounter.CSIProxyMounterV1Beta)
@@ -115,7 +120,11 @@ func getDevicePath(ns *GCENodeServer, volumeID, partition string) (string, error
115120
switch ns.Mounter.Interface.(type) {
116121
case *mounter.CSIProxyMounterV1:
117122
proxy := ns.Mounter.Interface.(*mounter.CSIProxyMounterV1)
118-
return proxy.GetDevicePath(deviceName, partition, volumeKey.Name)
123+
diskNumber, err := proxy.GetDevicePath(deviceName, partition, volumeKey.Name)
124+
if err != nil {
125+
return "", err
126+
}
127+
return strconv.FormatUint(uint64(diskNumber), 10), nil
119128
case *mounter.CSIProxyMounterV1Beta:
120129
proxy := ns.Mounter.Interface.(*mounter.CSIProxyMounterV1Beta)
121130
return proxy.GetDevicePath(deviceName, partition, volumeKey.Name)
@@ -129,7 +138,11 @@ func getBlockSizeBytes(devicePath string, m *mount.SafeFormatAndMount) (int64, e
129138
switch m.Interface.(type) {
130139
case *mounter.CSIProxyMounterV1:
131140
proxy := m.Interface.(*mounter.CSIProxyMounterV1)
132-
return proxy.GetBlockSizeBytes(devicePath)
141+
diskNumber, err := strconv.ParseUint(devicePath, 10, 64)
142+
if err != nil {
143+
return 0, err
144+
}
145+
return proxy.GetBlockSizeBytes(uint32(diskNumber))
133146
case *mounter.CSIProxyMounterV1Beta:
134147
proxy := m.Interface.(*mounter.CSIProxyMounterV1Beta)
135148
return proxy.GetBlockSizeBytes(devicePath)

Diff for: pkg/mount-manager/safe-mounter-v1_windows.go

+71-59
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,22 @@ import (
2222
"fmt"
2323
"os"
2424
"path/filepath"
25-
"strconv"
2625
"strings"
2726

28-
diskapi "github.com/kubernetes-csi/csi-proxy/client/api/disk/v1"
29-
diskclient "github.com/kubernetes-csi/csi-proxy/client/groups/disk/v1"
27+
// TODO(mauriciopoppe): these packages will become v1 if there are no more changes in the v1beta3 API,
28+
// that's why this file it's called v1_windows.go even though it's still using v1beta3/v1beta2 APIs
3029

31-
fsapi "github.com/kubernetes-csi/csi-proxy/client/api/filesystem/v1"
32-
fsclient "github.com/kubernetes-csi/csi-proxy/client/groups/filesystem/v1"
30+
diskapi "github.com/kubernetes-csi/csi-proxy/client/api/disk/v1beta3"
31+
diskclient "github.com/kubernetes-csi/csi-proxy/client/groups/disk/v1beta3"
3332

34-
volumeapi "github.com/kubernetes-csi/csi-proxy/client/api/volume/v1"
35-
volumeclient "github.com/kubernetes-csi/csi-proxy/client/groups/volume/v1"
33+
fsapi "github.com/kubernetes-csi/csi-proxy/client/api/filesystem/v1beta2"
34+
fsclient "github.com/kubernetes-csi/csi-proxy/client/groups/filesystem/v1beta2"
35+
36+
volumeapi "github.com/kubernetes-csi/csi-proxy/client/api/volume/v1beta3"
37+
volumeclient "github.com/kubernetes-csi/csi-proxy/client/groups/volume/v1beta3"
3638

3739
"k8s.io/klog"
38-
"k8s.io/utils/mount"
40+
mount "k8s.io/mount-utils"
3941
)
4042

4143
var _ mount.Interface = &CSIProxyMounterV1{}
@@ -66,6 +68,16 @@ func NewCSIProxyMounterV1() (*CSIProxyMounterV1, error) {
6668
}, nil
6769
}
6870

71+
// GetAPIVersions returns the versions of the client APIs this mounter is using.
72+
func (mounter *CSIProxyMounterV1) GetAPIVersions() string {
73+
return fmt.Sprintf(
74+
"API Versions Disk: %s, Filesystem: %s, Volume: %s",
75+
diskclient.Version,
76+
fsclient.Version,
77+
volumeclient.Version,
78+
)
79+
}
80+
6981
// Mount just creates a soft link at target pointing to source.
7082
func (mounter *CSIProxyMounterV1) Mount(source string, target string, fstype string, options []string) error {
7183
return mounter.MountSensitive(source, target, fstype, options, nil /* sensitiveOptions */)
@@ -84,27 +96,23 @@ func (mounter *CSIProxyMounterV1) MountSensitive(source string, target string, f
8496
if err := os.MkdirAll(parentDir, 0755); err != nil {
8597
return err
8698
}
87-
linkRequest := &fsapi.LinkPathRequest{
99+
createSymlinkRequest := &fsapi.CreateSymlinkRequest{
88100
SourcePath: mount.NormalizeWindowsPath(source),
89101
TargetPath: mount.NormalizeWindowsPath(target),
90102
}
91-
response, err := mounter.FsClient.LinkPath(context.Background(), linkRequest)
103+
_, err := mounter.FsClient.CreateSymlink(context.Background(), createSymlinkRequest)
92104
if err != nil {
93105
return err
94106
}
95-
if response.Error != "" {
96-
return errors.New(response.Error)
97-
}
98107
return nil
99108
}
100109

101110
// Delete the given directory with Pod context. CSI proxy does a check for path prefix
102111
// based on context
103112
func (mounter *CSIProxyMounterV1) RemovePodDir(target string) error {
104113
rmdirRequest := &fsapi.RmdirRequest{
105-
Path: mount.NormalizeWindowsPath(target),
106-
Context: fsapi.PathContext_POD,
107-
Force: true,
114+
Path: mount.NormalizeWindowsPath(target),
115+
Force: true,
108116
}
109117
_, err := mounter.FsClient.Rmdir(context.Background(), rmdirRequest)
110118
if err != nil {
@@ -122,48 +130,47 @@ func (mounter *CSIProxyMounterV1) UnmountDevice(target string) error {
122130
if exists, err := mounter.ExistsPath(target); !exists {
123131
return err
124132
}
125-
idRequest := &volumeapi.VolumeIDFromMountRequest{
126-
Mount: target,
133+
idRequest := &volumeapi.GetVolumeIDFromTargetPathRequest{
134+
TargetPath: target,
127135
}
128-
idResponse, err := mounter.VolumeClient.GetVolumeIDFromMount(context.Background(), idRequest)
136+
idResponse, err := mounter.VolumeClient.GetVolumeIDFromTargetPath(context.Background(), idRequest)
129137
if err != nil {
130138
return err
131139
}
132140
volumeId := idResponse.GetVolumeId()
133141

134-
dismountRequest := &volumeapi.DismountVolumeRequest{
135-
Path: target,
136-
VolumeId: volumeId,
142+
unmountRequest := &volumeapi.UnmountVolumeRequest{
143+
TargetPath: target,
144+
VolumeId: volumeId,
137145
}
138-
_, err = mounter.VolumeClient.DismountVolume(context.Background(), dismountRequest)
146+
_, err = mounter.VolumeClient.UnmountVolume(context.Background(), unmountRequest)
139147
if err != nil {
140148
return err
141149
}
142150
rmdirRequest := &fsapi.RmdirRequest{
143-
Path: target,
144-
Context: fsapi.PathContext_PLUGIN,
145-
Force: true,
151+
Path: target,
152+
Force: true,
146153
}
147154
_, err = mounter.FsClient.Rmdir(context.Background(), rmdirRequest)
148155
if err != nil {
149156
return err
150157
}
151158

152159
// Set disk to offline mode to have a clean state
153-
getDiskNumberRequest := &volumeapi.VolumeDiskNumberRequest{
160+
getDiskNumberRequest := &volumeapi.GetDiskNumberFromVolumeIDRequest{
154161
VolumeId: volumeId,
155162
}
156-
id, err := mounter.VolumeClient.GetVolumeDiskNumber(context.Background(), getDiskNumberRequest)
163+
getDiskNumberResponse, err := mounter.VolumeClient.GetDiskNumberFromVolumeID(context.Background(), getDiskNumberRequest)
157164
if err != nil {
158165
return err
159166
}
160-
diskId := id.GetDiskNumber()
161-
klog.V(4).Infof("get disk number %d from volume %s", diskId, volumeId)
162-
setDiskRequest := &diskapi.SetAttachStateRequest{
163-
DiskID: strconv.FormatInt(diskId, 10),
164-
IsOnline: false,
167+
diskNumber := getDiskNumberResponse.GetDiskNumber()
168+
klog.V(4).Infof("get disk number %d from volume %s", diskNumber, volumeId)
169+
setDiskStateRequest := &diskapi.SetDiskStateRequest{
170+
DiskNumber: diskNumber,
171+
IsOnline: false,
165172
}
166-
if _, err = mounter.DiskClient.SetAttachState(context.Background(), setDiskRequest); err != nil {
173+
if _, err = mounter.DiskClient.SetDiskState(context.Background(), setDiskStateRequest); err != nil {
167174
return err
168175
}
169176

@@ -174,37 +181,36 @@ func (mounter *CSIProxyMounterV1) Unmount(target string) error {
174181
return mounter.RemovePodDir(target)
175182
}
176183

177-
func (mounter *CSIProxyMounterV1) GetDevicePath(deviceName string, partition string, volumeKey string) (string, error) {
178-
id := "page83"
184+
func (mounter *CSIProxyMounterV1) GetDevicePath(deviceName string, partition string, volumeKey string) (uint32, error) {
179185
listRequest := &diskapi.ListDiskIDsRequest{}
180186
diskIDsResponse, err := mounter.DiskClient.ListDiskIDs(context.Background(), listRequest)
181187
if err != nil {
182-
return "", err
188+
return 0, err
183189
}
184190
diskIDsMap := diskIDsResponse.GetDiskIDs()
185191
for diskNum, diskInfo := range diskIDsMap {
186-
klog.V(4).Infof("found disk number %s, disk info %v", diskNum, diskInfo)
187-
idValue, found := diskInfo.Identifiers[id]
192+
klog.V(4).Infof("found disk number %d, disk info %v", diskNum, diskInfo)
193+
idValue := diskInfo.Page83
188194
// The page83 id for gce pd has format of "Google pvc-xxxxxxx(the device name passed in here)"
189-
if !found || idValue == "" {
195+
if idValue == "" {
190196
continue
191197
}
192-
names := strings.Fields(idValue)
193198
klog.V(4).Infof("get page83 id %s", idValue)
199+
names := strings.Fields(idValue)
194200
if names[len(names)-1] == deviceName {
195201
return diskNum, nil
196202
}
197203
}
198-
return "", fmt.Errorf("could not find disk number for device %s", deviceName)
204+
return 0, fmt.Errorf("could not find disk number for device %s", deviceName)
199205

200206
}
201207

202208
// FormatAndMount accepts the source disk number, target path to mount, the fstype to format with and options to be used.
203209
// After formatting, it will mount the disk to target path on the host
204-
func (mounter *CSIProxyMounterV1) FormatAndMount(source string, target string, fstype string, options []string) error {
210+
func (mounter *CSIProxyMounterV1) FormatAndMount(diskNumber uint32, target string, fstype string, options []string) error {
205211
// Call PartitionDisk CSI proxy call to partition the disk and return the volume id
206212
partionDiskRequest := &diskapi.PartitionDiskRequest{
207-
DiskID: source,
213+
DiskNumber: diskNumber,
208214
}
209215

210216
_, err := mounter.DiskClient.PartitionDisk(context.Background(), partionDiskRequest)
@@ -213,17 +219,17 @@ func (mounter *CSIProxyMounterV1) FormatAndMount(source string, target string, f
213219
}
214220

215221
// make sure disk is online. if disk is already online, this call should also succeed.
216-
setDiskRequest := &diskapi.SetAttachStateRequest{
217-
DiskID: source,
218-
IsOnline: true,
222+
setDiskStateRequest := &diskapi.SetDiskStateRequest{
223+
DiskNumber: diskNumber,
224+
IsOnline: true,
219225
}
220-
_, err = mounter.DiskClient.SetAttachState(context.Background(), setDiskRequest)
226+
_, err = mounter.DiskClient.SetDiskState(context.Background(), setDiskStateRequest)
221227
if err != nil {
222228
return err
223229
}
224230

225231
volumeIDsRequest := &volumeapi.ListVolumesOnDiskRequest{
226-
DiskId: source,
232+
DiskNumber: diskNumber,
227233
}
228234
volumeIdResponse, err := mounter.VolumeClient.ListVolumesOnDisk(context.Background(), volumeIDsRequest)
229235
if err != nil {
@@ -253,8 +259,8 @@ func (mounter *CSIProxyMounterV1) FormatAndMount(source string, target string, f
253259
}
254260
// Mount the volume by calling the CSI proxy call.
255261
mountVolumeRequest := &volumeapi.MountVolumeRequest{
256-
VolumeId: volumeID,
257-
Path: target,
262+
VolumeId: volumeID,
263+
TargetPath: target,
258264
}
259265
_, err = mounter.VolumeClient.MountVolume(context.Background(), mountVolumeRequest)
260266
if err != nil {
@@ -268,16 +274,16 @@ func (mounter *CSIProxyMounterV1) GetMountRefs(pathname string) ([]string, error
268274
}
269275

270276
func (mounter *CSIProxyMounterV1) IsLikelyNotMountPoint(file string) (bool, error) {
271-
isMountRequest := &fsapi.IsMountPointRequest{
277+
isSymlinkRequest := &fsapi.IsSymlinkRequest{
272278
Path: file,
273279
}
274280

275-
isMountResponse, err := mounter.FsClient.IsMountPoint(context.Background(), isMountRequest)
281+
isSymlinkResponse, err := mounter.FsClient.IsSymlink(context.Background(), isSymlinkRequest)
276282
if err != nil {
277283
return true, err
278284
}
279285

280-
return !isMountResponse.IsMountPoint, nil
286+
return !isSymlinkResponse.IsSymlink, nil
281287
}
282288

283289
func (mounter *CSIProxyMounterV1) List() ([]mount.MountPoint, error) {
@@ -300,10 +306,16 @@ func (mounter *CSIProxyMounterV1) ExistsPath(path string) (bool, error) {
300306
return isExistsResponse.Exists, err
301307
}
302308

303-
func (mounter *CSIProxyMounterV1) GetBlockSizeBytes(diskId string) (int64, error) {
304-
DiskStatsResponse, err := mounter.DiskClient.DiskStats(context.Background(),
305-
&diskapi.DiskStatsRequest{
306-
DiskID: diskId,
309+
func (mounter *CSIProxyMounterV1) GetBlockSizeBytes(diskNumber uint32) (int64, error) {
310+
DiskStatsResponse, err := mounter.DiskClient.GetDiskStats(context.Background(),
311+
&diskapi.GetDiskStatsRequest{
312+
DiskNumber: diskNumber,
307313
})
308-
return DiskStatsResponse.DiskSize, err
314+
return DiskStatsResponse.TotalBytes, err
315+
}
316+
317+
// MountSensitiveWithoutSystemd is the same as MountSensitive() but this method disable using systemd mount.
318+
// It's unimplemented in PD CSI Driver
319+
func (mounter *CSIProxyMounterV1) MountSensitiveWithoutSystemd(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
320+
return errors.New("MountSensitiveWithoutSystemd is not implemented")
309321
}

Diff for: pkg/mount-manager/safe-mounter-v1beta_windows.go

+19-3
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ import (
3131
fsapi "github.com/kubernetes-csi/csi-proxy/client/api/filesystem/v1beta1"
3232
fsclient "github.com/kubernetes-csi/csi-proxy/client/groups/filesystem/v1beta1"
3333

34-
volumeapi "github.com/kubernetes-csi/csi-proxy/client/api/volume/v1beta1"
35-
volumeclient "github.com/kubernetes-csi/csi-proxy/client/groups/volume/v1beta1"
34+
volumeapi "github.com/kubernetes-csi/csi-proxy/client/api/volume/v1beta2"
35+
volumeclient "github.com/kubernetes-csi/csi-proxy/client/groups/volume/v1beta2"
3636

3737
"k8s.io/klog"
38-
"k8s.io/utils/mount"
38+
mount "k8s.io/mount-utils"
3939
)
4040

4141
var _ mount.Interface = &CSIProxyMounterV1Beta{}
@@ -66,6 +66,16 @@ func NewCSIProxyMounterV1Beta() (*CSIProxyMounterV1Beta, error) {
6666
}, nil
6767
}
6868

69+
// GetAPIVersions returns the versions of the client APIs this mounter is using.
70+
func (mounter *CSIProxyMounterV1Beta) GetAPIVersions() string {
71+
return fmt.Sprintf(
72+
"API Versions Disk: %s, Filesystem: %s, Volume: %s",
73+
diskclient.Version,
74+
fsclient.Version,
75+
volumeclient.Version,
76+
)
77+
}
78+
6979
// Mount just creates a soft link at target pointing to source.
7080
func (mounter *CSIProxyMounterV1Beta) Mount(source string, target string, fstype string, options []string) error {
7181
return mounter.MountSensitive(source, target, fstype, options, nil /* sensitiveOptions */)
@@ -307,3 +317,9 @@ func (mounter *CSIProxyMounterV1Beta) GetBlockSizeBytes(diskId string) (int64, e
307317
})
308318
return DiskStatsResponse.DiskSize, err
309319
}
320+
321+
// MountSensitiveWithoutSystemd is the same as MountSensitive() but this method disable using systemd mount.
322+
// It's unimplemented in PD CSI Driver
323+
func (mounter *CSIProxyMounterV1Beta) MountSensitiveWithoutSystemd(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
324+
return errors.New("MountSensitiveWithoutSystemd is not implemented")
325+
}

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,18 @@ import (
2525
func NewSafeMounter() (*mount.SafeFormatAndMount, error) {
2626
csiProxyMounterV1, err := NewCSIProxyMounterV1()
2727
if err == nil {
28-
klog.V(4).Infof("using CSIProxyMounterV1")
28+
klog.V(4).Infof("using CSIProxyMounterV1, %s", csiProxyMounterV1.GetAPIVersions())
2929
return &mount.SafeFormatAndMount{
3030
Interface: csiProxyMounterV1,
3131
Exec: utilexec.New(),
3232
}, nil
3333
}
34+
// TODO(mauriciopoppe): this info might be misleading while we move to use v1 because we're still using v1beta3/v1beta2
3435
klog.V(4).Infof("failed to connect to csi-proxy v1 with error=%v, will try with v1Beta", err)
3536

3637
csiProxyMounterV1Beta, err := NewCSIProxyMounterV1Beta()
3738
if err == nil {
38-
klog.V(4).Infof("using CSIProxyMounterV1Beta")
39+
klog.V(4).Infof("using CSIProxyMounterV1Beta, %s", csiProxyMounterV1Beta.GetAPIVersions())
3940
return &mount.SafeFormatAndMount{
4041
Interface: csiProxyMounterV1Beta,
4142
Exec: utilexec.New(),

0 commit comments

Comments
 (0)