From 995eeae0413fdc084b016af2347971c044ea876e Mon Sep 17 00:00:00 2001 From: MaysWind Date: Wed, 23 Dec 2020 00:24:45 +0800 Subject: [PATCH] add comments, code refactor --- pkg/requestid/default_request_id_generator.go | 28 +++++++++++++------ pkg/requestid/request_id_container.go | 4 +++ pkg/requestid/request_id_generator.go | 1 + pkg/uuid/internal_generator.go | 6 ++++ pkg/uuid/uuid_container.go | 4 +++ pkg/uuid/uuid_generator.go | 1 + pkg/uuid/uuid_type.go | 1 + 7 files changed, 36 insertions(+), 9 deletions(-) diff --git a/pkg/requestid/default_request_id_generator.go b/pkg/requestid/default_request_id_generator.go index 41af9618..3179de7e 100644 --- a/pkg/requestid/default_request_id_generator.go +++ b/pkg/requestid/default_request_id_generator.go @@ -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 diff --git a/pkg/requestid/request_id_container.go b/pkg/requestid/request_id_container.go index b486201c..c49789a2 100644 --- a/pkg/requestid/request_id_container.go +++ b/pkg/requestid/request_id_container.go @@ -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) } diff --git a/pkg/requestid/request_id_generator.go b/pkg/requestid/request_id_generator.go index c85cf683..b57b598d 100644 --- a/pkg/requestid/request_id_generator.go +++ b/pkg/requestid/request_id_generator.go @@ -1,5 +1,6 @@ package requestid +// RequestIdGenerator is common request generator interface type RequestIdGenerator interface { GenerateRequestId(clientIpAddr string) string GetCurrentServerUniqId() uint16 diff --git a/pkg/uuid/internal_generator.go b/pkg/uuid/internal_generator.go index db96dc43..1d9252ef 100644 --- a/pkg/uuid/internal_generator.go +++ b/pkg/uuid/internal_generator.go @@ -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 diff --git a/pkg/uuid/uuid_container.go b/pkg/uuid/uuid_container.go index 2f9242c5..8b2eabee 100644 --- a/pkg/uuid/uuid_container.go +++ b/pkg/uuid/uuid_container.go @@ -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) } diff --git a/pkg/uuid/uuid_generator.go b/pkg/uuid/uuid_generator.go index e673a0ac..f8a545f6 100644 --- a/pkg/uuid/uuid_generator.go +++ b/pkg/uuid/uuid_generator.go @@ -1,5 +1,6 @@ package uuid +// UuidGenerator is common uuid generator interface type UuidGenerator interface { GenerateUuid(uuidType UuidType) int64 } diff --git a/pkg/uuid/uuid_type.go b/pkg/uuid/uuid_type.go index 3758c1c4..f58e835b 100644 --- a/pkg/uuid/uuid_type.go +++ b/pkg/uuid/uuid_type.go @@ -2,6 +2,7 @@ package uuid type UuidType uint8 +// Types of uuid const ( UUID_TYPE_DEFAULT UuidType = 0 UUID_TYPE_USER UuidType = 1