fix(master): Set tobeOffline flag before create migrate plan.#1000138733

Signed-off-by: Wu Huocheng <wuhuocheng@oppo.com>
This commit is contained in:
Wu Huocheng 2025-05-23 09:56:13 +08:00 committed by zhumingze1108
parent 37d1816f4f
commit f4bcdc21c6
2 changed files with 20 additions and 0 deletions

View File

@ -512,6 +512,13 @@ func (m *Server) offlineMetaNode(w http.ResponseWriter, r *http.Request) {
return
}
metaNode.ToBeOffline = true
if err = m.cluster.syncUpdateMetaNode(metaNode); err != nil {
log.LogErrorf("syncUpdateMetaNode err: %v", err)
sendErrReply(w, r, newErrHTTPReply(err))
return
}
if metaNode.MetaPartitionCount == 0 {
err = m.cluster.DoMetaNodeOffline(offLineAddr)
if err != nil {

View File

@ -1522,6 +1522,19 @@ func (c *Cluster) DoMetaNodeOffline(offLineAddr string) (err error) {
metaNode.MigrateLock.Lock()
defer metaNode.MigrateLock.Unlock()
if !metaNode.ToBeOffline {
err = fmt.Errorf("metaNode[%s] is not to be offline", metaNode.Addr)
log.LogErrorf(err.Error())
return
}
mps := c.getAllMetaPartitionsByMetaNode(metaNode.Addr)
if len(mps) != 0 {
err = fmt.Errorf("metaNode[%s] has persistence meta partitions (%d)", metaNode.Addr, len(mps))
log.LogErrorf(err.Error())
return
}
if err = c.syncDeleteMetaNode(metaNode); err != nil {
msg := fmt.Sprintf("action[offlineMetaNode], clusterID[%v] node[%v] synDelMetaNode failed,err[%s]",
c.Name, offLineAddr, err.Error())