Skip to content

Commit 98e400b

Browse files
authored
fix(warmup): cronjob compatible (#81)
* fix: cronbjob compatible Signed-off-by: Xuhui zhang <xuhui@juicedata.io> * fix cronjob Signed-off-by: Xuhui zhang <xuhui@juicedata.io> * fix cronjob Signed-off-by: Xuhui zhang <xuhui@juicedata.io> --------- Signed-off-by: Xuhui zhang <xuhui@juicedata.io>
1 parent 91ea8ba commit 98e400b

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

cmd/app/manager.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,6 @@ func NewManager() (ctrl.Manager, error) {
8888
&corev1.Pod{}: {
8989
Label: labels.SelectorFromSet(labels.Set{common.LabelManagedBy: common.LabelManagedByValue}),
9090
},
91-
&batchv1.CronJob{}: {
92-
Label: labels.SelectorFromSet(labels.Set{common.LabelManagedBy: common.LabelManagedByValue}),
93-
},
9491
&batchv1.Job{}: {
9592
Label: labels.SelectorFromSet(labels.Set{common.LabelManagedBy: common.LabelManagedByValue}),
9693
},

internal/controller/warmup_controller.go

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ import (
4242
// WarmUpReconciler reconciles a WarmUp object
4343
type WarmUpReconciler struct {
4444
client.Client
45-
Scheme *runtime.Scheme
45+
Scheme *runtime.Scheme
46+
cronjobSupported bool
4647
}
4748

4849
// +kubebuilder:rbac:groups=juicefs.io,resources=warmups,verbs=get;list;watch;create;update;patch;delete
@@ -119,6 +120,9 @@ func (r *WarmUpReconciler) getWarmUpHandler(policyType juicefsiov1.PolicyType) w
119120
case juicefsiov1.PolicyTypeOnce:
120121
return &onceHandler{r.Client}
121122
case juicefsiov1.PolicyTypeCron:
123+
if !r.cronjobSupported {
124+
return nil
125+
}
122126
return &cronHandler{r.Client}
123127
}
124128
return nil
@@ -322,12 +326,27 @@ func (r *WarmUpReconciler) SetupWithManager(mgr ctrl.Manager) error {
322326
return err
323327
}
324328

325-
return ctrl.NewControllerManagedBy(mgr).
329+
controllerBuilder := ctrl.NewControllerManagedBy(mgr).
326330
For(&juicefsiov1.WarmUp{}).
327331
Owns(&batchv1.Job{}).
328-
Owns(&batchv1.CronJob{}).
329332
WithOptions(controller.Options{
330333
MaxConcurrentReconciles: common.MaxWarmupConcurrentReconciles,
331-
}).
332-
Complete(r)
334+
})
335+
336+
if isCronJobAPIAvailable(mgr) {
337+
controllerBuilder = controllerBuilder.Owns(&batchv1.CronJob{})
338+
r.cronjobSupported = true
339+
} else {
340+
log.Log.Info("CronJob API is not available in this Kubernetes cluster, scheduled warmup functionality will be disabled. Only manual warmup jobs will be supported.")
341+
}
342+
343+
return controllerBuilder.Complete(r)
344+
}
345+
346+
// isCronJobAPIAvailable checks if the CronJob API is available in the cluster
347+
func isCronJobAPIAvailable(mgr ctrl.Manager) bool {
348+
mapper := mgr.GetRESTMapper()
349+
gvk := batchv1.SchemeGroupVersion.WithKind("CronJob")
350+
_, err := mapper.RESTMapping(gvk.GroupKind(), gvk.Version)
351+
return err == nil
333352
}

0 commit comments

Comments
 (0)