Commit 71eeae1c authored by QM's avatar QM

updata

parent 6ebd67fb
...@@ -172,38 +172,26 @@ func (b *blsClient) getLeaderInfo() ([]string, int32, int32, int32, bool) { ...@@ -172,38 +172,26 @@ func (b *blsClient) getLeaderInfo() ([]string, int32, int32, int32, bool) {
return nodes, leaderIdx, baseIdx, offIdx, nodes[leaderIdx] == b.selfID return nodes, leaderIdx, baseIdx, offIdx, nodes[leaderIdx] == b.selfID
} }
func (b *blsClient) getSupervisionLeaderInfo() ([]string, int32, int32, int32, bool) {
//在未同步前 不处理聚合消息
if !b.paraClient.commitMsgClient.isSync() {
return nil, 0, 0, 0, false
}
supervisionNodes, _ := b.getSupervisionSuperNodes()
if len(supervisionNodes) <= 0 {
return nil, 0, 0, 0, false
}
h := b.paraClient.commitMsgClient.getConsensusHeight()
//间隔的除数再根据nodes取余数,平均覆盖所有节点
baseIdx := int32((h / int64(b.leaderSwitchInt)) % int64(len(supervisionNodes)))
offIdx := atomic.LoadInt32(&b.leaderOffset)
leaderIdx := (baseIdx + offIdx) % int32(len(supervisionNodes))
return supervisionNodes, leaderIdx, baseIdx, offIdx, supervisionNodes[leaderIdx] == b.selfID
}
func (b *blsClient) getSuperNodes() ([]string, string) { func (b *blsClient) getSuperNodes() ([]string, string) {
// 获取授权节点
nodeStr, err := b.paraClient.commitMsgClient.getNodeGroupAddrs() nodeStr, err := b.paraClient.commitMsgClient.getNodeGroupAddrs()
if strings.Contains(nodeStr, b.selfID) {
if err != nil { if err != nil {
return nil, "" return nil, ""
} }
return strings.Split(nodeStr, ","), nodeStr return strings.Split(nodeStr, ","), nodeStr
} }
// 获取监督节点 // 获取监督节点
func (b *blsClient) getSupervisionSuperNodes() ([]string, string) { nodeStr, err = b.paraClient.commitMsgClient.getSupervisionNodeGroupAddrs()
nodeStr, err := b.paraClient.commitMsgClient.getSupervisionNodeGroupAddrs() if strings.Contains(nodeStr, b.selfID) {
if err != nil { if err != nil {
return nil, "" return nil, ""
} }
return strings.Split(nodeStr, ","), nodeStr return strings.Split(nodeStr, ","), nodeStr
}
return nil, ""
} }
func (b *blsClient) isValidNodes(id string) bool { func (b *blsClient) isValidNodes(id string) bool {
......
...@@ -547,6 +547,8 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error ...@@ -547,6 +547,8 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
var commitAddrs, commitSupervisionAddrs, validAddrs, supervisionValidAddrs []string var commitAddrs, commitSupervisionAddrs, validAddrs, supervisionValidAddrs []string
bIsCommitSuperNode := false
bIsCommitSupervisionNode := false
for _, addr := range nodesArry { for _, addr := range nodesArry {
if addr == a.fromaddr { if addr == a.fromaddr {
// 授权节点共识 // 授权节点共识
...@@ -561,6 +563,11 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error ...@@ -561,6 +563,11 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
} }
validAddrs = getValidAddrs(nodesMap, commitAddrs) validAddrs = getValidAddrs(nodesMap, commitAddrs)
if len(validAddrs) <= 0 {
return nil, errors.Wrapf(err, "getValidAddrs nil commitAddrs=%s ", strings.Join(commitAddrs, ","))
}
bIsCommitSuperNode = true
break break
} }
} }
...@@ -571,6 +578,7 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error ...@@ -571,6 +578,7 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
return nil, errors.Wrap(err, "getSupervisionNodesGroup") return nil, errors.Wrap(err, "getSupervisionNodesGroup")
} }
if !bIsCommitSuperNode {
for _, addr := range supervisionNodesArry { for _, addr := range supervisionNodesArry {
if addr == a.fromaddr { if addr == a.fromaddr {
// 监督节点共识 // 监督节点共识
...@@ -585,12 +593,18 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error ...@@ -585,12 +593,18 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
} }
supervisionValidAddrs = getValidAddrs(supervisionNodesMap, commitSupervisionAddrs) supervisionValidAddrs = getValidAddrs(supervisionNodesMap, commitSupervisionAddrs)
if len(supervisionValidAddrs) <= 0 {
return nil, errors.Wrapf(err, "getValidAddrs nil commitSupervisionAddrs=%s", strings.Join(commitSupervisionAddrs, ","))
}
bIsCommitSupervisionNode = true
break break
} }
} }
}
if len(validAddrs) <= 0 && len(supervisionValidAddrs) <= 0 { if !bIsCommitSuperNode && !bIsCommitSupervisionNode {
return nil, errors.Wrapf(err, "getValidAddrs nil commitAddrs=%s commitSupervisionAddrs=%s", strings.Join(commitAddrs, ","), strings.Join(commitSupervisionAddrs, ",")) return nil, errors.Wrapf(errors.New("from addr error"), "form addr %s not in SuperNodesGroup, not in SupervisionNodesGroup", a.fromaddr)
} }
return a.proCommitMsg(commit.Status, nodesMap, validAddrs, supervisionNodesMap, supervisionValidAddrs) return a.proCommitMsg(commit.Status, nodesMap, validAddrs, supervisionNodesMap, supervisionValidAddrs)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment