Skip to content

Commit 7bf9a9f

Browse files
WytheLizhangzhw8
authored andcommitted
feat(mongodb): mongodb分片集群列表接口添加主机聚合数据结构查询 #7481
# Reviewed, transaction id: 21450
1 parent 7eadc9b commit 7bf9a9f

File tree

1 file changed

+38
-3
lines changed
  • dbm-ui/backend/db_services/dbbase/resources

1 file changed

+38
-3
lines changed

dbm-ui/backend/db_services/dbbase/resources/query.py

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,16 @@
1919
from backend.constants import IP_PORT_DIVIDER
2020
from backend.db_meta.enums import ClusterEntryType, ClusterType, InstanceRole
2121
from backend.db_meta.enums.comm import SystemTagEnum
22-
from backend.db_meta.models import AppCache, Cluster, ClusterEntry, DBModule, Machine, ProxyInstance, StorageInstance
22+
from backend.db_meta.models import (
23+
AppCache,
24+
Cluster,
25+
ClusterEntry,
26+
DBModule,
27+
Machine,
28+
ProxyInstance,
29+
StorageInstance,
30+
StorageInstanceTuple,
31+
)
2332
from backend.db_services.dbbase.instances.handlers import InstanceHandler
2433
from backend.db_services.dbbase.resources.query_base import (
2534
build_q_for_domain_by_cluster,
@@ -457,10 +466,20 @@ def _filter_cluster_hook(
457466
if count == 0:
458467
return ResourceList(count=0, data=[])
459468

469+
storage_instance_queryset = StorageInstance.objects.prefetch_related(
470+
Prefetch(
471+
"as_ejector",
472+
queryset=StorageInstanceTuple.objects.filter(
473+
ejector__in=storage_queryset.values_list("id", flat=True)
474+
),
475+
to_attr="instance_tuples",
476+
)
477+
)
460478
# 预取proxy_queryset,storage_queryset,clusterentry_set,加块查询效率
461-
cluster_queryset = cluster_queryset[offset : limit + offset].prefetch_related(
479+
cluster_list = cluster_queryset[offset : limit + offset].prefetch_related(
462480
Prefetch("proxyinstance_set", queryset=proxy_queryset.select_related("machine"), to_attr="proxies"),
463481
Prefetch("storageinstance_set", queryset=storage_queryset.select_related("machine"), to_attr="storages"),
482+
Prefetch("storageinstance_set", queryset=storage_instance_queryset, to_attr="storage_instances"),
464483
Prefetch("nosqlstoragesetdtl_set", to_attr="storage_set_dtl"),
465484
Prefetch("clusterentry_set", to_attr="entries"),
466485
"tag_set",
@@ -487,7 +506,7 @@ def _filter_cluster_hook(
487506

488507
# 将集群的查询结果序列化为集群字典信息
489508
clusters: List[Dict[str, Any]] = []
490-
for cluster in cluster_queryset:
509+
for cluster in cluster_list:
491510
cluster_info = cls._to_cluster_representation(
492511
cluster=cluster,
493512
cluster_entry=[
@@ -534,13 +553,29 @@ def _to_cluster_representation(
534553
(storage_set_dtl.seg_range, f"{storage_set_dtl.instance.machine.ip}:{storage_set_dtl.instance.port}")
535554
for storage_set_dtl in cluster.storage_set_dtl
536555
]
556+
537557
machine_map = {}
538558
for group_name, machine_ip_port in machine_list:
539559
if not machine_map.get(group_name):
540560
machine_map[group_name] = [machine_ip_port]
541561
else:
542562
machine_map[group_name].append(machine_ip_port)
543563

564+
master_slave_map = {}
565+
for instance in cluster.storage_instances:
566+
for instance_tuple in instance.instance_tuples:
567+
key = f"{instance.machine.ip}:{instance.port}"
568+
item = f"{instance_tuple.receiver.machine.ip}:{instance_tuple.receiver.port}"
569+
if not master_slave_map.get(key):
570+
master_slave_map[key] = [item]
571+
else:
572+
master_slave_map[key].append(item)
573+
574+
for k, v in master_slave_map.items():
575+
for group_name, ip_port_list in machine_map.items():
576+
if k in ip_port_list:
577+
machine_map[group_name].extend(v)
578+
544579
return {
545580
"id": cluster.id,
546581
"phase": cluster.phase,

0 commit comments

Comments
 (0)