forked from yuxh/gearman-go
		
	removed outside dependency
This commit is contained in:
		
						commit
						9daac76f67
					
				@ -9,7 +9,6 @@ import (
 | 
			
		||||
	"io"
 | 
			
		||||
	"net"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"github.com/mikespook/golib/idgen"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@ -30,7 +29,6 @@ type Client struct {
 | 
			
		||||
	mutex        sync.RWMutex
 | 
			
		||||
 | 
			
		||||
	ErrorHandler ErrorHandler
 | 
			
		||||
	IdGen idgen.IdGen
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Create a new client.
 | 
			
		||||
@ -44,7 +42,6 @@ func New(net, addr string) (client *Client, err error) {
 | 
			
		||||
		respHandler:  make(map[string]ResponseHandler, QUEUE_SIZE),
 | 
			
		||||
		innerHandler: make(map[string]ResponseHandler, QUEUE_SIZE),
 | 
			
		||||
		in:           make(chan []byte, QUEUE_SIZE),
 | 
			
		||||
		IdGen:        idgen.NewObjectId(),
 | 
			
		||||
	}
 | 
			
		||||
	if err = client.connect(); err != nil {
 | 
			
		||||
		return
 | 
			
		||||
@ -191,7 +188,7 @@ func (client *Client) handleInner(key string, resp *Response) {
 | 
			
		||||
// Internal do
 | 
			
		||||
func (client *Client) do(funcname string, data []byte,
 | 
			
		||||
	flag uint32) (handle string, err error) {
 | 
			
		||||
	id := client.IdGen.Id().(string)
 | 
			
		||||
	id := IdGen.Id()
 | 
			
		||||
	req := getJob(id, []byte(funcname), data)
 | 
			
		||||
	req.DataType = flag
 | 
			
		||||
	client.write(req)
 | 
			
		||||
 | 
			
		||||
@ -35,8 +35,12 @@ func TestClientEcho(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestClientDoBg(t *testing.T) {
 | 
			
		||||
	if handle := client.DoBg("ToUpper", []byte("abcdef"),
 | 
			
		||||
		JOB_LOW); handle == "" {
 | 
			
		||||
	handle, err := client.DoBg("ToUpper", []byte("abcdef"), JOB_LOW)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Error(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if handle == "" {
 | 
			
		||||
		t.Error("Handle is empty.")
 | 
			
		||||
	} else {
 | 
			
		||||
		t.Log(handle)
 | 
			
		||||
@ -53,8 +57,13 @@ func TestClientDo(t *testing.T) {
 | 
			
		||||
		}
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if handle := client.Do("ToUpper", []byte("abcdef"),
 | 
			
		||||
		JOB_LOW, jobHandler); handle == "" {
 | 
			
		||||
	handle, err := client.Do("ToUpper", []byte("abcdef"),
 | 
			
		||||
		JOB_LOW, jobHandler)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Error(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if handle == "" {
 | 
			
		||||
		t.Error("Handle is empty.")
 | 
			
		||||
	} else {
 | 
			
		||||
		t.Log(handle)
 | 
			
		||||
@ -76,7 +85,11 @@ func TestClientStatus(t *testing.T) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	handle := client.Do("Delay5sec", []byte("abcdef"), JOB_LOW, nil)
 | 
			
		||||
	handle, err := client.Do("Delay5sec", []byte("abcdef"), JOB_LOW, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Error(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	status, err = client.Status(handle)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Error(err)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								client/id.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								client/id.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
package client
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"time"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"sync/atomic"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	IdGen IdGenerator
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	IdGen = NewAutoIncId()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type IdGenerator interface {
 | 
			
		||||
	Id() string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AutoIncId
 | 
			
		||||
type autoincId struct {
 | 
			
		||||
	value int64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ai *autoincId) Id() string {
 | 
			
		||||
	next := atomic.AddInt64(&ai.value, 1)
 | 
			
		||||
	return strconv.FormatInt(next, 10)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewAutoIncId() IdGenerator {
 | 
			
		||||
	// we'll consider the nano fraction of a second at startup unique
 | 
			
		||||
	// and count up from there.
 | 
			
		||||
	return &autoincId{
 | 
			
		||||
		value: int64(time.Now().Nanosecond()) << 32,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								client/id_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								client/id_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
package client
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestAutoInc(t *testing.T) {
 | 
			
		||||
	ai := NewAutoIncId()
 | 
			
		||||
 | 
			
		||||
	previous := ai.Id()
 | 
			
		||||
	for i := 0; i < 10; i++ {
 | 
			
		||||
		id := ai.Id()
 | 
			
		||||
		if id == previous {
 | 
			
		||||
			t.Errorf("Id not unique, previous and current %s", id)
 | 
			
		||||
		}
 | 
			
		||||
		previous = id
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -39,8 +39,13 @@ func TestPoolEcho(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPoolDoBg(t *testing.T) {
 | 
			
		||||
	if addr, handle := pool.DoBg("ToUpper", []byte("abcdef"),
 | 
			
		||||
		JOB_LOW); handle == "" {
 | 
			
		||||
	addr, handle, err := pool.DoBg("ToUpper",
 | 
			
		||||
		[]byte("abcdef"), JOB_LOW);
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Error(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if handle == "" {
 | 
			
		||||
		t.Error("Handle is empty.")
 | 
			
		||||
	} else {
 | 
			
		||||
		t.Log(addr, handle)
 | 
			
		||||
@ -57,8 +62,12 @@ func TestPoolDo(t *testing.T) {
 | 
			
		||||
		}
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if addr, handle := pool.Do("ToUpper", []byte("abcdef"),
 | 
			
		||||
		JOB_LOW, jobHandler); handle == "" {
 | 
			
		||||
	addr, handle, err := pool.Do("ToUpper",
 | 
			
		||||
		[]byte("abcdef"), JOB_LOW, jobHandler)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Error(err)
 | 
			
		||||
	}
 | 
			
		||||
	if handle == "" {
 | 
			
		||||
		t.Error("Handle is empty.")
 | 
			
		||||
	} else {
 | 
			
		||||
		t.Log(addr, handle)
 | 
			
		||||
@ -77,7 +86,12 @@ func TestPoolStatus(t *testing.T) {
 | 
			
		||||
	if status.Running {
 | 
			
		||||
		t.Errorf("The job (%s) shouldn't be running.", status.Handle)
 | 
			
		||||
	}
 | 
			
		||||
	addr, handle := pool.Do("Delay5sec", []byte("abcdef"), JOB_LOW, nil)
 | 
			
		||||
	addr, handle, err := pool.Do("Delay5sec",
 | 
			
		||||
		[]byte("abcdef"), JOB_LOW, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Error(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	status, err = pool.Status(addr, handle)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Error(err)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user