auto commit
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 };
|
||||
|
||||
@@ -13,7 +13,6 @@ pub struct YitIdHelper;
|
||||
static mut idGenInstance: Option<Arc<Mutex<DefaultIdGenerator>>> = None;
|
||||
|
||||
impl YitIdHelper {
|
||||
|
||||
fn IdGenInstance() -> Arc<Mutex<DefaultIdGenerator>> {
|
||||
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();
|
||||
|
||||
Reference in New Issue
Block a user