Skip to content

Commit b51cbb1

Browse files
committed
Change plugin interfaces to use progress monitoring
1 parent 32752fe commit b51cbb1

File tree

11 files changed

+25
-47
lines changed

11 files changed

+25
-47
lines changed

pkg/volume/flexvolume/mounter.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ func (f *flexVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs)
9595
if !f.readOnly {
9696
if f.plugin.capabilities.FSGroup {
9797
// fullPluginName helps to distinguish different driver from flex volume plugin
98-
volume.SetVolumeOwnership(f, dir, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy, util.FSGroupCompleteHook(f.plugin, f.spec))
98+
ownershipChanger := volume.NewVolumeOwnership(f, dir, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy, util.FSGroupCompleteHook(f.plugin, f.spec))
99+
ownershipChanger.ChangePermissions()
99100
}
100101
}
101102

pkg/volume/git_repo/git_repo.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,8 @@ func (b *gitRepoVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArg
229229
return fmt.Errorf("failed to exec 'git reset --hard': %s: %v", output, err)
230230
}
231231

232-
volume.SetVolumeOwnership(b, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(b.plugin, nil))
233-
232+
ownershipChanger := volume.NewVolumeOwnership(b, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(b.plugin, nil))
233+
ownershipChanger.ChangePermissions()
234234
volumeutil.SetReady(b.getMetaDir())
235235
return nil
236236
}

