From 2f4adc1a2eeac16fa9ee25ee8a2378ac25c1bcd6 Mon Sep 17 00:00:00 2001 From: yitter Date: Mon, 5 Apr 2021 21:21:39 +0800 Subject: [PATCH] auto commit --- C/source/YitIdHelper.c | 7 +--- C/source/YitIdHelper.h | 4 +- C/source/idgen/SnowWorkerM1.c | 38 +++++++++---------- C/source/idgen/SnowWorkerM1.h | 10 ++--- Go/source/idgen/DefaultIdGenerator.go | 2 +- Go/source/idgen/ISnowWorker.go | 2 +- Go/source/idgen/SnowWorkerM1.go | 14 +++---- Go/source/idgen/SnowWorkerM2.go | 4 +- Go/source/idgen/YitIdHelper.go | 2 +- Go/source/main.go | 2 +- README.md | 4 +- .../src/yitgen/contract/i_snow_worker.rs | 2 +- .../yitgen/contract/over_cost_action_arg.rs | 8 ++-- 13 files changed, 46 insertions(+), 53 deletions(-) diff --git a/C/source/YitIdHelper.c b/C/source/YitIdHelper.c index c3b695d..2f9d9a3 100644 --- a/C/source/YitIdHelper.c +++ b/C/source/YitIdHelper.c @@ -13,18 +13,13 @@ extern void SetIdGenerator(IdGeneratorOptions options) { extern void SetWorkerId(uint32_t workerId) { IdGeneratorOptions options = BuildIdGenOptions(workerId); - // SetOptions(options); SetIdGenerator(options); } -extern uint64_t NextId() { +extern int64_t NextId() { return GetIdGenInstance()->NextId(); // IdGenerator *generator = GetIdGenInstance(); // uint64_t id = generator->NextId(); // free(generator); // return id; } - -extern uint64_t TestId() { - return 123456; -} diff --git a/C/source/YitIdHelper.h b/C/source/YitIdHelper.h index 2181b22..ef3f45b 100644 --- a/C/source/YitIdHelper.h +++ b/C/source/YitIdHelper.h @@ -15,7 +15,5 @@ TAP_DLLEXPORT extern void TAP_STDCALL SetWorkerId(uint32_t workerId); TAP_DLLEXPORT -extern uint64_t TAP_STDCALL NextId(); +extern int64_t TAP_STDCALL NextId(); -TAP_DLLEXPORT -extern uint64_t TAP_STDCALL TestId(); diff --git a/C/source/idgen/SnowWorkerM1.c b/C/source/idgen/SnowWorkerM1.c index 82d34bc..30343c5 100644 --- a/C/source/idgen/SnowWorkerM1.c +++ b/C/source/idgen/SnowWorkerM1.c @@ -14,24 +14,24 @@ pthread_mutex_t ThreadMutex = PTHREAD_MUTEX_INITIALIZER; -static void EndOverCostAction(uint64_t useTimeTick, SnowFlakeWorker *worker); +static void EndOverCostAction(int64_t useTimeTick, SnowFlakeWorker *worker); -static uint64_t NextOverCostId(SnowFlakeWorker *worker); +static int64_t NextOverCostId(SnowFlakeWorker *worker); -static uint64_t NextNormalId(SnowFlakeWorker *worker); +static int64_t NextNormalId(SnowFlakeWorker *worker); -static uint64_t CalcId(SnowFlakeWorker *worker); +static int64_t CalcId(SnowFlakeWorker *worker); -static uint64_t CalcTurnBackId(SnowFlakeWorker *worker); +static int64_t CalcTurnBackId(SnowFlakeWorker *worker); -static inline void EndOverCostAction(uint64_t useTimeTick, SnowFlakeWorker *worker) { +static inline void EndOverCostAction(int64_t useTimeTick, SnowFlakeWorker *worker) { if (worker->_TermIndex > 10000) { worker->_TermIndex = 0; } } -static inline uint64_t NextOverCostId(SnowFlakeWorker *worker) { +static inline int64_t NextOverCostId(SnowFlakeWorker *worker) { uint64_t currentTimeTick = GetCurrentTimeTick(worker); if (currentTimeTick > worker->_LastTimeTick) { EndOverCostAction(currentTimeTick, worker); @@ -64,7 +64,7 @@ static inline uint64_t NextOverCostId(SnowFlakeWorker *worker) { return CalcId(worker); } -static inline uint64_t NextNormalId(SnowFlakeWorker *worker) { +static inline int64_t NextNormalId(SnowFlakeWorker *worker) { uint64_t currentTimeTick = GetCurrentTimeTick(worker); if (currentTimeTick < worker->_LastTimeTick) { if (worker->_TurnBackTimeTick < 1) { @@ -102,14 +102,14 @@ static inline uint64_t NextNormalId(SnowFlakeWorker *worker) { return CalcId(worker); } -static inline uint64_t CalcId(SnowFlakeWorker *worker) { +static inline int64_t CalcId(SnowFlakeWorker *worker) { uint64_t result = (worker->_LastTimeTick << worker->_TimestampShift) | (worker->WorkerId << worker->SeqBitLength) | (worker->_CurrentSeqNumber); worker->_CurrentSeqNumber++; return result; } -static inline uint64_t CalcTurnBackId(SnowFlakeWorker *worker) { +static inline int64_t CalcTurnBackId(SnowFlakeWorker *worker) { uint64_t result = (worker->_LastTimeTick << worker->_TimestampShift) | (worker->WorkerId << worker->SeqBitLength) | (worker->_TurnBackTimeTick); worker->_TurnBackTimeTick--; @@ -130,36 +130,36 @@ extern SnowFlakeWorker *NewSnowFlakeWorker() { return worker; } -extern uint64_t WorkerM1NextId(SnowFlakeWorker *worker) { +extern int64_t WorkerM1NextId(SnowFlakeWorker *worker) { pthread_mutex_lock(&ThreadMutex); - uint64_t id = worker->_IsOverCost ? NextOverCostId(worker) : NextNormalId(worker); + int64_t id = worker->_IsOverCost ? NextOverCostId(worker) : NextNormalId(worker); pthread_mutex_unlock(&ThreadMutex); return id; } -extern uint64_t GetCurrentTimeTick(SnowFlakeWorker *worker) { +extern int64_t GetCurrentTimeTick(SnowFlakeWorker *worker) { struct timeval tv; gettimeofday(&tv, NULL); - return ((uint64_t) tv.tv_sec * 1000 + tv.tv_usec / 1000 - worker->BaseTime); + return ((int64_t) tv.tv_sec * 1000 + tv.tv_usec / 1000 - worker->BaseTime); } -extern uint64_t GetCurrentTime() { +extern int64_t GetCurrentTime() { struct timeval tv; gettimeofday(&tv, NULL); - return ((uint64_t) (tv.tv_sec)) * 1000 + tv.tv_usec / 1000; + return ((int64_t) (tv.tv_sec)) * 1000 + tv.tv_usec / 1000; //static struct timeb t1; // ftime(&t1); // return (uint64_t) ((t1.time * 1000 + t1.millitm)); } -extern uint64_t GetCurrentMicroTime() { +extern int64_t GetCurrentMicroTime() { struct timeval tv; gettimeofday(&tv, NULL); - return ((uint64_t) tv.tv_sec * 1000000 + tv.tv_usec); + return ((int64_t) tv.tv_sec * 1000000 + tv.tv_usec); } -extern uint64_t GetNextTimeTick(SnowFlakeWorker *worker) { +extern int64_t GetNextTimeTick(SnowFlakeWorker *worker) { uint64_t tempTimeTicker = GetCurrentTimeTick(worker); while (tempTimeTicker <= worker->_LastTimeTick) { tempTimeTicker = GetCurrentTimeTick(worker); diff --git a/C/source/idgen/SnowWorkerM1.h b/C/source/idgen/SnowWorkerM1.h index d2d6925..4f415de 100644 --- a/C/source/idgen/SnowWorkerM1.h +++ b/C/source/idgen/SnowWorkerM1.h @@ -41,13 +41,13 @@ typedef struct SnowFlakeWorker { extern SnowFlakeWorker *NewSnowFlakeWorker(); -extern uint64_t WorkerM1NextId(SnowFlakeWorker *worker); +extern int64_t WorkerM1NextId(SnowFlakeWorker *worker); -extern uint64_t GetCurrentTimeTick(SnowFlakeWorker *worker); +extern int64_t GetCurrentTimeTick(SnowFlakeWorker *worker); -extern uint64_t GetNextTimeTick(SnowFlakeWorker *worker); +extern int64_t GetNextTimeTick(SnowFlakeWorker *worker); -extern uint64_t GetCurrentTime(); +extern int64_t GetCurrentTime(); -extern uint64_t GetCurrentMicroTime(); +extern int64_t GetCurrentMicroTime(); diff --git a/Go/source/idgen/DefaultIdGenerator.go b/Go/source/idgen/DefaultIdGenerator.go index a07efa0..b1c47c7 100644 --- a/Go/source/idgen/DefaultIdGenerator.go +++ b/Go/source/idgen/DefaultIdGenerator.go @@ -84,6 +84,6 @@ func NewDefaultIdGenerator(options *IdGeneratorOptions) *DefaultIdGenerator { } } -func (dig DefaultIdGenerator) NewLong() uint64 { +func (dig DefaultIdGenerator) NewLong() int64 { return dig.SnowWorker.NextId() } diff --git a/Go/source/idgen/ISnowWorker.go b/Go/source/idgen/ISnowWorker.go index 1e15cc2..2eac0c3 100644 --- a/Go/source/idgen/ISnowWorker.go +++ b/Go/source/idgen/ISnowWorker.go @@ -7,5 +7,5 @@ package idgen type ISnowWorker interface { - NextId() uint64 + NextId() int64 } diff --git a/Go/source/idgen/SnowWorkerM1.go b/Go/source/idgen/SnowWorkerM1.go index 115798d..7e32f4d 100644 --- a/Go/source/idgen/SnowWorkerM1.go +++ b/Go/source/idgen/SnowWorkerM1.go @@ -128,7 +128,7 @@ func (m1 *SnowWorkerM1) EndTurnBackAction(useTimeTick int64) { } -func (m1 *SnowWorkerM1) NextOverCostId() uint64 { +func (m1 *SnowWorkerM1) NextOverCostId() int64 { currentTimeTick := m1.GetCurrentTimeTick() if currentTimeTick > m1._LastTimeTick { m1.EndOverCostAction(currentTimeTick) @@ -163,7 +163,7 @@ func (m1 *SnowWorkerM1) NextOverCostId() uint64 { } // NextNormalID . -func (m1 *SnowWorkerM1) NextNormalId() uint64 { +func (m1 *SnowWorkerM1) NextNormalId() int64 { currentTimeTick := m1.GetCurrentTimeTick() if currentTimeTick < m1._LastTimeTick { if m1._TurnBackTimeTick < 1 { @@ -209,15 +209,15 @@ func (m1 *SnowWorkerM1) NextNormalId() uint64 { } // CalcID . -func (m1 *SnowWorkerM1) CalcId(useTimeTick int64) uint64 { - result := uint64(useTimeTick<❄ 原生支持 C#/Java/Go/Rust/C 等语言,并由 Rust 提供 PHP、Python、Node.js、Ruby 等语言多线程安全调用库(FFI)。如果你的应用有语言开发,基于本算法提供的逻辑实现,集成会更简单,逻辑会更一致。 - 支持 k8s 等容器化部署,自动注册 WorkerId。 + 支持 k8s 等容器化部署,水平复制,自动注册 WorkerId。 可在单机或分布式环境中生成唯一ID。 @@ -221,4 +221,4 @@ redis作用 [31]: https://gitee.com/yitter/idgenerator/tree/master/Go [41]: https://gite.com/yitter/idgenerator/tree/master/Rust [51]: https://gitee.com/yitter/idgenerator/tree/master/C -[61]: https://gitee.com/yitter/idgenerator/tree/master/ZeOthers/Vlang \ No newline at end of file +[61]: https://gitee.com/yitter/idgenerator/tree/master/ZeOthers/Vlang diff --git a/Rust/source/src/yitgen/contract/i_snow_worker.rs b/Rust/source/src/yitgen/contract/i_snow_worker.rs index 303d553..370e810 100644 --- a/Rust/source/src/yitgen/contract/i_snow_worker.rs +++ b/Rust/source/src/yitgen/contract/i_snow_worker.rs @@ -3,5 +3,5 @@ * 开源地址:https://gitee.com/yitter/idgenerator */ pub trait ISnowWorker { - fn NextId(&self) -> u64; + fn NextId(&self) -> i64; } \ No newline at end of file diff --git a/Rust/source/src/yitgen/contract/over_cost_action_arg.rs b/Rust/source/src/yitgen/contract/over_cost_action_arg.rs index 79f704d..21af799 100644 --- a/Rust/source/src/yitgen/contract/over_cost_action_arg.rs +++ b/Rust/source/src/yitgen/contract/over_cost_action_arg.rs @@ -4,9 +4,9 @@ */ pub struct OverCostActionArg { ActionType: u32, - TimeTick: u64, + TimeTick: i64, WorkerId: u16, - OverCostCountInOneTerm: u32, - GenCountInOneTerm: u32, - TermIndex: u32, + OverCostCountInOneTerm: i32, + GenCountInOneTerm: i32, + TermIndex: i32, } \ No newline at end of file