|
45 | 45 | ) |
46 | 46 | from backend.db_meta.exceptions import ClusterExclusiveOperateException, DBMetaException |
47 | 47 | from backend.db_services.version.constants import LATEST, PredixyVersion, TwemproxyVersion |
| 48 | +from backend.exceptions import ApiError |
48 | 49 | from backend.flow.consts import DEFAULT_RIAK_PORT |
49 | 50 | from backend.ticket.constants import TicketType |
50 | 51 | from backend.ticket.models import ClusterOperateRecord |
@@ -361,21 +362,24 @@ def tendbcluster_ctl_primary_address(self) -> str: |
361 | 362 | if self.cluster_type != ClusterType.TenDBCluster.value: |
362 | 363 | raise DBMetaException(message=_("{} 类型集群没有中控节点".format(self.cluster_type))) |
363 | 364 |
|
| 365 | + # 取一个状态正常的 spider-master 接入层 |
364 | 366 | spider_instance = self.proxyinstance_set.filter( |
365 | | - tendbclusterspiderext__spider_role=TenDBClusterSpiderRole.SPIDER_MASTER |
366 | | - ).first() # 随便拿一个spider-master接入层 |
| 367 | + tendbclusterspiderext__spider_role=TenDBClusterSpiderRole.SPIDER_MASTER, |
| 368 | + status=InstanceStatus.RUNNING.value, |
| 369 | + ).first() |
367 | 370 |
|
368 | 371 | ctl_address = "{}{}{}".format(spider_instance.machine.ip, IP_PORT_DIVIDER, spider_instance.port + 1000) |
369 | 372 |
|
370 | 373 | logger.info("ctl address: {}".format(ctl_address)) |
371 | | - res = DRSApi.rpc( |
| 374 | + res = DRSApi.short_rpc( |
372 | 375 | { |
373 | 376 | "addresses": [ctl_address], |
374 | 377 | "cmds": ["tdbctl get primary"], |
375 | 378 | "force": False, |
376 | 379 | "bk_cloud_id": self.bk_cloud_id, |
377 | 380 | } |
378 | 381 | ) |
| 382 | + |
379 | 383 | logger.info("tdbctl get primary res: {}".format(res)) |
380 | 384 |
|
381 | 385 | if res[0]["error_msg"]: |
@@ -440,24 +444,31 @@ def get_cluster_id__primary_address_map(cls, cluster_ids: List[int]) -> Dict[int |
440 | 444 | logger.error(_("集群id:{} {} 类型集群没有中控节点".format(cluster.id, cluster.cluster_type))) |
441 | 445 | continue |
442 | 446 |
|
| 447 | + # 取一个状态正常的 spider-master 接入层 |
443 | 448 | spider_instance = cluster.proxyinstance_set.filter( |
444 | | - tendbclusterspiderext__spider_role=TenDBClusterSpiderRole.SPIDER_MASTER |
445 | | - ).first() # 随便拿一个spider-master接入层 |
| 449 | + tendbclusterspiderext__spider_role=TenDBClusterSpiderRole.SPIDER_MASTER, |
| 450 | + status=InstanceStatus.RUNNING.value, |
| 451 | + ).first() |
446 | 452 |
|
447 | 453 | ctl_address = "{}{}{}".format(spider_instance.machine.ip, IP_PORT_DIVIDER, spider_instance.port + 1000) |
448 | 454 | addresses.append(ctl_address) |
449 | 455 | ctl_address__cluster_id_map[ctl_address] = cluster.id |
450 | 456 |
|
451 | 457 | logger.info("addresses: {}".format(addresses)) |
452 | 458 |
|
453 | | - res = DRSApi.rpc( |
454 | | - { |
455 | | - "addresses": addresses, |
456 | | - "cmds": ["tdbctl get primary"], |
457 | | - "force": False, |
458 | | - "bk_cloud_id": bk_cloud_id, |
459 | | - } |
460 | | - ) |
| 459 | + try: |
| 460 | + res = DRSApi.short_rpc( |
| 461 | + { |
| 462 | + "addresses": addresses, |
| 463 | + "cmds": ["tdbctl get primary"], |
| 464 | + "force": False, |
| 465 | + "bk_cloud_id": bk_cloud_id, |
| 466 | + } |
| 467 | + ) |
| 468 | + except ApiError as e: |
| 469 | + logger.error(_("get primary failed: {}".format(e))) |
| 470 | + continue |
| 471 | + |
461 | 472 | logger.info("tdbctl get primary res: {}".format(res)) |
462 | 473 |
|
463 | 474 | for item in res: |
|
0 commit comments