Nested class TaskTracker.TaskInProgress needs additional synchronization
------------------------------------------------------------------------
Key: HADOOP-3553
URL: https://issues.apache.org/jira/browse/HADOOP-3553
Project: Hadoop Core
Issue Type: Bug
Components: mapred
Affects Versions: 0.17.0
Environment: All Java platforms
Reporter: Aaron Greenhouse
The nested class TaskTracker.TaskInProgress needs additional synchronization to
work properly with the Java Memory Model. Presumably this class is accessed by
more than one thread, because it already contains synchronization. However, it
needs additional synchronization, especially to protect access to the long
fields lastProgressReport and taskTimeOut. Long fields are not guaranteed to
be read/written atomically, so not only do you risk reading stale values, but
you risk reading corrupted values.
The field wasKilled also needs synchronization, as it is polled from within the
TaskTracker class.
I suggest the following improvements to the class
- Make the fields task and taskStatus final. They are used this way already.
Making them final clarifies there behavior in a current environment.
- Add the synchronized modifier to the methods getLastProgressReport() and
getTaskTimeout().
- Make the field wasKilled private and add a new public synchronized
wasKilled() getter method. Replace the use of the field with this method in
TaskTracker.
- Add a comment to localizeTask() indicating that the caller must be
synchronized on this.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.