add comments, code refactor

This commit is contained in:
MaysWind
2020-12-23 00:24:45 +08:00
parent 17d1cd8719
commit 995eeae041
7 changed files with 36 additions and 9 deletions
+19 -9
View File
@@ -17,16 +17,20 @@ import (
"github.com/mayswind/lab/pkg/utils"
)
const REQUEST_ID_LENGTH = 36
const SECONDS_TODAY_BITS = 17
const SECONDS_TODAY_BITS_MASK = (1 << SECONDS_TODAY_BITS) - 1
const RANDOM_NUMBER_BITS = 15
const RANDOM_NUMBER_BITS_MASK = (1 << RANDOM_NUMBER_BITS) - 1
const REQ_SEQ_NUMBER_BITS = 31
const REQ_SEQ_NUMBER_BITS_MASK = (1 << REQ_SEQ_NUMBER_BITS) - 1
const CLIENT_IPV6_BIT = 1
const CLIENT_IPV6_BIT_MASK = 1
// Length and mask of all information in request id
const (
REQUEST_ID_LENGTH = 36
SECONDS_TODAY_BITS = 17
SECONDS_TODAY_BITS_MASK = (1 << SECONDS_TODAY_BITS) - 1
RANDOM_NUMBER_BITS = 15
RANDOM_NUMBER_BITS_MASK = (1 << RANDOM_NUMBER_BITS) - 1
REQ_SEQ_NUMBER_BITS = 31
REQ_SEQ_NUMBER_BITS_MASK = (1 << REQ_SEQ_NUMBER_BITS) - 1
CLIENT_IPV6_BIT = 1
CLIENT_IPV6_BIT_MASK = 1
)
// RequestIdInfo represents a struct which has all information in request id
type RequestIdInfo struct {
ServerUniqId uint16
InstanceUniqId uint16
@@ -37,12 +41,14 @@ type RequestIdInfo struct {
ClientIp uint32
}
// DefaultRequestIdGenerator represents default request id generator
type DefaultRequestIdGenerator struct {
serverUniqId uint16
instanceUniqId uint16
requestSeqId uint32
}
// NewDefaultRequestIdGenerator returns a new default request id generator
func NewDefaultRequestIdGenerator(config *settings.Config) (*DefaultRequestIdGenerator, error) {
serverUniqId, err := getServerUniqId(config)
@@ -94,6 +100,7 @@ func getInstanceUniqId(config *settings.Config) uint16 {
}
// ParseRequestIdInfo returns a info struct which contains all information in request id
func (r *DefaultRequestIdGenerator) ParseRequestIdInfo(requestId string) (*RequestIdInfo, error) {
if requestId == "" || len(requestId) != REQUEST_ID_LENGTH {
return nil, errs.ErrRequestIdInvalid
@@ -103,14 +110,17 @@ func (r *DefaultRequestIdGenerator) ParseRequestIdInfo(requestId string) (*Reque
return r.parseRequestIdInfo(requestIdData), nil
}
// GetCurrentServerUniqId returns current server unique id
func (r *DefaultRequestIdGenerator) GetCurrentServerUniqId() uint16 {
return r.serverUniqId
}
// GetCurrentInstanceUniqId returns current application instance unique id
func (r *DefaultRequestIdGenerator) GetCurrentInstanceUniqId() uint16 {
return r.instanceUniqId
}
// GenerateRequestId returns a new request id
func (r *DefaultRequestIdGenerator) GenerateRequestId(clientIpAddr string) string {
ip := net.ParseIP(clientIpAddr)
isClientIpv6 := ip.To4() == nil
+4
View File
@@ -4,14 +4,17 @@ import (
"github.com/mayswind/lab/pkg/settings"
)
// RequestIdContainer contains the current request id generator
type RequestIdContainer struct {
Current RequestIdGenerator
}
// Initialize a request id container singleton instance
var (
Container = &RequestIdContainer{}
)
// InitializeRequestIdGenerator initialized the current request id generator according to the config
func InitializeRequestIdGenerator(config *settings.Config) error {
generator, err := NewDefaultRequestIdGenerator(config)
@@ -23,6 +26,7 @@ func InitializeRequestIdGenerator(config *settings.Config) error {
return nil
}
// GenerateRequestId returns a new request id by the current request id generator
func (u *RequestIdContainer) GenerateRequestId(clientIpAddr string) string {
return u.Current.GenerateRequestId(clientIpAddr)
}
+1
View File
@@ -1,5 +1,6 @@
package requestid
// RequestIdGenerator is common request generator interface
type RequestIdGenerator interface {
GenerateRequestId(clientIpAddr string) string
GetCurrentServerUniqId() uint16
+6
View File
@@ -7,6 +7,7 @@ import (
"github.com/mayswind/lab/pkg/settings"
)
// Length and mask of all information in uuid
const (
INTERNAL_UUID_UNIX_TIME_BITS = 32
INTERNAL_UUID_UNIX_TIME_MASK = (1 << INTERNAL_UUID_UNIX_TIME_BITS) - 1
@@ -24,6 +25,7 @@ const (
SEQ_NUMBER_ID_MASK = (1 << SEQ_NUMBER_ID_BITS) - 1
)
// InternalUuidInfo represents a struct which has all information in uuid
type InternalUuidInfo struct {
UnixTime uint32
UuidType uint8
@@ -31,11 +33,13 @@ type InternalUuidInfo struct {
SequentialId uint32
}
// InternalUuidGenerator represents internal bundled uuid generator
type InternalUuidGenerator struct {
uuidServerId uint8
uuidSeqNumbers [1 << INTERNAL_UUID_TYPE_BITS]uint64
}
// NewInternalUuidGenerator returns a new internal uuid generator
func NewInternalUuidGenerator(config *settings.Config) (*InternalUuidGenerator, error) {
generator := &InternalUuidGenerator{
uuidServerId: config.UuidServerId,
@@ -44,6 +48,7 @@ func NewInternalUuidGenerator(config *settings.Config) (*InternalUuidGenerator,
return generator, nil
}
// GenerateUuid returns a new uuid
func (u *InternalUuidGenerator) GenerateUuid(idType UuidType) int64 {
// 63bits = unixTime(32bits) + uuidType(4bits) + uuidServerId(8bits) + sequentialNumber(19bits)
@@ -79,6 +84,7 @@ func (u *InternalUuidGenerator) GenerateUuid(idType UuidType) int64 {
return uuid
}
// ParseUuidInfo returns a info struct which contains all information in uuid
func (u *InternalUuidGenerator) ParseUuidInfo(uuid int64) *InternalUuidInfo {
seqId := uint32(uuid & INTERNAL_UUID_SEQ_ID_MASK)
uuid = uuid >> INTERNAL_UUID_SEQ_ID_BITS
+4
View File
@@ -5,14 +5,17 @@ import (
"github.com/mayswind/lab/pkg/settings"
)
// UuidContainer contains the current uuid generator
type UuidContainer struct {
Current UuidGenerator
}
// Initialize a uuid container singleton instance
var (
Container = &UuidContainer{}
)
// InitializeUuidGenerator initialized the current uuid generator according to the config
func InitializeUuidGenerator(config *settings.Config) error {
if config.UuidGeneratorType == settings.UUID_GENERATOR_TYPE_INTERNAL {
generator, err := NewInternalUuidGenerator(config)
@@ -24,6 +27,7 @@ func InitializeUuidGenerator(config *settings.Config) error {
return errs.ErrInvalidUuidMode
}
// GenerateUuid returns a new uuid by the current uuid generator
func (u *UuidContainer) GenerateUuid(uuidType UuidType) int64 {
return u.Current.GenerateUuid(uuidType)
}
+1
View File
@@ -1,5 +1,6 @@
package uuid
// UuidGenerator is common uuid generator interface
type UuidGenerator interface {
GenerateUuid(uuidType UuidType) int64
}
+1
View File
@@ -2,6 +2,7 @@ package uuid
type UuidType uint8
// Types of uuid
const (
UUID_TYPE_DEFAULT UuidType = 0
UUID_TYPE_USER UuidType = 1