[ 
https://issues.apache.org/jira/browse/HDFS-13359?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yiqun Lin updated HDFS-13359:
-----------------------------
    Description: 
DataXceiver hungs due to the lock that locked by 
 {{FsDatasetImpl#getBlockInputStream}} (have attached stack).
{code:java}
  @Override // FsDatasetSpi
  public InputStream getBlockInputStream(ExtendedBlock b,
      long seekOffset) throws IOException {

    ReplicaInfo info;
    synchronized(this) {
      info = volumeMap.get(b.getBlockPoolId(), b.getLocalBlock());
    }
    ...
  }
{code}
The lock {{synchronized(this)}} used here is expensive, there is already one 
{{AutoCloseableLock}} type lock defined for {{ReplicaMap}}. We can use it 
instead.

  was:
DataXceiver hungs due to the lock that locked by 
{{FsDatasetImpl#getBlockInputStream}}.
 !stack.jpg! 

{code:java}
  @Override // FsDatasetSpi
  public InputStream getBlockInputStream(ExtendedBlock b,
      long seekOffset) throws IOException {

    ReplicaInfo info;
    synchronized(this) {
      info = volumeMap.get(b.getBlockPoolId(), b.getLocalBlock());
    }
    ...
  }
{code}
The lock {{synchronized(this)}} used here is expensive, there is already one 
{{AutoCloseableLock}} type lock defined for {{ReplicaMap}}. We can use it 
instead.


> DataXceiver hungs due to the lock in FsDatasetImpl#getBlockInputStream
> ----------------------------------------------------------------------
>
>                 Key: HDFS-13359
>                 URL: https://issues.apache.org/jira/browse/HDFS-13359
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: datanode
>    Affects Versions: 2.7.1
>            Reporter: Yiqun Lin
>            Assignee: Yiqun Lin
>            Priority: Major
>         Attachments: HDFS-13359.001.patch, stack.jpg
>
>
> DataXceiver hungs due to the lock that locked by 
>  {{FsDatasetImpl#getBlockInputStream}} (have attached stack).
> {code:java}
>   @Override // FsDatasetSpi
>   public InputStream getBlockInputStream(ExtendedBlock b,
>       long seekOffset) throws IOException {
>     ReplicaInfo info;
>     synchronized(this) {
>       info = volumeMap.get(b.getBlockPoolId(), b.getLocalBlock());
>     }
>     ...
>   }
> {code}
> The lock {{synchronized(this)}} used here is expensive, there is already one 
> {{AutoCloseableLock}} type lock defined for {{ReplicaMap}}. We can use it 
> instead.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to