forked from yuxh/gearman-go
		
	added a timeout at the worker side
This commit is contained in:
		
							parent
							
								
									83f5f6fa70
								
							
						
					
					
						commit
						6d68430f75
					
				@ -5,6 +5,7 @@
 | 
				
			|||||||
package worker
 | 
					package worker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
					    "time"
 | 
				
			||||||
    "bytes"
 | 
					    "bytes"
 | 
				
			||||||
    "bitbucket.org/mikespook/gearman-go/common"
 | 
					    "bitbucket.org/mikespook/gearman-go/common"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -237,12 +238,6 @@ func (worker *Worker) SetId(id string) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Execute the job. And send back the result.
 | 
					// Execute the job. And send back the result.
 | 
				
			||||||
func (worker *Worker) exec(job *Job) (err error) {
 | 
					func (worker *Worker) exec(job *Job) (err error) {
 | 
				
			||||||
    if worker.limit != nil {
 | 
					 | 
				
			||||||
        <-worker.limit
 | 
					 | 
				
			||||||
        defer func() {
 | 
					 | 
				
			||||||
            worker.limit <- true
 | 
					 | 
				
			||||||
        }()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    var limit int
 | 
					    var limit int
 | 
				
			||||||
    if job.DataType == common.JOB_ASSIGN {
 | 
					    if job.DataType == common.JOB_ASSIGN {
 | 
				
			||||||
        limit = 3
 | 
					        limit = 3
 | 
				
			||||||
@ -262,7 +257,20 @@ func (worker *Worker) exec(job *Job) (err error) {
 | 
				
			|||||||
    if !ok {
 | 
					    if !ok {
 | 
				
			||||||
        return common.Errorf("The function does not exist: %s", funcname)
 | 
					        return common.Errorf("The function does not exist: %s", funcname)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    result, err := f.f(job)
 | 
					    var result []byte
 | 
				
			||||||
 | 
					    if worker.limit != nil {
 | 
				
			||||||
 | 
					        defer func() {
 | 
				
			||||||
 | 
					            worker.limit <- true
 | 
				
			||||||
 | 
					        }()
 | 
				
			||||||
 | 
					        select {
 | 
				
			||||||
 | 
					        case <-worker.limit:
 | 
				
			||||||
 | 
					        case <-time.After(time.Second * time.Duration(f.timeout)):
 | 
				
			||||||
 | 
					            err = common.Errorf("The function was executed timeout: %s", funcname)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if err == nil {
 | 
				
			||||||
 | 
					        result, err = f.f(job)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    var datatype uint32
 | 
					    var datatype uint32
 | 
				
			||||||
    if err == nil {
 | 
					    if err == nil {
 | 
				
			||||||
        datatype = common.WORK_COMPLETE
 | 
					        datatype = common.WORK_COMPLETE
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user