pkg/volume/iscsi/disk_manager.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package iscsi
1919
import (
2020
"os"
2121

22-
v1 "k8s.io/api/core/v1"
2322
"k8s.io/klog/v2"
2423
"k8s.io/mount-utils"
2524

@@ -42,7 +41,9 @@ type diskManager interface {
4241
// utility to mount a disk based filesystem
4342
// globalPDPath: global mount path like, /var/lib/kubelet/plugins/kubernetes.io/iscsi/{ifaceName}/{portal-some_iqn-lun-lun_id}
4443
// volPath: pod volume dir path like, /var/lib/kubelet/pods/{podUID}/volumes/kubernetes.io~iscsi/{volumeName}
45-
func diskSetUp(manager diskManager, b iscsiDiskMounter, volPath string, mounter mount.Interface, fsGroup *int64, fsGroupChangePolicy *v1.PodFSGroupChangePolicy) error {
44+
func diskSetUp(manager diskManager, b iscsiDiskMounter, volPath string, mounter mount.Interface, mounterArgs volume.MounterArgs) error {
45+
fsGroup := mounterArgs.FsGroup
46+
fsGroupChangePolicy := mounterArgs.FSGroupChangePolicy
4647
notMnt, err := mounter.IsLikelyNotMountPoint(volPath)
4748
if err != nil && !os.IsNotExist(err) {
4849
klog.Errorf("cannot validate mountpoint: %s", volPath)
@@ -96,7 +97,9 @@ func diskSetUp(manager diskManager, b iscsiDiskMounter, volPath string, mounter
9697
}
9798

9899
if !b.readOnly {
99-
volume.SetVolumeOwnership(&b, volPath, fsGroup, fsGroupChangePolicy, util.FSGroupCompleteHook(b.plugin, nil))
100+
// This code requires larger refactor to monitor progress of ownership change
101+
ownershipChanger := volume.NewVolumeOwnership(&b, volPath, fsGroup, fsGroupChangePolicy, util.FSGroupCompleteHook(b.plugin, nil))
102+
ownershipChanger.ChangePermissions()
100103
}
101104

102105
return nil

pkg/volume/iscsi/iscsi.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ func (b *iscsiDiskMounter) SetUp(mounterArgs volume.MounterArgs) error {
377377

378378
func (b *iscsiDiskMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
379379
// diskSetUp checks mountpoints and prevent repeated calls
380-
err := diskSetUp(b.manager, *b, dir, b.mounter, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy)
380+
err := diskSetUp(b.manager, *b, dir, b.mounter, mounterArgs)
381381
if err != nil {
382382
klog.Errorf("iscsi: failed to setup")
383383
}

pkg/volume/local/local.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,9 @@ func (m *localVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs)
610610
if !m.readOnly {
611611
// Volume owner will be written only once on the first volume mount
612612
if len(refs) == 0 {
613-
return volume.SetVolumeOwnership(m, dir, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy, util.FSGroupCompleteHook(m.plugin, nil))
613+
ownershipChanger := volume.NewVolumeOwnership(m, dir, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy, util.FSGroupCompleteHook(m.plugin, nil))
614+
ownershipChanger.AddProgressNotifier(m.pod, mounterArgs.Recorder)
615+
return ownershipChanger.ChangePermissions()
614616
}
615617
}
616618
return nil

pkg/volume/portworx/portworx.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,9 @@ func (b *portworxVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterAr
331331
return err
332332
}
333333
if !b.readOnly {
334-
volume.SetVolumeOwnership(b, dir, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy, util.FSGroupCompleteHook(b.plugin, nil))
334+
// Since portworxVolume is in process of being removed from in-tree, we avoid larger refactor to add progress tracking for ownership operation
335+
ownershipChanger := volume.NewVolumeOwnership(b, dir, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy, util.FSGroupCompleteHook(b.plugin, nil))
336+
ownershipChanger.ChangePermissions()
335337
}
336338
klog.Infof("Portworx Volume %s setup at %s", b.volumeID, dir)
337339
return nil

pkg/volume/projected/projected.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,8 @@ func (s *projectedVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterA
229229
setPerms := func(_ string) error {
230230
// This may be the first time writing and new files get created outside the timestamp subdirectory:
231231
// change the permissions on the whole volume and not only in the timestamp directory.
232-
return volume.SetVolumeOwnership(s, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(s.plugin, nil))
232+
ownershipChanger := volume.NewVolumeOwnership(s, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(s.plugin, nil))
233+
return ownershipChanger.ChangePermissions()
233234
}
234235
err = writer.Write(data, setPerms)
235236
if err != nil {

pkg/volume/secret/secret.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,8 @@ func (b *secretVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs
242242
setPerms := func(_ string) error {
243243
// This may be the first time writing and new files get created outside the timestamp subdirectory:
244244
// change the permissions on the whole volume and not only in the timestamp directory.
245-
return volume.SetVolumeOwnership(b, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(b.plugin, nil))
245+
ownershipChanger := volume.NewVolumeOwnership(b, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(b.plugin, nil))
246+
return ownershipChanger.ChangePermissions()
246247
}
247248
err = writer.Write(payload, setPerms)
248249
if err != nil {

pkg/volume/util/metrics.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"google.golang.org/grpc/status"
2626
"k8s.io/component-base/metrics"
2727
"k8s.io/component-base/metrics/legacyregistry"
28-
"k8s.io/klog/v2"
2928
"k8s.io/kubernetes/pkg/volume"
3029
"k8s.io/kubernetes/pkg/volume/util/types"
3130
)
@@ -103,7 +102,6 @@ func OperationCompleteHook(plugin, operationName string) func(types.CompleteFunc
103102
if c.Migrated != nil {
104103
migrated = *c.Migrated
105104
}
106-
klog.Infof("foobar Operation %s took %f", operationName, timeTaken)
107105
StorageOperationMetric.WithLabelValues(plugin, operationName, status, strconv.FormatBool(migrated)).Observe(timeTaken)
108106
}
109107
return opComplete

pkg/volume/volume_linux.go

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -141,38 +141,6 @@ func (vo *VolumeOwnership) logWarning() {
141141
vo.recorder.Event(vo.pod, v1.EventTypeWarning, events.VolumePermissionChangeInProgress, msg)
142142
}
143143

144-
// SetVolumeOwnership modifies the given volume to be owned by
145-
// fsGroup, and sets SetGid so that newly created files are owned by
146-
// fsGroup. If fsGroup is nil nothing is done.
147-
func SetVolumeOwnership(mounter Mounter, dir string, fsGroup *int64, fsGroupChangePolicy *v1.PodFSGroupChangePolicy, completeFunc func(types.CompleteFuncParam)) error {
148-
if fsGroup == nil {
149-
return nil
150-
}
151-
152-
timer := time.AfterFunc(30*time.Second, func() {
153-
klog.Warningf("Setting volume ownership for %s and fsGroup set. If the volume has a lot of files then setting volume ownership could be slow, see https://github.com/kubernetes/kubernetes/issues/69699", dir)
154-
})
155-
defer timer.Stop()
156-
157-
if skipPermissionChange(mounter, dir, fsGroup, fsGroupChangePolicy) {
158-
klog.V(3).InfoS("Skipping permission and ownership change for volume", "path", dir)
159-
return nil
160-
}
161-
162-
err := walkDeep(dir, func(path string, info os.FileInfo, err error) error {
163-
if err != nil {
164-
return err
165-
}
166-
return changeFilePermission(path, fsGroup, mounter.GetAttributes().ReadOnly, info)
167-
})
168-
if completeFunc != nil {
169-
completeFunc(types.CompleteFuncParam{
170-
Err: &err,
171-
})
172-
}
173-
return err
174-
}
175-
176144
func changeFilePermission(filename string, fsGroup *int64, readonly bool, info os.FileInfo) error {
177145
err := os.Lchown(filename, -1, int(*fsGroup))
178146
if err != nil {

0 commit comments

Comments
 (0)