Skip to content

Commit c10d3f9

Browse files
committed
fix: 原地slave重建生成单据前检查实例是否存活 #8865
1 parent 69543a9 commit c10d3f9

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

dbm-ui/backend/flow/engine/bamboo/scene/mysql/mysql_restore_slave_remote_flow.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515

1616
from django.utils.translation import ugettext as _
1717

18+
from backend.components import DRSApi
1819
from backend.configuration.constants import DBType
1920
from backend.constants import IP_PORT_DIVIDER, IP_PORT_DIVIDER_FOR_DNS
2021
from backend.db_meta.enums import ClusterType, InstanceInnerRole, InstancePhase, InstanceStatus
22+
from backend.db_meta.exceptions import InstanceNotExistException
2123
from backend.db_meta.models import Cluster
2224
from backend.db_package.models import Package
2325
from backend.flow.consts import MediumEnum
@@ -433,6 +435,20 @@ def restore_local_slave_flow(self):
433435
machine__ip=self.data["slave_ip"],
434436
port=self.data["slave_port"],
435437
)
438+
439+
res = DRSApi.rpc(
440+
{
441+
"addresses": [target_slave.ip_port],
442+
"cmds": ["select version()"],
443+
"force": False,
444+
"bk_cloud_id": target_slave.machine.bk_cloud_id,
445+
}
446+
)
447+
if res[0]["error_msg"]:
448+
raise InstanceNotExistException(
449+
_("请检查实例 {} 是否存活,是否正常可访问,slave原地重建是实例级别的,且必须保证实例存活方可提单进行").format(target_slave.ip_port)
450+
)
451+
436452
master = cluster_model.storageinstance_set.get(instance_inner_role=InstanceInnerRole.MASTER.value)
437453
self.data["new_slave_ip"] = target_slave.machine.ip
438454
self.data["bk_biz_id"] = cluster_model.bk_biz_id

dbm-ui/backend/flow/engine/bamboo/scene/spider/remote_local_slave_recover.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616
from django.utils.crypto import get_random_string
1717
from django.utils.translation import ugettext as _
1818

19+
from backend.components import DRSApi
1920
from backend.configuration.constants import DBType
2021
from backend.db_meta.enums import InstancePhase, InstanceStatus
22+
from backend.db_meta.exceptions import InstanceNotExistException
2123
from backend.db_meta.models import Cluster
2224
from backend.flow.engine.bamboo.scene.common.builder import Builder, SubBuilder
2325
from backend.flow.engine.bamboo.scene.common.get_file_list import GetFileList
@@ -115,6 +117,20 @@ def tendb_remote_slave_local_recover(self):
115117
self.data["master_port"] = shard.storage_instance_tuple.ejector.port
116118
self.data["slave_port"] = shard.storage_instance_tuple.receiver.port
117119
target_slave = cluster_class.storageinstance_set.get(id=shard.storage_instance_tuple.receiver.id)
120+
# 检查slave是否存活
121+
res = DRSApi.rpc(
122+
{
123+
"addresses": [target_slave.ip_port],
124+
"cmds": ["select version()"],
125+
"force": False,
126+
"bk_cloud_id": target_slave.machine.bk_cloud_id,
127+
}
128+
)
129+
if res[0]["error_msg"]:
130+
raise InstanceNotExistException(
131+
_("请检查实例 {} 是否存活,是否正常可访问,slave原地重建是实例级别的,且必须保证实例存活方可提单进行").format(target_slave.ip_port)
132+
)
133+
118134
master = cluster_class.storageinstance_set.get(id=shard.storage_instance_tuple.ejector.id)
119135
cluster = {
120136
"phase": InstancePhase.TRANS_STAGE.value,

0 commit comments

Comments
 (0)