Skip to content

Commit 14dd61d

Browse files
committed
allow toggling of use of PV annotation to mark its pre-resize capacity
1 parent a806f83 commit 14dd61d

File tree

3 files changed

+35
-28
lines changed

3 files changed

+35
-28
lines changed

cmd/csi-resizer/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ var (
6868

6969
handleVolumeInUseError = flag.Bool("handle-volume-inuse-error", true, "Flag to turn on/off capability to handle volume in use error in resizer controller. Defaults to true if not set.")
7070

71+
enableFSResizeAnnotation = flag.Bool("enable-fs-resize-annotation", true, "Flag to turn on/off capability to add an annotation to PV to denote its size prior to resize and to remove it upon completion of filesystem resize.")
72+
7173
version = "unknown"
7274
)
7375

@@ -153,7 +155,7 @@ func main() {
153155
resizerName := csiResizer.Name()
154156
rc := controller.NewResizeController(resizerName, csiResizer, kubeClient, *resyncPeriod, informerFactory,
155157
workqueue.NewItemExponentialFailureRateLimiter(*retryIntervalStart, *retryIntervalMax),
156-
*handleVolumeInUseError)
158+
*handleVolumeInUseError, *enableFSResizeAnnotation)
157159
run := func(ctx context.Context) {
158160
informerFactory.Start(wait.NeverStop)
159161
rc.Run(*workers, ctx)

pkg/controller/controller.go

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,9 @@ type resizeController struct {
6666
// a cache to store PersistentVolume objects
6767
volumes cache.Store
6868
// a cache to store PersistentVolumeClaim objects
69-
claims cache.Store
70-
handleVolumeInUseError bool
69+
claims cache.Store
70+
handleVolumeInUseError bool
71+
enableFSResizeAnnotation bool
7172
}
7273

7374
// NewResizeController returns a ResizeController.
@@ -78,7 +79,8 @@ func NewResizeController(
7879
resyncPeriod time.Duration,
7980
informerFactory informers.SharedInformerFactory,
8081
pvcRateLimiter workqueue.RateLimiter,
81-
handleVolumeInUseError bool) ResizeController {
82+
handleVolumeInUseError,
83+
enableFSResizeAnnotation bool) ResizeController {
8284
pvInformer := informerFactory.Core().V1().PersistentVolumes()
8385
pvcInformer := informerFactory.Core().V1().PersistentVolumeClaims()
8486
eventBroadcaster := record.NewBroadcaster()
@@ -91,17 +93,18 @@ func NewResizeController(
9193
pvcRateLimiter, fmt.Sprintf("%s-pvc", name))
9294

9395
ctrl := &resizeController{
94-
name: name,
95-
resizer: resizer,
96-
kubeClient: kubeClient,
97-
pvSynced: pvInformer.Informer().HasSynced,
98-
pvcSynced: pvcInformer.Informer().HasSynced,
99-
claimQueue: claimQueue,
100-
volumes: pvInformer.Informer().GetStore(),
101-
claims: pvcInformer.Informer().GetStore(),
102-
eventRecorder: eventRecorder,
103-
usedPVCs: newUsedPVCStore(),
104-
handleVolumeInUseError: handleVolumeInUseError,
96+
name: name,
97+
resizer: resizer,
98+
kubeClient: kubeClient,
99+
pvSynced: pvInformer.Informer().HasSynced,
100+
pvcSynced: pvcInformer.Informer().HasSynced,
101+
claimQueue: claimQueue,
102+
volumes: pvInformer.Informer().GetStore(),
103+
claims: pvcInformer.Informer().GetStore(),
104+
eventRecorder: eventRecorder,
105+
usedPVCs: newUsedPVCStore(),
106+
handleVolumeInUseError: handleVolumeInUseError,
107+
enableFSResizeAnnotation: enableFSResizeAnnotation,
105108
}
106109

107110
// Add a resync period as the PVC's request size can be resized again when we handling
@@ -321,7 +324,7 @@ func (ctrl *resizeController) syncPVC(key string) error {
321324
return fmt.Errorf("expected volume but got %+v", volumeObj)
322325
}
323326

324-
if ctrl.isNodeExpandComplete(pvc, pv) && metav1.HasAnnotation(pv.ObjectMeta, util.AnnPreResizeCapacity) {
327+
if ctrl.enableFSResizeAnnotation && ctrl.isNodeExpandComplete(pvc, pv) && metav1.HasAnnotation(pv.ObjectMeta, util.AnnPreResizeCapacity) {
325328
if err := ctrl.deletePreResizeCapAnnotation(pv); err != nil {
326329
return fmt.Errorf("failed removing annotation %s from pv %q: %v", util.AnnPreResizeCapacity, pv.Name, err)
327330
}
@@ -568,7 +571,7 @@ func (ctrl *resizeController) updatePVCapacity(pv *v1.PersistentVolume, oldCapac
568571
newPV := pv.DeepCopy()
569572
newPV.Spec.Capacity[v1.ResourceStorage] = newCapacity
570573

571-
if fsResizeRequired {
574+
if ctrl.enableFSResizeAnnotation && fsResizeRequired {
572575
// only update annotation if there already isn't one
573576
if !metav1.HasAnnotation(pv.ObjectMeta, util.AnnPreResizeCapacity) {
574577
if newPV.ObjectMeta.Annotations == nil {

pkg/controller/controller_test.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ func TestController(t *testing.T) {
4141
// does PVC being expanded has Failed Precondition errors
4242
pvcHasInUseErrors bool
4343
disableVolumeInUseErrorHandler bool
44+
enableFSResizeAnnotation bool
4445
}{
4546
{
4647
Name: "Invalid key",
@@ -98,13 +99,14 @@ func TestController(t *testing.T) {
9899
CallCSIExpand: true,
99100
},
100101
{
101-
Name: "PV nodeExpand Complete",
102-
PVC: createPVC(2, 1),
103-
PV: createPV(1, "testPVC", defaultNS, "foobar", &fsVolumeMode),
104-
CreateObjects: true,
105-
NodeResize: true,
106-
CallCSIExpand: true,
107-
expectDeleteAnnotation: true,
102+
Name: "PV nodeExpand Complete",
103+
PVC: createPVC(2, 1),
104+
PV: createPV(1, "testPVC", defaultNS, "foobar", &fsVolumeMode),
105+
CreateObjects: true,
106+
NodeResize: true,
107+
CallCSIExpand: true,
108+
expectDeleteAnnotation: true,
109+
enableFSResizeAnnotation: true,
108110
},
109111
{
110112
Name: "Block Resize PVC with FS resize",
@@ -232,7 +234,7 @@ func TestController(t *testing.T) {
232234
t.Fatalf("Test %s: Unable to create resizer: %v", test.Name, err)
233235
}
234236

235-
controller := NewResizeController(driverName, csiResizer, kubeClient, time.Second, informerFactory, workqueue.DefaultControllerRateLimiter(), !test.disableVolumeInUseErrorHandler)
237+
controller := NewResizeController(driverName, csiResizer, kubeClient, time.Second, informerFactory, workqueue.DefaultControllerRateLimiter(), !test.disableVolumeInUseErrorHandler, test.enableFSResizeAnnotation)
236238

237239
ctrlInstance, _ := controller.(*resizeController)
238240

@@ -285,7 +287,7 @@ func TestController(t *testing.T) {
285287
}
286288

287289
// check if pre resize capacity annotation get properly populated after volume resize if node expand is required
288-
if test.PV != nil && test.CreateObjects {
290+
if test.enableFSResizeAnnotation && test.PV != nil && test.CreateObjects {
289291
volObj, _, _ := ctrlInstance.volumes.GetByKey("testPV")
290292
pv := volObj.(*v1.PersistentVolume)
291293
requestCap, statusCap := test.PVC.Spec.Resources.Requests[v1.ResourceStorage], test.PVC.Status.Capacity[v1.ResourceStorage]
@@ -295,7 +297,7 @@ func TestController(t *testing.T) {
295297
}
296298

297299
// check if pre resize capacity annotation gets properly deleted after node expand
298-
if test.PVC != nil && test.CreateObjects && test.expectDeleteAnnotation {
300+
if test.enableFSResizeAnnotation && test.PVC != nil && test.CreateObjects && test.expectDeleteAnnotation {
299301
ctrlInstance.markPVCResizeFinished(test.PVC, test.PVC.Spec.Resources.Requests[v1.ResourceStorage])
300302
time.Sleep(time.Second * 2)
301303
volObj, _, _ := ctrlInstance.volumes.GetByKey("testPV")
@@ -363,7 +365,7 @@ func TestResizePVC(t *testing.T) {
363365
t.Fatalf("Test %s: Unable to create resizer: %v", test.Name, err)
364366
}
365367

366-
controller := NewResizeController(driverName, csiResizer, kubeClient, time.Second, informerFactory, workqueue.DefaultControllerRateLimiter(), true /* disableVolumeInUseErrorHandler*/)
368+
controller := NewResizeController(driverName, csiResizer, kubeClient, time.Second, informerFactory, workqueue.DefaultControllerRateLimiter(), true /* disableVolumeInUseErrorHandler*/, true /*enableFsResizeAnnotation*/)
367369

368370
ctrlInstance, _ := controller.(*resizeController)
369371

0 commit comments

Comments
 (0)