Skip to content

Commit 7f26f4e

Browse files
committed
update range & modrange
1 parent 649c0ca commit 7f26f4e

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

sharding/src/distribution/modrange.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
pub struct ModRange {
77
slot: u64,
88
interval: u64,
9+
shards: usize,
910
}
1011

1112
// ModRange 分布方法,默认总范围是[0,256),否则指定slot
@@ -17,6 +18,7 @@ impl ModRange {
1718
ModRange {
1819
slot,
1920
interval: slot / shards as u64,
21+
shards,
2022
}
2123
}
2224

@@ -27,6 +29,11 @@ impl ModRange {
2729
val = val.wrapping_abs();
2830
}
2931
let rs = val as u64 / self.interval;
32+
if rs >= self.shards as u64 {
33+
// 超出范围,返回最后一个分片
34+
log::warn!("found modrange slot out of bound, rs:{}, shards:{}", rs, self.shards);
35+
return self.shards - 1;
36+
}
3037
rs as usize
3138
}
3239
}

sharding/src/distribution/range.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::distribution::DIST_RANGE_SLOT_COUNT_DEFAULT;
66
pub struct Range {
77
slot: u64,
88
interval: u64,
9+
shards: usize,
910
}
1011

1112
// Range 分布方法,默认总范围是[0,256),否则用
@@ -16,6 +17,7 @@ impl Range {
1617
Range {
1718
slot,
1819
interval: slot / shards as u64,
20+
shards,
1921
}
2022
}
2123

@@ -28,6 +30,11 @@ impl Range {
2830
val = val.wrapping_abs();
2931
}
3032
let rs = val as u64 / self.interval;
33+
if rs >= self.shards as u64 {
34+
// 超出范围,返回最后一个分片
35+
log::warn!("found range slot out of bound, rs:{}, shards:{}", rs, self.shards);
36+
return self.shards - 1;
37+
}
3138
rs as usize
3239
}
3340
}

0 commit comments

Comments
 (0)