removed outside dependency
This commit is contained in:
commit
9daac76f67
@ -9,7 +9,6 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"sync"
|
"sync"
|
||||||
"github.com/mikespook/golib/idgen"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -30,7 +29,6 @@ type Client struct {
|
|||||||
mutex sync.RWMutex
|
mutex sync.RWMutex
|
||||||
|
|
||||||
ErrorHandler ErrorHandler
|
ErrorHandler ErrorHandler
|
||||||
IdGen idgen.IdGen
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new client.
|
// Create a new client.
|
||||||
@ -44,7 +42,6 @@ func New(net, addr string) (client *Client, err error) {
|
|||||||
respHandler: make(map[string]ResponseHandler, QUEUE_SIZE),
|
respHandler: make(map[string]ResponseHandler, QUEUE_SIZE),
|
||||||
innerHandler: make(map[string]ResponseHandler, QUEUE_SIZE),
|
innerHandler: make(map[string]ResponseHandler, QUEUE_SIZE),
|
||||||
in: make(chan []byte, QUEUE_SIZE),
|
in: make(chan []byte, QUEUE_SIZE),
|
||||||
IdGen: idgen.NewObjectId(),
|
|
||||||
}
|
}
|
||||||
if err = client.connect(); err != nil {
|
if err = client.connect(); err != nil {
|
||||||
return
|
return
|
||||||
@ -191,7 +188,7 @@ func (client *Client) handleInner(key string, resp *Response) {
|
|||||||
// Internal do
|
// Internal do
|
||||||
func (client *Client) do(funcname string, data []byte,
|
func (client *Client) do(funcname string, data []byte,
|
||||||
flag uint32) (handle string, err error) {
|
flag uint32) (handle string, err error) {
|
||||||
id := client.IdGen.Id().(string)
|
id := IdGen.Id()
|
||||||
req := getJob(id, []byte(funcname), data)
|
req := getJob(id, []byte(funcname), data)
|
||||||
req.DataType = flag
|
req.DataType = flag
|
||||||
client.write(req)
|
client.write(req)
|
||||||
|
@ -35,8 +35,12 @@ func TestClientEcho(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestClientDoBg(t *testing.T) {
|
func TestClientDoBg(t *testing.T) {
|
||||||
if handle := client.DoBg("ToUpper", []byte("abcdef"),
|
handle, err := client.DoBg("ToUpper", []byte("abcdef"), JOB_LOW)
|
||||||
JOB_LOW); handle == "" {
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if handle == "" {
|
||||||
t.Error("Handle is empty.")
|
t.Error("Handle is empty.")
|
||||||
} else {
|
} else {
|
||||||
t.Log(handle)
|
t.Log(handle)
|
||||||
@ -53,8 +57,13 @@ func TestClientDo(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if handle := client.Do("ToUpper", []byte("abcdef"),
|
handle, err := client.Do("ToUpper", []byte("abcdef"),
|
||||||
JOB_LOW, jobHandler); handle == "" {
|
JOB_LOW, jobHandler)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if handle == "" {
|
||||||
t.Error("Handle is empty.")
|
t.Error("Handle is empty.")
|
||||||
} else {
|
} else {
|
||||||
t.Log(handle)
|
t.Log(handle)
|
||||||
@ -76,7 +85,11 @@ func TestClientStatus(t *testing.T) {
|
|||||||
return
|
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)
|
status, err = client.Status(handle)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
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) {
|
func TestPoolDoBg(t *testing.T) {
|
||||||
if addr, handle := pool.DoBg("ToUpper", []byte("abcdef"),
|
addr, handle, err := pool.DoBg("ToUpper",
|
||||||
JOB_LOW); handle == "" {
|
[]byte("abcdef"), JOB_LOW);
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if handle == "" {
|
||||||
t.Error("Handle is empty.")
|
t.Error("Handle is empty.")
|
||||||
} else {
|
} else {
|
||||||
t.Log(addr, handle)
|
t.Log(addr, handle)
|
||||||
@ -57,8 +62,12 @@ func TestPoolDo(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if addr, handle := pool.Do("ToUpper", []byte("abcdef"),
|
addr, handle, err := pool.Do("ToUpper",
|
||||||
JOB_LOW, jobHandler); handle == "" {
|
[]byte("abcdef"), JOB_LOW, jobHandler)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
if handle == "" {
|
||||||
t.Error("Handle is empty.")
|
t.Error("Handle is empty.")
|
||||||
} else {
|
} else {
|
||||||
t.Log(addr, handle)
|
t.Log(addr, handle)
|
||||||
@ -77,7 +86,12 @@ func TestPoolStatus(t *testing.T) {
|
|||||||
if status.Running {
|
if status.Running {
|
||||||
t.Errorf("The job (%s) shouldn't be running.", status.Handle)
|
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)
|
status, err = pool.Status(addr, handle)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
Loading…
Reference in New Issue
Block a user