[
https://issues.apache.org/jira/browse/FLUME-1593?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13459182#comment-13459182
]
Hari Shreedharan commented on FLUME-1593:
-----------------------------------------
Yes. I was suggesting something of this sort(pretty similar to what you
mentioned above):
put/commit/blah code:
{code}
writeToLogFile(transactionID);
void writeToLogFile(long txnID) {
int n //max number of retries
for(int i = 0; i<n;i++){
logFileIndex = nextLogWriter(txnID);
try{
//Check if roll is needed, if yes, roll
//write to file
//return
} catch(Ex) {
//log it
}
}
throw new IOException("Could not write after trying a gazillion times);
}
{code}
Specifically I am not too keen on having additional inner classes and other
complex logic to handle an error case like this. From what I understand, a
simple method like the one above should be enough to handle this, right?
> FileChannel race condition when log file rolls
> ----------------------------------------------
>
> Key: FLUME-1593
> URL: https://issues.apache.org/jira/browse/FLUME-1593
> Project: Flume
> Issue Type: Improvement
> Components: Channel
> Affects Versions: v1.3.0
> Reporter: Brock Noland
> Assignee: Brock Noland
> Priority: Minor
> Attachments: FLUME-1593-0.patch
>
>
> There is a non-harmful race condition when we roll a log. One thread can call
> logFiles.get(logFileIndex).{take,put,etc} while another is closing that log
> writer.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira