fixed the worker's testing cases
This commit is contained in:
parent
bf25cc1728
commit
9f96247384
@ -3,6 +3,7 @@ package worker
|
||||
import (
|
||||
"io"
|
||||
"net"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
@ -44,10 +45,10 @@ func (a *agent) work() {
|
||||
var data, leftdata []byte
|
||||
for {
|
||||
if data, err = a.read(bufferSize); err != nil {
|
||||
a.worker.err(err)
|
||||
if err == ErrLostConn {
|
||||
break
|
||||
}
|
||||
a.worker.err(err)
|
||||
// If it is unexpected error and the connection wasn't
|
||||
// closed by Gearmand, the agent should close the conection
|
||||
// and reconnect to job server.
|
||||
@ -103,6 +104,16 @@ func (a *agent) PreSleep() {
|
||||
a.write(outpack)
|
||||
}
|
||||
|
||||
func isClosed(err error) bool {
|
||||
switch {
|
||||
case err == io.EOF:
|
||||
fallthrough
|
||||
case strings.Contains(err.Error(), "use of closed network connection"):
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// read length bytes from the socket
|
||||
func (a *agent) read(length int) (data []byte, err error) {
|
||||
n := 0
|
||||
@ -110,7 +121,7 @@ func (a *agent) read(length int) (data []byte, err error) {
|
||||
// read until data can be unpacked
|
||||
for i := length; i > 0 || len(data) < minPacketLength; i -= n {
|
||||
if n, err = a.conn.Read(buf); err != nil {
|
||||
if err == io.EOF {
|
||||
if isClosed(err) {
|
||||
err = ErrLostConn
|
||||
}
|
||||
return
|
||||
|
@ -11,7 +11,7 @@ func ExampleWorker() {
|
||||
w := worker.New(worker.Unlimited)
|
||||
defer w.Close()
|
||||
// Add a gearman job server
|
||||
if err := w.AddServer(worker.NETWORK, "127.0.0.1:4730"); err != nil {
|
||||
if err := w.AddServer(worker.Network, "127.0.0.1:4730"); err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
@ -7,19 +7,19 @@ import (
|
||||
|
||||
var (
|
||||
inpackcases = map[uint32]map[string]string{
|
||||
noop: map[string]string{
|
||||
dtNoop: map[string]string{
|
||||
"src": "\x00RES\x00\x00\x00\x06\x00\x00\x00\x00",
|
||||
},
|
||||
noJob: map[string]string{
|
||||
dtNoJob: map[string]string{
|
||||
"src": "\x00RES\x00\x00\x00\x0a\x00\x00\x00\x00",
|
||||
},
|
||||
jobAssign: map[string]string{
|
||||
dtJobAssign: map[string]string{
|
||||
"src": "\x00RES\x00\x00\x00\x0b\x00\x00\x00\x07a\x00b\x00xyz",
|
||||
"handle": "a",
|
||||
"fn": "b",
|
||||
"data": "xyz",
|
||||
},
|
||||
jobAssign_UNIQ: map[string]string{
|
||||
dtJobAssignUniq: map[string]string{
|
||||
"src": "\x00RES\x00\x00\x00\x1F\x00\x00\x00\x09a\x00b\x00c\x00xyz",
|
||||
"handle": "a",
|
||||
"fn": "b",
|
||||
|
@ -7,51 +7,51 @@ import (
|
||||
|
||||
var (
|
||||
outpackcases = map[uint32]map[string]string{
|
||||
canDo: map[string]string{
|
||||
dtCanDo: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x01\x00\x00\x00\x01a",
|
||||
"data": "a",
|
||||
},
|
||||
canDo_TIMEOUT: map[string]string{
|
||||
dtCanDoTimeout: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x17\x00\x00\x00\x06a\x00\x00\x00\x00\x01",
|
||||
"data": "a\x00\x00\x00\x00\x01",
|
||||
},
|
||||
cantDo: map[string]string{
|
||||
dtCantDo: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x02\x00\x00\x00\x01a",
|
||||
"data": "a",
|
||||
},
|
||||
resetAbilities: map[string]string{
|
||||
dtResetAbilities: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x03\x00\x00\x00\x00",
|
||||
},
|
||||
preSleep: map[string]string{
|
||||
dtPreSleep: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x04\x00\x00\x00\x00",
|
||||
},
|
||||
GRAB_JOB: map[string]string{
|
||||
dtGrabJob: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x09\x00\x00\x00\x00",
|
||||
},
|
||||
GRAB_JOB_UNIQ: map[string]string{
|
||||
dtGrabJobUniq: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x1E\x00\x00\x00\x00",
|
||||
},
|
||||
WORK_DATA: map[string]string{
|
||||
dtWorkData: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x1C\x00\x00\x00\x03a\x00b",
|
||||
"data": "a\x00b",
|
||||
},
|
||||
WORK_WARNING: map[string]string{
|
||||
dtWorkWarning: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x1D\x00\x00\x00\x03a\x00b",
|
||||
"data": "a\x00b",
|
||||
},
|
||||
workStatus: map[string]string{
|
||||
dtWorkStatus: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x0C\x00\x00\x00\x08a\x0050\x00100",
|
||||
"data": "a\x0050\x00100",
|
||||
},
|
||||
workComplete: map[string]string{
|
||||
dtWorkComplete: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x0D\x00\x00\x00\x03a\x00b",
|
||||
"data": "a\x00b",
|
||||
},
|
||||
workFail: map[string]string{
|
||||
dtWorkFail: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x0E\x00\x00\x00\x01a",
|
||||
"handle": "a",
|
||||
},
|
||||
WORK_EXCEPTION: map[string]string{
|
||||
dtWorkException: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x19\x00\x00\x00\x03a\x00b",
|
||||
"data": "a\x00b",
|
||||
},
|
||||
@ -59,7 +59,7 @@ var (
|
||||
"src": "\x00REQ\x00\x00\x00\x16\x00\x00\x00\x01a",
|
||||
"data": "a",
|
||||
},
|
||||
ALL_YOURS: map[string]string{
|
||||
dtAllYours: map[string]string{
|
||||
"src": "\x00REQ\x00\x00\x00\x18\x00\x00\x00\x00",
|
||||
},
|
||||
}
|
||||
|
@ -168,8 +168,8 @@ func (worker *Worker) Ready() (err error) {
|
||||
if len(worker.funcs) == 0 {
|
||||
return ErrNoneFuncs
|
||||
}
|
||||
for _, v := range worker.agents {
|
||||
if err = v.Connect(); err != nil {
|
||||
for _, a := range worker.agents {
|
||||
if err = a.Connect(); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user