func (b *Broker) handleResult(job bs.Job, result *JobResult) (err error) { if result.TimedOut { b.log.Printf("job %d timed out", job.Id) return } b.log.Printf("job %d finished with exit(%d)", job.Id, result.ExitStatus) switch result.ExitStatus { case 0: b.log.Printf("deleting job %d", job.Id) err = job.Delete() default: r, err := job.Releases() if err != nil { r = ReleaseTries } // r*r*r*r means final of 10 tries has 1h49m21s delay, 4h15m33s total. // See: http://play.golang.org/p/I15lUWoabI delay := time.Duration(r*r*r*r) * time.Second b.log.Printf("releasing job %d with %v delay (%d retries)", job.Id, delay, r) err = job.Release(delay) } return }