From 2b5744c3e7907264ea605c754927639fec7bbd3d Mon Sep 17 00:00:00 2001 From: yitter Date: Sat, 27 Mar 2021 19:49:58 +0800 Subject: [PATCH] auto commit --- Rust/source/src/lib.rs | 6 ++++++ Rust/source/src/yitgen/contract/id_generator_options.rs | 2 +- Rust/source/src/yitgen/core/snow_worker_m1.rs | 6 +++--- Rust/source/src/yitgen/gen/yit_id_helper.rs | 8 +++++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Rust/source/src/lib.rs b/Rust/source/src/lib.rs index 0924dae..080215e 100644 --- a/Rust/source/src/lib.rs +++ b/Rust/source/src/lib.rs @@ -1,4 +1,5 @@ mod yitgen; + use yitgen::gen::YitIdHelper; use yitgen::contract::*; @@ -8,6 +9,11 @@ pub extern "C" fn SetIdGenerator(options: IdGeneratorOptions) { YitIdHelper::SetIdGenerator(options); } +#[no_mangle] +pub extern "C" fn SetWorkerId(workerId: u32) { + YitIdHelper::SetWorkerId(workerId); +} + #[no_mangle] pub extern "C" fn NextId() -> i64 { YitIdHelper::NextId() diff --git a/Rust/source/src/yitgen/contract/id_generator_options.rs b/Rust/source/src/yitgen/contract/id_generator_options.rs index ab5a634..f190505 100644 --- a/Rust/source/src/yitgen/contract/id_generator_options.rs +++ b/Rust/source/src/yitgen/contract/id_generator_options.rs @@ -16,7 +16,7 @@ pub struct IdGeneratorOptions { pub SeqBitLength: u8, /// 最大序列数(含),(由 SeqBitLength 计算的最大值) pub MaxSeqNumber: u32, - /// 最小序列数(含),默认5,不小于1,不大于 MaxSeqNumber + /// 最小序列数(含),默认5,不小于5,不大于 MaxSeqNumber pub MinSeqNumber: u32, /// 最大漂移次数(含),默认2000,推荐范围 500-20000(与计算能力有关) pub TopOverCostCount: u32, diff --git a/Rust/source/src/yitgen/core/snow_worker_m1.rs b/Rust/source/src/yitgen/core/snow_worker_m1.rs index 0117f7f..7ed297e 100644 --- a/Rust/source/src/yitgen/core/snow_worker_m1.rs +++ b/Rust/source/src/yitgen/core/snow_worker_m1.rs @@ -89,10 +89,10 @@ impl SnowWorkerM1 { } // MinSeqNumber - if options.MinSeqNumber > maxSeqNumber { - panic!("MinSeqNumber error. (range:[1, {}]", maxSeqNumber); + if options.MinSeqNumber > maxSeqNumber || options.MinSeqNumber < 5 { + panic!("MinSeqNumber error. (range:[5, {}]", maxSeqNumber); } else { - self.MinSeqNumber = options.MinSeqNumber; + self.MinSeqNumber = if options.MinSeqNumber <= 0 { 5 } else { options.MinSeqNumber }; } self.TopOverCostCount = if options.TopOverCostCount == 0 { 2000 } else { options.TopOverCostCount }; diff --git a/Rust/source/src/yitgen/gen/yit_id_helper.rs b/Rust/source/src/yitgen/gen/yit_id_helper.rs index 19bd403..ae1e5e7 100644 --- a/Rust/source/src/yitgen/gen/yit_id_helper.rs +++ b/Rust/source/src/yitgen/gen/yit_id_helper.rs @@ -13,7 +13,6 @@ pub struct YitIdHelper; static mut idGenInstance: Option>> = None; impl YitIdHelper { - fn IdGenInstance() -> Arc> { unsafe { idGenInstance.get_or_insert_with(|| { @@ -28,6 +27,13 @@ impl YitIdHelper { idgen.Worker.SetOptions(options); } + pub fn SetWorkerId(workerId: u32) { + let mut idgenArc = YitIdHelper::IdGenInstance(); + let mut idgen = idgenArc.lock().unwrap(); + let mut options = IdGeneratorOptions::New(workerId); + idgen.Worker.SetOptions(options); + } + pub fn NextId() -> i64 { let mut idgenArc = YitIdHelper::IdGenInstance(); let mut idgen = idgenArc.lock().unwrap(); -- GitLab