浏览代码

fix incorrect random partioner hash function

Caleb Doxsey 9 年之前
父节点
当前提交
860e8ef353
共有 1 个文件被更改,包括 9 次插入4 次删除
  1. 9 4
      token.go

+ 9 - 4
token.go

@@ -90,12 +90,17 @@ func (r randomPartitioner) Name() string {
 }
 
 func (p randomPartitioner) Hash(partitionKey []byte) token {
-	hash := md5.New()
-	sum := hash.Sum(partitionKey)
+	// 2 ** 128
+	maxInt := new(big.Int)
+	maxInt.SetString("340282366920938463463374607431768211456", 10)
 
+	sum := md5.Sum(partitionKey)
 	val := new(big.Int)
-	val = val.SetBytes(sum)
-	val = val.Abs(val)
+	val.SetBytes(sum[:])
+	if sum[0] > 127 {
+		val.Sub(val, maxInt)
+		val.Abs(val)
+	}
 
 	return (*randomToken)(val)
 }