Fixed a bug, that encoding the job but without the handle infomation.
This commit is contained in:
parent
a6fab88b22
commit
bf0c48b87f
@ -112,12 +112,11 @@ func (worker * Worker) Work() {
|
||||
switch job.dataType {
|
||||
case NO_JOB:
|
||||
// do nothing
|
||||
log.Println(job)
|
||||
case ERROR:
|
||||
log.Println(string(job.Data))
|
||||
case JOB_ASSIGN, JOB_ASSIGN_UNIQ:
|
||||
if err := worker.exec(job); err != nil {
|
||||
log.Panicln(err)
|
||||
log.Println(err)
|
||||
}
|
||||
continue
|
||||
default:
|
||||
@ -154,6 +153,7 @@ func (worker * Worker) WriteJob(job *Job) (err os.Error) {
|
||||
e := make(chan os.Error)
|
||||
for _, v := range worker.clients {
|
||||
go func() {
|
||||
log.Println(v)
|
||||
e <- v.WriteJob(job)
|
||||
}()
|
||||
}
|
||||
@ -189,7 +189,13 @@ func (worker * Worker) exec(job *Job) (err os.Error) {
|
||||
job.UniqueId = string(jobdata[2])
|
||||
job.Data = jobdata[3]
|
||||
}
|
||||
result, err := worker.functions[funcname](job)
|
||||
f := worker.functions[funcname]
|
||||
if f == nil {
|
||||
return os.NewError("function is nil")
|
||||
}
|
||||
result, err := f(job)
|
||||
log.Println(result)
|
||||
log.Println(err)
|
||||
var datatype uint32
|
||||
if err == nil {
|
||||
datatype = WORK_COMPLETE
|
||||
@ -200,23 +206,27 @@ func (worker * Worker) exec(job *Job) (err os.Error) {
|
||||
datatype = WORK_EXCEPTION
|
||||
}
|
||||
}
|
||||
worker.WriteJob(NewJob(REQ, datatype, result))
|
||||
job.magicCode = REQ
|
||||
job.dataType = datatype
|
||||
job.Data = result
|
||||
|
||||
worker.WriteJob(job)
|
||||
return
|
||||
}
|
||||
|
||||
func splitByteArray(slice []byte, spot byte) (data [][]byte){
|
||||
data = make([][]byte, 0, 10)
|
||||
log.Println(data)
|
||||
start, end := 0, 0
|
||||
for i, v := range slice {
|
||||
if v == spot {
|
||||
if start != end {
|
||||
data = append(data, slice[start:end])
|
||||
}
|
||||
start, end = i, i
|
||||
start, end = i + 1, i + 1
|
||||
} else {
|
||||
end ++
|
||||
}
|
||||
}
|
||||
data = append(data, slice[start:])
|
||||
return
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package gearman
|
||||
|
||||
import (
|
||||
"os"
|
||||
"log"
|
||||
)
|
||||
|
||||
type Job struct {
|
||||
@ -42,23 +43,27 @@ func DecodeJob(data []byte) (job *Job, err os.Error) {
|
||||
if len(data[12:]) != int(l) {
|
||||
return nil, os.NewError("Invalid data length.")
|
||||
}
|
||||
switch(byteToUint32([4]byte{data[4], data[5], data[6], data[7]})) {
|
||||
case ECHO_RES:
|
||||
data = data[12:]
|
||||
}
|
||||
data = data[12:]
|
||||
return NewJob(REQ, datatype, data), err
|
||||
}
|
||||
|
||||
func (job *Job) Encode() (data []byte) {
|
||||
magiccode := uint32ToByte(job.magicCode)
|
||||
datatype := uint32ToByte(job.dataType)
|
||||
data = make([]byte, 0, 1024 * 64)
|
||||
data = append(data, magiccode[:] ...)
|
||||
data = append(data, datatype[:] ...)
|
||||
data = append(data, []byte{0, 0, 0, 0} ...)
|
||||
l := len(job.Data)
|
||||
if job.Handle != "" {
|
||||
data = append(data, []byte(job.Handle) ...)
|
||||
data = append(data, 0)
|
||||
l += len(job.Handle) + 1
|
||||
}
|
||||
data = append(data, job.Data ...)
|
||||
datalength := uint32ToByte(uint32(l))
|
||||
data = make([]byte, 12 + l)
|
||||
copy(data[:4], magiccode[:])
|
||||
copy(data[4:8], datatype[:])
|
||||
copy(data[8:12], datalength[:])
|
||||
copy(data[12:], job.Data)
|
||||
log.Println(data)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,7 @@ package gearman
|
||||
import (
|
||||
"net"
|
||||
"os"
|
||||
// "log"
|
||||
"log"
|
||||
)
|
||||
|
||||
type jobClient struct {
|
||||
@ -22,6 +22,7 @@ func newJobClient(addr string, incoming chan *Job) (jobclient *jobClient, err os
|
||||
}
|
||||
|
||||
func (client *jobClient) Work() (err os.Error) {
|
||||
log.Println("Job client work().")
|
||||
noop := true
|
||||
for client.running {
|
||||
// grab job
|
||||
@ -65,6 +66,7 @@ func (client *jobClient) WriteJob(job * Job) (err os.Error) {
|
||||
}
|
||||
|
||||
func (client *jobClient) Write(buf []byte) (err os.Error) {
|
||||
log.Println(buf)
|
||||
var n int
|
||||
for i := 0; i < len(buf); i += n {
|
||||
n, err = client.conn.Write(buf[i:])
|
||||
|
Loading…
Reference in New Issue
Block a user