[ 
https://issues.apache.org/jira/browse/HDFS-14986?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16975680#comment-16975680
 ] 

Yiqun Lin commented on HDFS-14986:
----------------------------------

Thanks for providing the patch, [~Aiphag0]. I like the fix way. Only minor 
comments:
{quote}RefreshThread(CachingGetSpaceUsed spaceUsed,boolean runImmediately)
{quote}
Can you add one space between {{spaceUsed,boolean}}?

Can you add the comment for the method deepCopyReplica in FsDatasetSpi?
{code:java}
  /**
   * Deep copy the replica info belonging to given block pool.
   * @param bpid Specified block pool id.
   * @return A set of replica info.
   * @throws IOException
   */
  Set<? extends Replica> deepCopyReplica(String bpid) throws IOException;
{code}
And then remove following outdated comment in FsDatasetImpl?
{noformat}
  /**
   * The deepCopyReplica call doesn't use the datasetock since it will lead the
   * potential deadlock with the {@link FsVolumeList#addBlockPool} call.
   */
{noformat}
Additionally, can you add a unit test for this? It will be a good habit when we 
fix a bug then give a corresponding unit test case.

> ReplicaCachingGetSpaceUsed throws  ConcurrentModificationException
> ------------------------------------------------------------------
>
>                 Key: HDFS-14986
>                 URL: https://issues.apache.org/jira/browse/HDFS-14986
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: datanode, performance
>            Reporter: Ryan Wu
>            Assignee: Ryan Wu
>            Priority: Major
>         Attachments: HDFS-14986.001.patch
>
>
> Running DU across lots of disks is very expensive . We applied the patch 
> HDFS-14313 to get  used space from ReplicaInfo in memory.However, new du 
> threads throw the exception
> {code:java}
> // 2019-11-08 18:07:13,858 ERROR 
> [refreshUsed-/home/vipshop/hard_disk/7/dfs/dn/current/BP-1203969992-XXXX-1450855658517]
>  
> org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.ReplicaCachingGetSpaceUsed:
>  ReplicaCachingGetSpaceUsed refresh error
> java.util.ConcurrentModificationException: Tree has been modified outside of 
> iterator    
> at 
> org.apache.hadoop.hdfs.util.FoldedTreeSet$TreeSetIterator.checkForModification(FoldedTreeSet.java:311)
>     
> at 
> org.apache.hadoop.hdfs.util.FoldedTreeSet$TreeSetIterator.hasNext(FoldedTreeSet.java:256)
>     
> at java.util.AbstractCollection.addAll(AbstractCollection.java:343)    
> at java.util.HashSet.<init>(HashSet.java:120)    
> at 
> org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.deepCopyReplica(FsDatasetImpl.java:1052)
>     
> at 
> org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.ReplicaCachingGetSpaceUsed.refresh(ReplicaCachingGetSpaceUsed.java:73)
>     
> at 
> org.apache.hadoop.fs.CachingGetSpaceUsed$RefreshThread.run(CachingGetSpaceUsed.java:178)
>    
> at java.lang.Thread.run(Thread.java:748)
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
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