forked from yuxh/gearman-go
		
	grab, no_job, pre_sleep, noop
This commit is contained in:
		
							parent
							
								
									a33a6cde32
								
							
						
					
					
						commit
						2b4cc002d1
					
				@ -72,7 +72,21 @@ func (a *agent) Work() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (a *agent) Close() {
 | 
					func (a *agent) Close() {
 | 
				
			||||||
 | 
						if a.conn != nil {
 | 
				
			||||||
		a.conn.Close()
 | 
							a.conn.Close()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (a *agent) Grab() {
 | 
				
			||||||
 | 
						outpack := getOutPack()
 | 
				
			||||||
 | 
						outpack.dataType = GRAB_JOB_UNIQ
 | 
				
			||||||
 | 
						a.write(outpack)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (a *agent) PreSleep() {
 | 
				
			||||||
 | 
						outpack := getOutPack()
 | 
				
			||||||
 | 
						outpack.dataType = PRE_SLEEP
 | 
				
			||||||
 | 
						a.write(outpack)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// read length bytes from the socket
 | 
					// read length bytes from the socket
 | 
				
			||||||
 | 
				
			|||||||
@ -154,6 +154,10 @@ func (worker *Worker) handleInPack(inpack *inPack) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
	switch inpack.dataType {
 | 
						switch inpack.dataType {
 | 
				
			||||||
 | 
						case NO_JOB:
 | 
				
			||||||
 | 
							inpack.a.PreSleep()
 | 
				
			||||||
 | 
						case NOOP:
 | 
				
			||||||
 | 
							inpack.a.Grab()
 | 
				
			||||||
	case ERROR:
 | 
						case ERROR:
 | 
				
			||||||
		worker.err(GetError(inpack.data))
 | 
							worker.err(GetError(inpack.data))
 | 
				
			||||||
	case JOB_ASSIGN, JOB_ASSIGN_UNIQ:
 | 
						case JOB_ASSIGN, JOB_ASSIGN_UNIQ:
 | 
				
			||||||
@ -165,6 +169,20 @@ func (worker *Worker) handleInPack(inpack *inPack) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (worker *Worker) Ready() (err error) {
 | 
				
			||||||
 | 
						for _, v := range worker.agents {
 | 
				
			||||||
 | 
							if err = v.Connect(); err != nil {
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							go v.Work()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						worker.Reset()
 | 
				
			||||||
 | 
						for funcname, f := range worker.funcs {
 | 
				
			||||||
 | 
							worker.addFunc(funcname, f.timeout)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Main loop
 | 
					// Main loop
 | 
				
			||||||
func (worker *Worker) Work() {
 | 
					func (worker *Worker) Work() {
 | 
				
			||||||
	defer func() {
 | 
						defer func() {
 | 
				
			||||||
@ -173,14 +191,6 @@ func (worker *Worker) Work() {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
	worker.running = true
 | 
						worker.running = true
 | 
				
			||||||
	for _, v := range worker.agents {
 | 
					 | 
				
			||||||
		v.Connect()
 | 
					 | 
				
			||||||
		go v.Work()
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	worker.Reset()
 | 
					 | 
				
			||||||
	for funcname, f := range worker.funcs {
 | 
					 | 
				
			||||||
		worker.addFunc(funcname, f.timeout)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	var inpack *inPack
 | 
						var inpack *inPack
 | 
				
			||||||
	for inpack = range worker.in {
 | 
						for inpack = range worker.in {
 | 
				
			||||||
		go worker.handleInPack(inpack)
 | 
							go worker.handleInPack(inpack)
 | 
				
			||||||
@ -267,6 +277,7 @@ func (worker *Worker) exec(inpack *inPack) (err error) {
 | 
				
			|||||||
	outpack.data = r.data
 | 
						outpack.data = r.data
 | 
				
			||||||
	if worker.running {
 | 
						if worker.running {
 | 
				
			||||||
		inpack.a.write(outpack)
 | 
							inpack.a.write(outpack)
 | 
				
			||||||
 | 
							inpack.a.Grab()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,9 @@
 | 
				
			|||||||
package worker
 | 
					package worker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import "testing"
 | 
					import (
 | 
				
			||||||
 | 
					"sync"
 | 
				
			||||||
 | 
					"testing"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var worker *Worker
 | 
					var worker *Worker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -44,7 +47,20 @@ func TestWorkerRemoveFunc(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestWork(t *testing.T) {
 | 
					func TestWork(t *testing.T) {
 | 
				
			||||||
 | 
						var wg sync.WaitGroup
 | 
				
			||||||
 | 
						worker.JobHandler = func(job Job) error {
 | 
				
			||||||
 | 
							t.Logf("%s", job.Data())
 | 
				
			||||||
 | 
							wg.Done()
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := worker.Ready(); err != nil {
 | 
				
			||||||
 | 
							t.Error(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	go worker.Work()
 | 
						go worker.Work()
 | 
				
			||||||
 | 
						wg.Add(1)
 | 
				
			||||||
 | 
						worker.Echo([]byte("Hello"))
 | 
				
			||||||
 | 
						wg.Wait()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestWorkerClose(t *testing.T) {
 | 
					func TestWorkerClose(t *testing.T) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user