Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
2.0.2-alpha
-
None
-
None
Description
Duplicate data node on the name node after formatting data node。
When we registered data node,use nodeReg.getXferPort() to find DatanodeDescriptor.
DatanodeDescriptor nodeN = host2DatanodeMap.getDatanodeByXferAddr( nodeReg.getIpAddr(), nodeReg.getXferPort());
but add data node use node.getIpAddr().
/** add node to the map * return true if the node is added; false otherwise. */ boolean add(DatanodeDescriptor node) { hostmapLock.writeLock().lock(); try { if (node==null || contains(node)) { return false; } String ipAddr = node.getIpAddr(); DatanodeDescriptor[] nodes = map.get(ipAddr); DatanodeDescriptor[] newNodes; if (nodes==null) { newNodes = new DatanodeDescriptor[1]; newNodes[0]=node; } else { // rare case: more than one datanode on the host newNodes = new DatanodeDescriptor[nodes.length+1]; System.arraycopy(nodes, 0, newNodes, 0, nodes.length); newNodes[nodes.length] = node; } map.put(ipAddr, newNodes); return true; } finally { hostmapLock.writeLock().unlock(); } }