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)