func handleRunOnce(bbs Bbs.ExecutorBBS, runOnce *models.RunOnce) { //hesitate logger.Info("handling.runonce", runOnce.Guid) sleepForARandomInterval("sleep.claim", 0, 100) //reserve memory ok := reserveMemory(runOnce.MemoryMB) if !ok { logger.Info("reserve.memory.failed", runOnce.Guid) return } defer releaseMemory(runOnce.MemoryMB) //mark claimed logger.Info("claiming.runonce", runOnce.Guid) err := bbs.ClaimRunOnce(runOnce, *executorID) if err != nil { logger.Info("claim.runonce.failed", runOnce.Guid, err) return } logger.Info("claimed.runonce", runOnce.Guid) //create container sleepForContainerCreationInterval() //mark started logger.Info("starting.runonce", runOnce.Guid) err = bbs.StartRunOnce(runOnce, "container") if err != nil { logger.Error("start.runonce.failed", runOnce.Guid, err) return } logger.Info("started.runonce", runOnce.Guid) //run sleepForRunInterval() //mark completed logger.Info("completing.runonce", runOnce.Guid) err = bbs.CompleteRunOnce(runOnce, false, "", "") if err != nil { logger.Error("complete.runonce.failed", runOnce.Guid, err) return } logger.Info("completed.runonce", runOnce.Guid) }