From 04ec749c3caaacf12d1bbc5d988601e6c5d7eb26 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sat, 16 Sep 2023 23:53:45 +0800 Subject: [PATCH] fix the bug that old uuid may be generated sometimes --- pkg/uuid/internal_generator.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/uuid/internal_generator.go b/pkg/uuid/internal_generator.go index 4eb1f39b..fa3bb966 100644 --- a/pkg/uuid/internal_generator.go +++ b/pkg/uuid/internal_generator.go @@ -77,10 +77,13 @@ func (u *InternalUuidGenerator) GenerateUuids(idType UuidType, count uint8) []in for { unixTime = uint64(time.Now().Unix()) newLastSeqId = u.uuidSeqNumbers[uuidType].Add(uint64(count)) + newSeqUnixTime := newLastSeqId >> seqNumberIdBits - if newLastSeqId>>seqNumberIdBits == unixTime { + if unixTime == newSeqUnixTime { newFirstSeqId = newLastSeqId - uint64(count-1) break + } else if unixTime < newSeqUnixTime { + continue } currentSeqId := newLastSeqId