1 Star 1 Fork 0

凡卡/libp2parea

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
searchVNode.go 2.45 KB
一键复制 编辑 原始数据 按行查看 历史
凡卡 提交于 2023-11-29 11:01 +08:00 . first commit
package unit
import (
"bytes"
"math/big"
"gitee.com/prestonTao/libp2parea"
"gitee.com/prestonTao/libp2parea/engine"
"gitee.com/prestonTao/libp2parea/nodeStore"
"gitee.com/prestonTao/libp2parea/virtual_node"
"gitee.com/prestonTao/utils"
)
/*
多次查询逻辑虚拟节点并对比结果是否正确
*/
func LoopSendSearchVnode(areas []*libp2parea.Area) {
//第一步:先得到标准的虚拟节点,应该有的逻辑节点,并打印出来。
//第二部:对比实际虚拟节点和标准的虚拟节点的逻辑是否一致。
netid := areas[0].Vm.GetVnodeDiscover().Vnode.Vid
logicIds := GetLogicVnodeNetID(&netid)
for i, logicOne := range logicIds {
wantId := globalSearchVNode(areas, *logicOne)
for _, one := range areas {
engine.Log.Info("虚拟节点:%s 查找:%s want:%s", one.GetNetId().B58String(), logicOne.B58String(), wantId.B58String())
magneticId, err := one.SearchVnodeId(logicOne)
if err != nil {
engine.Log.Error("发送SearchVnodeNetAddr消息失败:%s", err.Error())
continue
}
if !bytes.Equal(wantId, *magneticId) {
engine.Log.Error("磁力节点不相等 %d:%s from:%s", i, magneticId.B58String(), one.GetNetId().B58String())
} else {
// engine.Log.Info("磁力节点 %d:%s", i, magnetic.B58String())
}
}
}
}
/*
得到保存数据的逻辑节点
@idStr id十六进制字符串
@return 4分之一节点
*/
func GetLogicVnodeNetID(id *virtual_node.AddressNetExtend) (logicIds []*virtual_node.AddressNetExtend) {
bas := nodeStore.BuildArithmeticSequence(100)
logicIds = make([]*virtual_node.AddressNetExtend, 0, len(bas))
idInt := new(big.Int).SetBytes(*id)
for _, one := range bas {
bs := new(big.Int).Xor(idInt, one).Bytes()
newbs := utils.FullHighPositionZero(&bs, 32)
mh := virtual_node.AddressNetExtend(*newbs)
logicIds = append(logicIds, &mh)
}
return
}
func globalSearchVNode(areas []*libp2parea.Area, find virtual_node.AddressNetExtend) virtual_node.AddressNetExtend {
kad := nodeStore.NewKademlia(0)
for _, one := range areas {
vnodeinfos := one.Vm.GetVnodeSelf()
for _, vnodeAddrOne := range vnodeinfos {
//虚拟节点中index为0的是发现节点,SearchVnode操作时,排除这些节点
if vnodeAddrOne.Index == 0 {
continue
}
kad.Add(new(big.Int).SetBytes(vnodeAddrOne.Vid))
}
}
dstId := kad.Get(new(big.Int).SetBytes(find))
dstIdBs := dstId[0].Bytes()
dstIdBsP := utils.FullHighPositionZero(&dstIdBs, 32)
return virtual_node.AddressNetExtend(*dstIdBsP)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/prestonTao/libp2parea.git
git@gitee.com:prestonTao/libp2parea.git
prestonTao
libp2parea
libp2parea
3aaa451ef873

搜索帮助