influxdb/snowflake/id.go

35 lines
576 B
Go
Raw Normal View History

package snowflake
import (
2018-08-01 18:54:32 +00:00
"encoding/binary"
"math/rand"
"time"
"github.com/influxdata/influxdb/pkg/snowflake"
"github.com/influxdata/platform"
)
2018-08-01 18:54:32 +00:00
// TODO: rename to id.go
func init() {
rand.Seed(time.Now().UnixNano())
}
type IDGenerator struct {
Generator *snowflake.Generator
}
func NewIDGenerator() *IDGenerator {
return &IDGenerator{
// Maximum machine id is 1023
Generator: snowflake.New(rand.Intn(1023)),
}
}
2018-07-30 14:29:04 +00:00
func (g *IDGenerator) ID() platform.ID {
2018-08-01 18:54:32 +00:00
id := make(platform.ID, 8)
i := g.Generator.Next()
binary.BigEndian.PutUint64(id, i)
2018-07-30 14:29:04 +00:00
return id
}