提交 2b5744c3 编写于 作者: yitter's avatar yitter

auto commit

上级 561e1a1b
mod yitgen; mod yitgen;
use yitgen::gen::YitIdHelper; use yitgen::gen::YitIdHelper;
use yitgen::contract::*; use yitgen::contract::*;
...@@ -8,6 +9,11 @@ pub extern "C" fn SetIdGenerator(options: IdGeneratorOptions) { ...@@ -8,6 +9,11 @@ pub extern "C" fn SetIdGenerator(options: IdGeneratorOptions) {
YitIdHelper::SetIdGenerator(options); YitIdHelper::SetIdGenerator(options);
} }
#[no_mangle]
pub extern "C" fn SetWorkerId(workerId: u32) {
YitIdHelper::SetWorkerId(workerId);
}
#[no_mangle] #[no_mangle]
pub extern "C" fn NextId() -> i64 { pub extern "C" fn NextId() -> i64 {
YitIdHelper::NextId() YitIdHelper::NextId()
......
...@@ -16,7 +16,7 @@ pub struct IdGeneratorOptions { ...@@ -16,7 +16,7 @@ pub struct IdGeneratorOptions {
pub SeqBitLength: u8, pub SeqBitLength: u8,
/// 最大序列数(含),(由 SeqBitLength 计算的最大值) /// 最大序列数(含),(由 SeqBitLength 计算的最大值)
pub MaxSeqNumber: u32, pub MaxSeqNumber: u32,
/// 最小序列数(含),默认5,不小于1,不大于 MaxSeqNumber /// 最小序列数(含),默认5,不小于5,不大于 MaxSeqNumber
pub MinSeqNumber: u32, pub MinSeqNumber: u32,
/// 最大漂移次数(含),默认2000,推荐范围 500-20000(与计算能力有关) /// 最大漂移次数(含),默认2000,推荐范围 500-20000(与计算能力有关)
pub TopOverCostCount: u32, pub TopOverCostCount: u32,
......
...@@ -89,10 +89,10 @@ impl SnowWorkerM1 { ...@@ -89,10 +89,10 @@ impl SnowWorkerM1 {
} }
// MinSeqNumber // MinSeqNumber
if options.MinSeqNumber > maxSeqNumber { if options.MinSeqNumber > maxSeqNumber || options.MinSeqNumber < 5 {
panic!("MinSeqNumber error. (range:[1, {}]", maxSeqNumber); panic!("MinSeqNumber error. (range:[5, {}]", maxSeqNumber);
} else { } 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 }; self.TopOverCostCount = if options.TopOverCostCount == 0 { 2000 } else { options.TopOverCostCount };
......
...@@ -13,7 +13,6 @@ pub struct YitIdHelper; ...@@ -13,7 +13,6 @@ pub struct YitIdHelper;
static mut idGenInstance: Option<Arc<Mutex<DefaultIdGenerator>>> = None; static mut idGenInstance: Option<Arc<Mutex<DefaultIdGenerator>>> = None;
impl YitIdHelper { impl YitIdHelper {
fn IdGenInstance() -> Arc<Mutex<DefaultIdGenerator>> { fn IdGenInstance() -> Arc<Mutex<DefaultIdGenerator>> {
unsafe { unsafe {
idGenInstance.get_or_insert_with(|| { idGenInstance.get_or_insert_with(|| {
...@@ -28,6 +27,13 @@ impl YitIdHelper { ...@@ -28,6 +27,13 @@ impl YitIdHelper {
idgen.Worker.SetOptions(options); 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 { pub fn NextId() -> i64 {
let mut idgenArc = YitIdHelper::IdGenInstance(); let mut idgenArc = YitIdHelper::IdGenInstance();
let mut idgen = idgenArc.lock().unwrap(); let mut idgen = idgenArc.lock().unwrap();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册