TencentBlueKing / bk-job

蓝鲸作业平台(Job)是一套运维基础操作管理系统,具备海量任务并发处理能力。除了支持脚本执行、文件分发、定时任务等一系列基础运维场景以外,还支持通过流程调度能力将零碎的单个任务组装成一个自动化作业流程;而每个作业都可做为一个原子节点,提供给上层或周边系统/平台使用,实现调度自动化。
Other
797 stars 201 forks source link

fix: 分布式锁实现不正确 #3202

Closed jsonwan closed 3 weeks ago

jsonwan commented 3 weeks ago

Version / Branch / tag 3.8.x

出了什么问题?(What Happened?) 用的是ValueOperations<K, V>的这个方法: Boolean setIfAbsent(K key, V value, long timeout, TimeUnit unit); 一直以来,这个实现就是不正确的,实际上是用的redis的SET指令,没有SETNX的效果。 image

如何复现?(How to reproduce?) 排查file-gateway重调度任务被多次触发时发现: image image

预期结果(What you expect?) 分布式锁正常工作,file-gateway重调度任务同一时刻只有一个触发。

jsonwan commented 3 weeks ago

查明是误判,SET指令加上NX参数后就是SETNX的效果。 file-gateway重调度任务被多次触发是因为快速地获取并释放了锁,之后被其他实例获取到了导致。