1 Star 0 Fork 0

jack/protoactor-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
member.go 1.50 KB
一键复制 编辑 原始数据 按行查看 历史
490689386@qq.com 提交于 2025-05-19 14:50 +08:00 . 初始化
package cluster
import (
"sort"
"strconv"
"strings"
murmur32 "github.com/twmb/murmur3"
)
type Members []*Member
func (m *Members) ToSet() *MemberSet {
return NewMemberSet(*m)
}
func (m *Member) HasKind(kind string) bool {
for _, k := range m.Kinds {
if k == kind {
return true
}
}
return false
}
// Address return a "host:port".
// Member defined by protos.proto
func (m *Member) Address() string {
return m.Host + ":" + strconv.FormatInt(int64(m.Port), 10)
}
func TopologyHash(members Members) uint64 {
// C# version
// var x = membersByMemberId.Select(m => m.Id).OrderBy(i => i).ToArray();
// var key = string.Join("", x);
// var hashBytes = MurmurHash2.Hash(key);
// return hashBytes;
sort.Slice(members, func(i, j int) bool {
return members[i].Id < members[j].Id
})
// I assume this is not the fastest way to do this?
s := ""
for _, m := range members {
s += m.Id
}
// TODO: this HAS to be compatible with the same hashBytes in .NET
// add plenty of tests
hash := murmur32.Sum64([]byte(s))
return hash
}
func MembersToMap(members Members) map[string]*Member {
mapp := make(map[string]*Member)
for _, m := range members {
mapp[m.Id] = m
}
return mapp
}
func SortMembers(members Members) {
sort.Slice(members, func(i, j int) bool {
addrI := members[i].Id
addrJ := members[j].Id
return strings.Compare(addrI, addrJ) > 0
})
}
func CopySortMembers(members Members) Members {
tmp := append(make(Members, 0, len(members)), members...)
SortMembers(tmp)
return tmp
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wujianhai/protoactor-go.git
git@gitee.com:wujianhai/protoactor-go.git
wujianhai
protoactor-go
protoactor-go
5633fe2499dd

搜索帮助