Commit 23971884 authored by mdj33's avatar mdj33 Committed by vipwzw

add support main node switch feature readme

parent 57900caa
......@@ -489,6 +489,18 @@ func (client *client) findHashMatchedBlock(currSeq *int64, preMainBlockHash *[]b
plog.Error("Parachain RequestLastBlock fail", "err", err)
return
}
//genesis block scenario, get new main node's blockHash as preMainHash, genesis sequence as currSeq
if lastBlock.Height ==0 {
lastSeq, _, lastSeqMainHash, _, err := client.getLastBlockInfo()
if err != nil {
plog.Error("Parachain GetLastSeq fail", "err", err)
return
}
*currSeq = lastSeq
*preMainBlockHash = lastSeqMainHash
return
}
findDepth := searchHashMatchBlockDepth
for height := lastBlock.Height; height > 0 && findDepth > 0; height-- {
block, err := client.GetBlockByHeight(height)
......
# para
#支持主节点在云端,且允许自由切换,负载均衡
1. 平行链主节点设置在云端作为一个集群,提供统一ip和端口
## 场景
1. 主节点集群同步主网数据,各主节点保持独立
1. 某主节点挂掉,云端自动切换到新的主节点,平行链节点需要检查在新节点获取到的区块和之前的区块hash保持一致,一致指的是新区块是add type,parentHash和之前的
主链hash相同,del type的区块hash和之前主链的hash相同
1. 如果不一致,搜索平行链记录的主节点blockHash在新主节点上的seq作为下一个seq获取tx
1. 如果当前平行链block的mainBlockHash在新节点上找不到,可能是分叉的场景,需要找到分叉处,把以后的平行链block删除,从分叉处下一个seq同步平行链数据
## 测试场景
1. 平行链在blockHeight=1之前主节点切换,平行链重新从seq=startSeq处同步数据(startSeq=0 or 非0场景)
1. 主节点切换,新的主节点seq和blockhash和老的完全一致
1. 主节点切换, 老的blockhash在新的节点上找不到,平行链最后一个节点的mainHash可以找到
1. 主节点切换, 老的blockhash在新的节点上找不到,平行链最后一个节点的mainHash找不到,回退查找到,删除分叉后节点重新同步
1. 主节点切换, 老的blockhash在新的节点上找不到,平行链最后一个节点的mainHash找不到,回退查找到,删除分叉节点中间失败,重新查找同步
1. 主节点切换, 老的blockhash在新的节点上找不到,平行链所有节点都找不到场景,会无限循环查找,直到切换新主节点
1. 系统重启,主节点切换场景
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