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() }