Skip to content

Commit 173a6dd

Browse files
committed
refactor(backend): 整包更新 #10440
# Reviewed, transaction id: 41910
1 parent fb53502 commit 173a6dd

File tree

9 files changed

+40
-68
lines changed

9 files changed

+40
-68
lines changed

dbm-ui/backend/components/bklog/handler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def query_logs(
5555
"end_time": datetime2str(end_time),
5656
"query_string": query_string,
5757
"start": 0,
58-
"size": 1000,
58+
"size": 10000,
5959
"sort_list": [
6060
["dtEventTimeStamp", sorting_rule],
6161
["gseIndex", sorting_rule],

dbm-ui/backend/ticket/flow_manager/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,9 +278,9 @@ def _retry(self) -> Any:
278278
self.run()
279279

280280
def _revoke(self, operator) -> Any:
281-
# 停止相关联的todo
282281
from backend.ticket.todos import TodoActionType, TodoActorFactory
283282

283+
# 停止相关联的todo
284284
todos = Todo.objects.filter(ticket=self.ticket, flow=self.flow_obj, status=TodoStatus.TODO)
285285
for todo in todos:
286286
TodoActorFactory.actor(todo).process(operator, TodoActionType.TERMINATE, params={})

dbm-ui/backend/ticket/tasks/ticket_tasks.py

Lines changed: 20 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
99
specific language governing permissions and limitations under the License.
1010
"""
11-
import json
1211
import logging
1312
import operator
1413
from collections import defaultdict
@@ -22,12 +21,11 @@
2221
from django.utils import timezone
2322
from django.utils.translation import gettext as _
2423

25-
from backend import env
26-
from backend.components import BKLogApi
24+
from backend.components.bklog.handler import BKLogHandler
2725
from backend.configuration.constants import PLAT_BIZ_ID, DBType
2826
from backend.constants import DEFAULT_SYSTEM_USER
2927
from backend.core import notify
30-
from backend.db_meta.enums import ClusterType, InstanceInnerRole
28+
from backend.db_meta.enums import ClusterType
3129
from backend.db_meta.models import Cluster, StorageInstance
3230
from backend.ticket.builders.common.constants import MYSQL_CHECKSUM_TABLE, MySQLDataRepairTriggerMode
3331
from backend.ticket.constants import (
@@ -43,7 +41,7 @@
4341
)
4442
from backend.ticket.exceptions import TicketTaskTriggerException
4543
from backend.ticket.models.ticket import Flow, Ticket, TicketFlowsConfig
46-
from backend.utils.time import date2str, datetime2str
44+
from backend.utils.time import date2str
4745

4846
logger = logging.getLogger("root")
4947

@@ -86,24 +84,16 @@ def auto_create_data_repair_ticket(cls):
8684
# 例行时间校验默认间隔一天
8785
now = datetime.now(timezone.utc).astimezone()
8886
start_time, end_time = now - timedelta(days=1), now
89-
# TODO: 目前这个esquery_search最多支持10000条查询,后续可以改造成scroll进行查询
90-
resp = BKLogApi.esquery_search(
91-
{
92-
"indices": f"{env.DBA_APP_BK_BIZ_ID}_bklog.mysql_checksum_result",
93-
"start_time": datetime2str(start_time),
94-
"end_time": datetime2str(end_time),
95-
"query_string": "*",
96-
"start": 0,
97-
"size": 10000,
98-
"sort_list": [["dtEventTimeStamp", "asc"], ["gseIndex", "asc"], ["iterationIndex", "asc"]],
99-
}
100-
)
10187

102-
# 根据集群ID聚合日志
88+
total_checksum_logs = BKLogHandler.query_logs(
89+
collector="mysql_checksum_result", start_time=start_time, end_time=end_time, query_string="*", size=-1
90+
)
91+
# 根据集群ID聚合日志,提前跳过校验一致的log
10392
cluster__checksum_logs_map: Dict[int, List[Dict]] = defaultdict(list)
104-
for hit in resp["hits"]["hits"]:
105-
checksum_log = json.loads(hit["_source"]["log"])
106-
cluster__checksum_logs_map[checksum_log["cluster_id"]].append(checksum_log)
93+
for log in total_checksum_logs:
94+
if log["master_crc"] == log["this_crc"] and log["master_cnt"] == log["this_cnt"]:
95+
continue
96+
cluster__checksum_logs_map[log["cluster_id"]].append(log)
10797

10898
cluster_map = {c.id: c for c in Cluster.objects.filter(id__in=list(cluster__checksum_logs_map.keys()))}
10999
biz__db_type__repair_infos: Dict[int, Dict[DBType, List]] = defaultdict(lambda: defaultdict(list))
@@ -116,29 +106,18 @@ def auto_create_data_repair_ticket(cls):
116106
continue
117107

118108
cluster = cluster_map[cluster_id]
109+
logger.info(_("为集群{}生成修复单据信息".format(cluster.immute_domain)))
119110

120-
# 根据logs获取ip:port和实例的映射
121-
inst_filter_list = [
122-
(
123-
Q(
124-
cluster=cluster,
125-
machine__ip=log["ip"],
126-
port=log["port"],
127-
instance_inner_role=InstanceInnerRole.SLAVE,
128-
)
129-
| Q(
130-
cluster=cluster,
131-
machine__ip=log["master_ip"],
132-
port=log["master_port"],
133-
instance_inner_role=InstanceInnerRole.MASTER,
134-
)
135-
)
136-
for log in checksum_logs
137-
]
138-
inst_filters = reduce(operator.or_, inst_filter_list)
111+
# 获取logs中的ip:port实例
112+
inst_filter_list = []
113+
for log in checksum_logs:
114+
inst_filter_list.append(f"{log['ip']}:{log['port']}")
115+
inst_filter_list.append(f"{log['master_ip']}:{log['master_port']}")
116+
# 过滤需要进行修复的实例
139117
ip_port__instance_id_map: Dict[str, StorageInstance] = {
140118
f"{inst.machine.ip}:{inst.port}": inst
141-
for inst in StorageInstance.objects.select_related("machine").filter(inst_filters)
119+
for inst in StorageInstance.objects.select_related("machine").filter(cluster=cluster_id)
120+
if f"{inst.machine.ip}:{inst.port}" in inst_filter_list
142121
}
143122

144123
data_repair_infos: List[Dict[str, Any]] = []

dbm-ui/backend/utils/batch_request.py

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
"""
1111
from concurrent.futures import ThreadPoolExecutor, as_completed
1212
from copy import deepcopy
13-
from multiprocessing.pool import ThreadPool
1413
from typing import Callable
1514

1615
import wrapt
@@ -99,28 +98,22 @@ def batch_request(
9998
final_request_params = format_params(params, get_count, func, start_key, limit_key)
10099

101100
data = []
102-
103-
# 根据请求总数并发请求
104-
pool = ThreadPool(settings.CONCURRENT_NUMBER)
105101
futures = []
106102

107-
for req in final_request_params:
108-
start = 0
109-
while start < req["count"]:
110-
request_params = {"page": {limit_key: limit, start_key: start}}
111-
if sort:
112-
request_params["page"]["sort"] = sort
113-
request_params.update(req["params"])
114-
futures.append(pool.apply_async(inject_request(func), args=(request_params,), kwds=kwargs))
115-
116-
start += limit
117-
118-
pool.close()
119-
pool.join()
103+
with ThreadPoolExecutor(max_workers=settings.CONCURRENT_NUMBER) as ex:
104+
for req in final_request_params:
105+
start = 0
106+
while start < req["count"]:
107+
request_params = {"page": {limit_key: limit, start_key: start}}
108+
if sort:
109+
request_params["page"]["sort"] = sort
110+
request_params.update(req["params"])
111+
# 提交任务到线程池
112+
futures.append(ex.submit(inject_request(func), params=request_params, **kwargs))
113+
start += limit
120114

121-
# 取值
122115
for future in futures:
123-
data.extend(get_data(future.get()))
116+
data.extend(get_data(future.result()))
124117

125118
return data
126119

helm-charts/bk-dbm/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,5 +99,5 @@ dependencies:
9999
description: A Helm chart for bk-dbm
100100
name: bk-dbm
101101
type: application
102-
version: 1.5.0-alpha.51
103-
appVersion: 1.5.0-alpha.51
102+
version: 1.5.0-alpha.52
103+
appVersion: 1.5.0-alpha.52

helm-charts/bk-dbm/charts/db-resource/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
apiVersion: v2
2-
appVersion: 0.0.1-alpha.126
2+
appVersion: 0.0.1-alpha.128
33
description: A Helm chart for Kubernetes
44
name: db-resource
55
type: application

helm-charts/bk-dbm/charts/db-simulation/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
apiVersion: v2
2-
appVersion: 0.0.1-alpha.102
2+
appVersion: 0.0.1-alpha.104
33
description: A Helm chart for Kubernetes
44
name: db-simulation
55
type: application

helm-charts/bk-dbm/charts/dbm/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
apiVersion: v2
2-
appVersion: 1.5.0-alpha.2185
2+
appVersion: 1.5.0-alpha.2262
33
description: A Helm chart for dbm
44
name: dbm
55
type: application

helm-charts/bk-dbm/templates/configmaps/dbm-configmap.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,5 +92,5 @@ data:
9292
BK_APIGW_RESOURCE_DOCS_ARCHIVE_FILE: "{{ .Values.bk.bkApigwResourceDocsArchiveFile }}"
9393
BK_APIGATEWAY_DOMAIN : "{{ .Values.bk.bkApigatewayDomain | default .Values.bk.bkComponentApiUrl }}"
9494
DBM_STATSDB_URL: "{{ $dbmStatsDB.host }}:{{ $dbmStatsDB.port }}"
95-
DBM_STATSDB_USER: "{{ $dbmStatsDB.username }}"
95+
DBM_STATSDB_USER: "{{ $dbmStatsDB.user }}"
9696
DBM_STATSDB_PASSWORD: "{{ $dbmStatsDB.password }}"

0 commit comments

Comments
 (0)