Wei-Chiu Chuang created HDFS-11515:
--------------------------------------

             Summary: -du throws ConcurrentModificationException
                 Key: HDFS-11515
                 URL: https://issues.apache.org/jira/browse/HDFS-11515
             Project: Hadoop HDFS
          Issue Type: Bug
          Components: namenode, shell
    Affects Versions: 3.0.0-alpha2, 2.8.0
            Reporter: Wei-Chiu Chuang


HDFS-10797 fixed a disk summary (-du) bug, but it introduced a new bug.

The bug can be reproduced running the following commands:
{noformat}
bash-4.1$ hdfs dfs -mkdir /tmp/d0
bash-4.1$ hdfs dfsadmin -allowSnapshot /tmp/d0
Allowing snaphot on /tmp/d0 succeeded
bash-4.1$ hdfs dfs -touchz /tmp/d0/f4
bash-4.1$ hdfs dfs -mkdir /tmp/d0/d1
bash-4.1$ hdfs dfs -createSnapshot /tmp/d0 s1
Created snapshot /tmp/d0/.snapshot/s1
bash-4.1$ hdfs dfs -mkdir /tmp/d0/d1/d2
bash-4.1$ hdfs dfs -mkdir /tmp/d0/d1/d3
bash-4.1$ hdfs dfs -mkdir /tmp/d0/d1/d2/d4
bash-4.1$ hdfs dfs -mkdir /tmp/d0/d1/d3/d5
bash-4.1$ hdfs dfs -createSnapshot /tmp/d0 s2
Created snapshot /tmp/d0/.snapshot/s2
bash-4.1$ hdfs dfs -rmdir /tmp/d0/d1/d2/d4
bash-4.1$ hdfs dfs -rmdir /tmp/d0/d1/d2
bash-4.1$ hdfs dfs -rmdir /tmp/d0/d1/d3/d5
bash-4.1$ hdfs dfs -rmdir /tmp/d0/d1/d3
bash-4.1$ hdfs dfs -du -h /tmp/d0
du: java.util.ConcurrentModificationException
0 0 /tmp/d0/f4
{noformat}

A ConcurrentModificationException forced du to terminate abruptly.

Correspondingly, NameNode log has the following error:
{noformat}
2017-03-08 14:32:17,673 WARN org.apache.hadoop.ipc.Server: IPC Server handler 4 
on 8020, call org.apache.hadoop.hdfs.protocol.ClientProtocol.getContentSumma
ry from 10.0.0.198:49957 Call#2 Retry#0
java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextEntry(HashMap.java:922)
        at java.util.HashMap$KeyIterator.next(HashMap.java:956)
        at 
org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext.tallyDeletedSnapshottedINodes(ContentSummaryComputationContext.java:209)
        at 
org.apache.hadoop.hdfs.server.namenode.INode.computeAndConvertContentSummary(INode.java:507)
        at 
org.apache.hadoop.hdfs.server.namenode.FSDirectory.getContentSummary(FSDirectory.java:2302)
        at 
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getContentSummary(FSNamesystem.java:4535)
        at 
org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getContentSummary(NameNodeRpcServer.java:1087)
        at 
org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getContentSummary(AuthorizationProviderProxyClientProtocol.java:5
63)
        at 
org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getContentSummary(ClientNamenodeProtocolServerSideTranslatorPB.jav
a:873)
        at 
org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
        at 
org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1073)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2216)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2212)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at 
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2210)
{noformat}

The bug is due to a improper use of HashSet, not concurrent operations. 
Basically, a HashSet can not be updated while an iterator is traversing it.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

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

Reply via email to