openreplay/backend/pkg/flakeid/flakeid.go
2021-05-03 17:53:25 +02:00

20 lines
550 B
Go

package flakeid
const (
SEQ_ID_SIZE = 8
SHARD_ID_SIZE = 16
TIMESTAMP_SIZE = 64 - SEQ_ID_SIZE - SHARD_ID_SHIFT
SEQ_ID_MAX = 1<<SEQ_ID_SIZE - 1
TIMESTAMP_MAX = 1<<TIMESTAMP_SIZE - 1
TIMESTAMP_SHIFT = SEQ_ID_SIZE + SHARD_ID_SHIFT
SHARD_ID_SHIFT = SEQ_ID_SIZE
EPOCH = 1550000000000
)
func compose(timestamp uint64, shardID uint16, seqID byte) uint64 {
return (timestamp << TIMESTAMP_SHIFT) | (uint64(shardID) << SHARD_ID_SHIFT) | uint64(seqID)
}
func extractTimestamp(id uint64) uint64 {
return (id >> TIMESTAMP_SHIFT)
}