logSync() may block NameNode forever.
-------------------------------------

                 Key: HADOOP-5510
                 URL: https://issues.apache.org/jira/browse/HADOOP-5510
             Project: Hadoop Core
          Issue Type: Bug
    Affects Versions: 0.14.0
            Reporter: Konstantin Shvachko


# {{FSEditLog.logSync()}} first waits until {{isSyncRunning}} is false and then 
performs syncing to file streams by calling {{EditLogOutputStream.flush()}}.
If an exception is thrown after {{isSyncRunning}} is set to {{true}} all 
threads will always wait on this condition.
An {{IOException}} may be thrown by {{EditLogOutputStream.setReadyToFlush()}} 
or a {{RuntimeException}} may be thrown by {{EditLogOutputStream.flush()}} or 
by {{processIOError()}}.
# The loop that calls {{eStream.flush()}} for multiple 
{{EditLogOutputStream}}-s is not synchronized, which means that another thread 
may encounter an error and modify {{editStreams}} by say calling 
{{processIOError()}}. Then the iterating process in {{logSync()}} will break 
with {{IndexOutOfBoundException}}.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to