apache / apache/iotdb

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

Open
#5,884 1 comment 0 reactions 0 assignees View on GitHub
Easy-Fixed
Dominant language
Java
Stars
6.4k
Forks
1.2k
Avg merge
1d 23h
Merged PRs (30d)
115

Description

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.

Contributor guide

Open the contributing guide

Research direction

Start in server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java and inspect the method that uses targetWriter for synchronization. Confirm how concurrent calls can receive different parameter instances. Done means the synchronization no longer depends on that method parameter and the existing behavior remains safe for concurrent calls.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
databases
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.