Remove depenance on external libs for unique id

This commit is contained in:
Paul Mach 2013-08-25 22:41:58 -07:00
parent f3b4013e2b
commit 5e215b9257
3 changed files with 32 additions and 22 deletions

View File

@ -20,7 +20,7 @@ var (
) )
func init() { func init() {
IdGen = NewObjectId() IdGen = NewAutoIncId()
} }
// Status handler // Status handler

View File

@ -1,37 +1,29 @@
package client package client
import ( import (
"strconv" "strconv"
"labix.org/v2/mgo/bson" "sync/atomic"
"github.com/mikespook/golib/autoinc" "time"
) )
type IdGenerator interface { type IdGenerator interface {
Id() string Id() string
}
// ObjectId
type objectId struct {
bson.ObjectId
}
func (id *objectId) Id() string {
return id.Hex()
}
func NewObjectId() IdGenerator {
return &objectId{bson.NewObjectId()}
} }
// AutoIncId // AutoIncId
type autoincId struct { type autoincId struct {
*autoinc.AutoInc value int64
} }
func (id *autoincId) Id() string { func (ai *autoincId) Id() string {
return strconv.Itoa(id.AutoInc.Id()) next := atomic.AddInt64(&ai.value, 1)
return strconv.FormatInt(next, 10)
} }
func NewAutoIncId() IdGenerator { func NewAutoIncId() IdGenerator {
return &autoincId{autoinc.New(1, 1)} // 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
View 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
}
}