コード例 #1
0
ファイル: purgatory.go プロジェクト: skelterjohn/alum.inum
func (p Purgatory) AddJob(j Job) {
	p.lock.Lock()
	defer p.lock.Unlock()

	pr := GetProject(j.Project)

	if w, ok := pr.GetWorker(j.Name); ok && j.Version <= w.Version {
		// we've already got the worker
		jobQueue.Push <- j
		jobClaims.setJobStatus(j.JobHeader, messages.JobQueued)
		log.Println("queueing", j)
		return
	}

	log.Printf("adding %v to purgatory", j)
	jobClaims.setJobStatus(j.JobHeader, messages.JobAwaitingWorker)

	// otherwise store it and wait for the job to arrive
	prjs, ok := p.workerlessJobs[j.Project]
	if !ok {
		prjs = make(map[string][]Job)
		p.workerlessJobs[j.Project] = prjs
	}
	prjs[j.Name] = append(prjs[j.Name], j)

	var wr = messages.WorkerRequest{}
	wr.Project = j.Project
	wr.Name = j.Name
	var line messages.Line
	if line, ok = getLine(j.Conn); !ok {
		log.Printf("unknown connection w/ %v", j)
	}
	line.Out <- wr.Message()
}