func (c *httpClient) handleSubmitJob(req *http.Request) { var job driver.Job var e error var sched = c.sched defer sched.jobLocker.Unlock() sched.jobLocker.Lock() url := req.URL.String() funcName := url[1:] if funcName == "" { funcName = req.FormValue("func") } job.Name = req.FormValue("name") job.Func = funcName job.Args = req.FormValue("args") job.Timeout, _ = strconv.ParseInt(req.FormValue("timeout"), 10, 64) job.SchedAt, _ = strconv.ParseInt(req.FormValue("sched_at"), 10, 64) if job.Name == "" || job.Func == "" { c.sendErrResponse(errors.New("job name or func is required")) return } isNew := true changed := false job.SetReady() oldJob, e := sched.driver.GetOne(job.Func, job.Name) if e == nil && oldJob.ID > 0 { job.ID = oldJob.ID if job.IsProc() { sched.decrStatProc(oldJob) sched.removeRevertPQ(job) changed = true } isNew = false } e = sched.driver.Save(&job) if e != nil { c.sendErrResponse(e) return } if isNew { sched.incrStatJob(job) } if isNew || changed { sched.pushJobPQ(job) } sched.notifyJobTimer() c.sendResponse("200 OK", []byte("{\"msg\": \""+protocol.SUCCESS.String()+"\"}")) return }
func (c *client) handleSubmitJob(msgID []byte, payload []byte) (err error) { var job driver.Job var e error var conn = c.conn var sched = c.sched defer sched.jobLocker.Unlock() sched.jobLocker.Lock() job, e = driver.NewJob(payload) if e != nil { err = conn.Send([]byte(e.Error())) return } isNew := true changed := false job.SetReady() oldJob, e := sched.driver.GetOne(job.Func, job.Name) if e == nil && oldJob.ID > 0 { job.ID = oldJob.ID if oldJob.IsProc() { sched.decrStatProc(oldJob) sched.removeRevertPQ(job) changed = true } isNew = false } e = sched.driver.Save(&job) if e != nil { err = conn.Send([]byte(e.Error())) return } if isNew { sched.incrStatJob(job) } if isNew || changed { sched.pushJobPQ(job) } sched.notifyJobTimer() err = c.handleCommand(msgID, protocol.SUCCESS) return }