mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-12-03 00:49:13 +08:00
39 lines
650 B
Go
39 lines
650 B
Go
package broker
|
|
|
|
import (
|
|
"github.com/buraksezer/consistent"
|
|
"github.com/cespare/xxhash"
|
|
)
|
|
|
|
type Member string
|
|
|
|
func (m Member) String() string {
|
|
return string(m)
|
|
}
|
|
|
|
type hasher struct{}
|
|
|
|
func (h hasher) Sum64(data []byte) uint64 {
|
|
return xxhash.Sum64(data)
|
|
}
|
|
|
|
func PickMember(members []string, key []byte) string {
|
|
cfg := consistent.Config{
|
|
PartitionCount: 9791,
|
|
ReplicationFactor: 2,
|
|
Load: 1.25,
|
|
Hasher: hasher{},
|
|
}
|
|
|
|
cmembers := []consistent.Member{}
|
|
for _, m := range members {
|
|
cmembers = append(cmembers, Member(m))
|
|
}
|
|
|
|
c := consistent.New(cmembers, cfg)
|
|
|
|
m := c.LocateKey(key)
|
|
|
|
return m.String()
|
|
}
|