You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-issues@hadoop.apache.org by "Brandon Li (JIRA)" <ji...@apache.org> on 2013/12/11 23:10:07 UTC
[jira] [Commented] (HDFS-5657) race condition causes writeback
state error in NFS gateway
[ https://issues.apache.org/jira/browse/HDFS-5657?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13845769#comment-13845769 ]
Brandon Li commented on HDFS-5657:
----------------------------------
Here is how the race happens:
{noformat}
/** Invoked by AsynDataService to write back to HDFS */
void executeWriteBack() {
Preconditions.checkState(asyncStatus,
"The openFileCtx has false async status"); <== check failed here
try {
while (activeState) {
WriteCtx toWrite = offerNextToWrite();
if (toWrite != null) {
// Do the write
doSingleWrite(toWrite); <=== a synchronized method, which sets asyncStatus to false
updateLastAccessTime();
} else {
break;
}
}
if (!activeState && LOG.isDebugEnabled()) {
LOG.debug("The openFileCtx is not active anymore, fileId: "
+ latestAttr.getFileId());
}
} finally {
// make sure we reset asyncStatus to false
asyncStatus = false; <== before this line is executed, OpenFileCtx.checkAndStartWrite sets
asyncStatus to true and invokes a task. When that task calls
executeWriteBack() again the condition check failed.
}
}
{noformat}
> race condition causes writeback state error in NFS gateway
> ----------------------------------------------------------
>
> Key: HDFS-5657
> URL: https://issues.apache.org/jira/browse/HDFS-5657
> Project: Hadoop HDFS
> Issue Type: Bug
> Components: nfs
> Reporter: Brandon Li
> Assignee: Brandon Li
>
> A race condition between NFS gateway writeback executor thread and new write handler thread can cause writeback state check failure, e.g.,
> {noformat}
> 2013-11-26 10:34:07,859 DEBUG nfs3.RpcProgramNfs3 (Nfs3Utils.java:writeChannel(113)) - WRITE_RPC_CALL_END______957880843
> 2013-11-26 10:34:07,863 DEBUG nfs3.OpenFileCtx (OpenFileCtx.java:offerNextToWrite(832)) - The asyn write task has no pending writes, fileId: 30938
> 2013-11-26 10:34:07,871 ERROR nfs3.AsyncDataService (AsyncDataService.java:run(136)) - Asyn data service got error:java.lang.IllegalStateException: The openFileCtx has false async status
> at com.google.common.base.Preconditions.checkState(Preconditions.java:145)
> at org.apache.hadoop.hdfs.nfs.nfs3.OpenFileCtx.executeWriteBack(OpenFileCtx.java:890)
> at org.apache.hadoop.hdfs.nfs.nfs3.AsyncDataService$WriteBackTask.run(AsyncDataService.java:134)
> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:662)
> 2013-11-26 10:34:07,901 DEBUG nfs3.RpcProgramNfs3 (RpcProgramNfs3.java:write(707)) - requesed offset=917504 and current filesize=917504
> 2013-11-26 10:34:07,902 DEBUG nfs3.WriteManager (WriteManager.java:handleWrite(131)) - handleWrite fileId: 30938 offset: 917504 length:65536 stableHow:0
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.1.4#6159)