Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DiDi
kafka-manager
提交
ac304363
K
kafka-manager
项目概览
DiDi
/
kafka-manager
9 个月 前同步成功
通知
58
Star
6372
Fork
1229
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kafka-manager
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ac304363
编写于
12月 05, 2022
作者:
Z
zengqiao
提交者:
EricZeng
12月 05, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Bugfix]修复更新健康巡检结果时出现死锁的问题(#728)
上级
7176e418
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
29 addition
and
8 deletion
+29
-8
km-core/src/main/java/com/xiaojukeji/know/streaming/km/core/service/health/checkresult/impl/HealthCheckResultServiceImpl.java
...health/checkresult/impl/HealthCheckResultServiceImpl.java
+29
-8
未找到文件。
km-core/src/main/java/com/xiaojukeji/know/streaming/km/core/service/health/checkresult/impl/HealthCheckResultServiceImpl.java
浏览文件 @
ac304363
...
...
@@ -3,13 +3,11 @@ package com.xiaojukeji.know.streaming.km.core.service.health.checkresult.impl;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.didiglobal.logi.log.ILog
;
import
com.didiglobal.logi.log.LogFactory
;
import
com.google.common.collect.Lists
;
import
com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck.BaseClusterHealthConfig
;
import
com.xiaojukeji.know.streaming.km.common.bean.entity.health.HealthCheckAggResult
;
import
com.xiaojukeji.know.streaming.km.common.bean.entity.health.HealthCheckResult
;
import
com.xiaojukeji.know.streaming.km.common.bean.po.config.PlatformClusterConfigPO
;
import
com.xiaojukeji.know.streaming.km.common.bean.po.health.HealthCheckResultPO
;
import
com.xiaojukeji.know.streaming.km.common.constant.Constant
;
import
com.xiaojukeji.know.streaming.km.common.enums.config.ConfigGroupEnum
;
import
com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckDimensionEnum
;
import
com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckNameEnum
;
...
...
@@ -19,6 +17,7 @@ import com.xiaojukeji.know.streaming.km.core.service.config.PlatformClusterConfi
import
com.xiaojukeji.know.streaming.km.core.service.health.checkresult.HealthCheckResultService
;
import
com.xiaojukeji.know.streaming.km.persistence.mysql.health.HealthCheckResultDAO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.dao.DuplicateKeyException
;
import
org.springframework.stereotype.Service
;
import
java.util.*
;
...
...
@@ -125,15 +124,37 @@ public class HealthCheckResultServiceImpl implements HealthCheckResultService {
@Override
public
void
batchReplace
(
Long
clusterPhyId
,
Integer
dimension
,
List
<
HealthCheckResult
>
healthCheckResults
)
{
List
<
List
<
HealthCheckResult
>>
healthCheckResultPartitions
=
Lists
.
partition
(
healthCheckResults
,
Constant
.
PER_BATCH_MAX_VALUE
);
for
(
List
<
HealthCheckResult
>
checkResultPartition
:
healthCheckResultPartitions
)
{
List
<
HealthCheckResultPO
>
healthCheckResultPos
=
ConvertUtil
.
list2List
(
checkResultPartition
,
HealthCheckResultPO
.
class
);
List
<
HealthCheckResultPO
>
inDBList
=
this
.
listCheckResult
(
clusterPhyId
,
dimension
);
// list 转 map
Map
<
String
,
HealthCheckResultPO
>
inDBMap
=
new
HashMap
<>(
inDBList
.
size
());
inDBList
.
forEach
(
elem
->
inDBMap
.
put
(
elem
.
getConfigName
()
+
elem
.
getResName
(),
elem
));
for
(
HealthCheckResult
checkResult:
healthCheckResults
)
{
HealthCheckResultPO
inDB
=
inDBMap
.
remove
(
checkResult
.
getConfigName
()
+
checkResult
.
getResName
());
try
{
healthCheckResultDAO
.
batchReplace
(
healthCheckResultPos
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"method=batchReplace||clusterPhyId={}||checkResultList={}||errMsg=exception!"
,
clusterPhyId
,
healthCheckResultPos
,
e
);
HealthCheckResultPO
newPO
=
ConvertUtil
.
obj2Obj
(
checkResult
,
HealthCheckResultPO
.
class
);
if
(
inDB
==
null
)
{
healthCheckResultDAO
.
insert
(
newPO
);
}
else
{
newPO
.
setId
(
inDB
.
getId
());
newPO
.
setUpdateTime
(
new
Date
());
healthCheckResultDAO
.
updateById
(
newPO
);
}
}
catch
(
DuplicateKeyException
dke
)
{
// ignore
}
}
inDBMap
.
values
().
forEach
(
elem
->
{
if
(
System
.
currentTimeMillis
()
-
elem
.
getUpdateTime
().
getTime
()
<=
1200000
)
{
// 20分钟之内的数据,不进行删除
return
;
}
healthCheckResultDAO
.
deleteById
(
elem
.
getId
());
});
}
private
List
<
HealthCheckAggResult
>
convert2HealthCheckAggResultList
(
List
<
HealthCheckResultPO
>
poList
,
Integer
dimensionCode
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录