code: func (tc *Controller) processTTL(job *batch.Job) (expired bool, err error) {
  	// We don't care about the Jobs that are going to be deleted, or the ones that don't need clean up.
  	if job.DeletionTimestamp != nil || !needsCleanup(job) {
  		return false, nil
  	}
  
  	now := tc.clock.Now()
  	t, err := timeLeft(job, &now)
  	if err != nil {
  		return false, err
  	}
  
  	// TTL has expired
  	if *t <= 0 {
  		return true, nil
  	}
  
  	tc.enqueueAfter(job, *t)
  	return false, nil
  }
docs: // processTTL checks whether a given Job's TTL has expired, and add it to the queue after the TTL is expected to expire
  // if the TTL will expire later.