Просмотр исходного кода

fixed the closing method

tags/0.2
Xing Xing 9 лет назад
Родитель
Сommit
a003eac543
1 измененных файлов: 21 добавлений и 22 удалений
  1. +21
    -22
      worker/worker.go

+ 21
- 22
worker/worker.go Просмотреть файл

@@ -22,7 +22,7 @@ type Worker struct {
funcs jobFuncs
in chan *inPack
running bool
ready bool
ready bool

Id string
ErrorHandler ErrorHandler
@@ -30,7 +30,6 @@ type Worker struct {
limit chan bool
}


// Return a worker.
//
// If limit is set to Unlimited(=0), the worker will grab all jobs
@@ -95,11 +94,11 @@ func (worker *Worker) AddFunc(funcname string,

// inner add
func (worker *Worker) addFunc(funcname string, timeout uint32) {
outpack := prepFuncOutpack( funcname, timeout)
outpack := prepFuncOutpack(funcname, timeout)
worker.broadcast(outpack)
}

func prepFuncOutpack(funcname string, timeout uint32) (*outPack){
func prepFuncOutpack(funcname string, timeout uint32) *outPack {
outpack := getOutPack()
if timeout == 0 {
outpack.dataType = dtCanDo
@@ -188,19 +187,14 @@ func (worker *Worker) Ready() (err error) {
// Main loop, block here
// Most of time, this should be evaluated in goroutine.
func (worker *Worker) Work() {
if ! worker.ready {
if !worker.ready {
// didn't run Ready beforehand, so we'll have to do it:
err := worker.Ready()
if err != nil {
panic( err )
panic(err)
}
}

defer func() {
for _, a := range worker.agents {
a.Close()
}
}()
worker.running = true
for _, a := range worker.agents {
a.Grab()
@@ -223,8 +217,11 @@ func (worker *Worker) customeHandler(inpack *inPack) {
// Close connection and exit main loop
func (worker *Worker) Close() {
worker.Lock()
worker.Unlock()
defer worker.Unlock()
if worker.running == true {
for _, a := range worker.agents {
a.Close()
}
worker.running = false
close(worker.in)
}
@@ -299,11 +296,11 @@ func (worker *Worker) exec(inpack *inPack) (err error) {
}
return
}
func (worker *Worker)reRegisterFuncsForAgent( a * agent ){
func (worker *Worker) reRegisterFuncsForAgent(a *agent) {
worker.Lock()
defer worker.Unlock()
for funcname, f := range worker.funcs {
outpack := prepFuncOutpack( funcname, f.timeout)
outpack := prepFuncOutpack(funcname, f.timeout)
a.write(outpack)
}

@@ -333,19 +330,21 @@ func execTimeout(f JobFunc, job Job, timeout time.Duration) (r *result) {
}

// Error type passed when a worker connection disconnects
type WorkerDisconnectError struct{
err error
agent * agent
type WorkerDisconnectError struct {
err error
agent *agent
}
func (e *WorkerDisconnectError) Error() ( string){
return e.err.Error();

func (e *WorkerDisconnectError) Error() string {
return e.err.Error()
}

// Responds to the error by asking the worker to reconnect
func (e *WorkerDisconnectError) Reconnect() ( err error ){
func (e *WorkerDisconnectError) Reconnect() (err error) {
return e.agent.reconnect()
}
// Which server was this for?
func(e *WorkerDisconnectError) Server() ( net string, addr string ){

// Which server was this for?
func (e *WorkerDisconnectError) Server() (net string, addr string) {
return e.agent.net, e.agent.addr
}

Загрузка…
Отмена
Сохранить