This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// form: https://github.com/kubernetes/kubernetes/blob/87f9429087d4e31201412548517d36e83abebc8d/pkg/controller/cronjob/cronjob_controller.go#L230-L246 | |
updatedSJ, err := sjc.UpdateStatus(sj) | |
if err != nil { | |
klog.Errorf("Unable to update status for %s (rv = %s): %v", nameForLog, sj.ResourceVersion, err) | |
return | |
} | |
*sj = *updatedSJ | |
if sj.DeletionTimestamp != nil { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// from: https://github.com/kubernetes/kubernetes/blob/87f9429087d4e31201412548517d36e83abebc8d/pkg/controller/cronjob/cronjob_controller.go#L220-L228 | |
// Remove any job reference from the active list if the corresponding job does not exist any more. | |
// Otherwise, the cronjob may be stuck in active mode forever even though there is no matching | |
// job running. | |
for _, j := range sj.Status.Active { | |
if found := childrenJobs[j.UID]; !found { | |
recorder.Eventf(sj, v1.EventTypeNormal, "MissingJob", "Active job went missing: %v", j.Name) | |
deleteFromActiveList(sj, j.UID) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// from: https://github.com/kubernetes/kubernetes/blob/87f9429087d4e31201412548517d36e83abebc8d/pkg/controller/cronjob/utils.go#L45-L56 | |
func deleteFromActiveList(sj *batchv1beta1.CronJob, uid types.UID) { | |
if sj == nil { | |
return | |
} | |
newActive := []v1.ObjectReference{} | |
for _, j := range sj.Status.Active { | |
if j.UID != uid { | |
newActive = append(newActive, j) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// from: https://github.com/kubernetes/kubernetes/blob/87f9429087d4e31201412548517d36e83abebc8d/pkg/controller/cronjob/cronjob_controller.go#L190-L344 | |
childrenJobs := make(map[types.UID]bool) | |
for _, j := range js { | |
childrenJobs[j.ObjectMeta.UID] = true | |
found := inActiveList(*sj, j.ObjectMeta.UID) | |
if !found && !IsJobFinished(&j) { | |
recorder.Eventf(sj, v1.EventTypeWarning, "UnexpectedJob", "Saw a job that the controller did not create or forgot: %v", j.Name) | |
// We found an unfinished job that has us as the parent, but it is not in our Active list. | |
// This could happen if we crashed right after creating the Job and before updating the status, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// from: https://github.com/kubernetes/kubernetes/blob/87f9429087d4e31201412548517d36e83abebc8d/pkg/controller/cronjob/cronjob_controller.go#L190-L344 | |
// syncOne reconciles a CronJob with a list of any Jobs that it created. | |
// All known jobs created by "sj" should be included in "js". | |
// The current time is passed in to facilitate testing. | |
// It has no receiver, to facilitate testing. | |
func syncOne(sj *batchv1beta1.CronJob, js []batchv1.Job, now time.Time, jc jobControlInterface, sjc sjControlInterface, recorder record.EventRecorder) { | |
nameForLog := fmt.Sprintf("%s/%s", sj.Namespace, sj.Name) | |
childrenJobs := make(map[types.UID]bool) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// from: https://github.com/kubernetes/apimachinery/blob/4519e5924e99cd805e0e5e1dc8e43170c3f94909/pkg/apis/meta/v1/types.go#L303-L329 | |
// OwnerReference contains enough information to let you identify an owning | |
// object. An owning object must be in the same namespace as the dependent, or | |
// be cluster-scoped, so there is no namespace field. | |
type OwnerReference struct { | |
// API version of the referent. | |
APIVersion string `json:"apiVersion" protobuf:"bytes,5,opt,name=apiVersion"` | |
// Kind of the referent. | |
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// from: https://github.com/kubernetes/kubernetes/blob/87f9429087d4e31201412548517d36e83abebc8d/pkg/controller/cronjob/utils.go#L58-L72 | |
// getParentUIDFromJob extracts UID of job's parent and whether it was found | |
func getParentUIDFromJob(j batchv1.Job) (types.UID, bool) { | |
controllerRef := metav1.GetControllerOf(&j) | |
if controllerRef == nil { | |
return types.UID(""), false | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// from: https://github.com/kubernetes/kubernetes/blob/87f9429087d4e31201412548517d36e83abebc8d/pkg/controller/cronjob/utils.go#L74-L87 | |
// groupJobsByParent groups jobs into a map keyed by the job parent UID (e.g. scheduledJob). | |
// It has no receiver, to facilitate testing. | |
func groupJobsByParent(js []batchv1.Job) map[types.UID][]batchv1.Job { | |
jobsBySj := make(map[types.UID][]batchv1.Job) | |
for _, job := range js { | |
parentUID, found := getParentUIDFromJob(job) | |
if !found { | |
klog.V(4).Infof("Unable to get parent uid from job %s in namespace %s", job.Name, job.Namespace) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// from: https://github.com/kubernetes/kubernetes/blob/87f9429087d4e31201412548517d36e83abebc8d/pkg/controller/cronjob/cronjob_controller.go#L99-L128 | |
// syncAll lists all the CronJobs and Jobs and reconciles them. | |
func (jm *CronJobController) syncAll() { | |
// List children (Jobs) before parents (CronJob). | |
// This guarantees that if we see any Job that got orphaned by the GC orphan finalizer, | |
// we must also see that the parent CronJob has non-nil DeletionTimestamp (see #42639). | |
// Note that this only works because we are NOT using any caches here. | |
jl, err := jm.kubeClient.BatchV1().Jobs(metav1.NamespaceAll).List(metav1.ListOptions{}) | |
if err != nil { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// from: https://github.com/kubernetes/kubernetes/blob/87f9429087d4e31201412548517d36e83abebc8d/pkg/controller/cronjob/cronjob_controller.go#L89-L97 | |
// Run the main goroutine responsible for watching and syncing jobs. | |
func (jm *CronJobController) Run(stopCh <-chan struct{}) { | |
defer utilruntime.HandleCrash() | |
klog.Infof("Starting CronJob Manager") | |
// Check things every 10 second. | |
go wait.Until(jm.syncAll, 10*time.Second, stopCh) | |
<-stopCh | |
klog.Infof("Shutting down CronJob Manager") |