apache / apache/iotdb

"targetWriter" is a method parameter, and should not be used for synchronization.

未关闭
#5,884 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
Easy-Fixed
主要语言
Java
星标
6.4k
派生
1.2k
平均合并
1 天 23 小时
30 天内合并 PR
115

描述

Code Path:server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java
image
Synchronizing on a class field synchronizes not on the field itself, but on the object assigned to it. So synchronizing on a non-final field makes it possible for the field’s value to change while a thread is in a block synchronized on the old value. That would allow a second thread, synchronized on the new value, to enter the block at the same time.

The story is very similar for synchronizing on parameters; two different threads running the method in parallel could pass two different object instances in to the method as parameters, completely undermining the synchronization.

贡献指南

打开贡献指南

调研方向

从 server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java 开始,检查使用 targetWriter 进行同步的方法。确认并发调用如何可能收到不同的参数实例。完成标准是同步不再依赖该方法参数,并且现有行为在并发调用时仍然安全。

由索引模型根据 Issue 内容生成。

评估

技术栈
java
领域
databases
Issue 类型
缺陷
难度
2/5
预计耗时
1-3 小时
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。