You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by dh...@apache.org on 2007/12/02 06:24:34 UTC
svn commit: r600244 - in /lucene/hadoop/trunk: CHANGES.txt
src/test/org/apache/hadoop/dfs/TestBlockReplacement.java
Author: dhruba
Date: Sat Dec 1 21:24:33 2007
New Revision: 600244
URL: http://svn.apache.org/viewvc?rev=600244&view=rev
Log:
HADOOP-2314. Prevent TestBlockReplacement from occasionally getting
into an infinite loop. (Hairong Kuang via dhruba)
Modified:
lucene/hadoop/trunk/CHANGES.txt
lucene/hadoop/trunk/src/test/org/apache/hadoop/dfs/TestBlockReplacement.java
Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?rev=600244&r1=600243&r2=600244&view=diff
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Sat Dec 1 21:24:33 2007
@@ -172,6 +172,9 @@
HADOOP-2209. SecondaryNamenode process exits if it encounters exceptions
that it cannot handle. (Dhruba Borthakur via dhruba)
+ HADOOP-2314. Prevent TestBlockReplacement from occasionally getting
+ into an infinite loop. (Hairong Kuang via dhruba)
+
Branch 0.15 (unreleased)
BUG FIXES
Modified: lucene/hadoop/trunk/src/test/org/apache/hadoop/dfs/TestBlockReplacement.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/test/org/apache/hadoop/dfs/TestBlockReplacement.java?rev=600244&r1=600243&r2=600244&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/test/org/apache/hadoop/dfs/TestBlockReplacement.java (original)
+++ lucene/hadoop/trunk/src/test/org/apache/hadoop/dfs/TestBlockReplacement.java Sat Dec 1 21:24:33 2007
@@ -23,6 +23,7 @@
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Random;
@@ -142,34 +143,36 @@
// start to replace the block
// case 1: proxySource does not contain the block
LOG.info("Testcase 1: Proxy " + newNode.getName()
- + "does not contain the block " + b.getBlockName() );
+ + " does not contain the block " + b.getBlockName() );
assertFalse(replaceBlock(b, source, newNode, proxies.get(0)));
// case 2: destination contains the block
LOG.info("Testcase 2: Destination " + proxies.get(1).getName()
- + "contains the block " + b.getBlockName() );
+ + " contains the block " + b.getBlockName() );
assertFalse(replaceBlock(b, source, proxies.get(0), proxies.get(1)));
// case 3: correct case
- LOG.info("Testcase 3: Proxy=" + source.getName() + "source=" +
+ LOG.info("Testcase 3: Proxy=" + source.getName() + " source=" +
proxies.get(0).getName() + " destination=" + newNode.getName() );
assertTrue(replaceBlock(b, source, proxies.get(0), newNode));
// block locations should contain two proxies and newNode
- checkBlocks(source, fileName.toString(),
+ checkBlocks(new DatanodeInfo[]{newNode, proxies.get(0), proxies.get(1)},
+ fileName.toString(),
DEFAULT_BLOCK_SIZE, REPLICATION_FACTOR);
- // case 4: proxies.get(1) is not a valid del hint
- LOG.info("Testcase 3: invalid del hint " + proxies.get(0).getName() );
+ // case 4: proxies.get(0) is not a valid del hint
+ LOG.info("Testcase 4: invalid del hint " + proxies.get(0).getName() );
assertTrue(replaceBlock(b, proxies.get(1), proxies.get(0), source));
- /* block locations should contain two proxies and source;
- * newNode was deleted.
+ /* block locations should contain two proxies,
+ * and either of source or newNode
*/
- checkBlocks(newNode, fileName.toString(),
+ checkBlocks(proxies.toArray(new DatanodeInfo[proxies.size()]),
+ fileName.toString(),
DEFAULT_BLOCK_SIZE, REPLICATION_FACTOR);
} finally {
cluster.shutdown();
}
}
- /* file's blocks do not exist at excludedNode */
- private void checkBlocks(DatanodeInfo excludedNode, String fileName,
+ /* check if file's blocks exist at includeNodes */
+ private void checkBlocks(DatanodeInfo[] includeNodes, String fileName,
long fileLen, short replFactor) throws IOException {
Boolean notDone;
do {
@@ -186,10 +189,11 @@
LOG.info("Expected replication factor is " + replFactor +
" but the real replication factor is " + nodes.length );
} else {
- for( DatanodeInfo node : nodes) {
- if (node.equals(excludedNode) ) {
+ List<DatanodeInfo> nodeLocations = Arrays.asList(nodes);
+ for (DatanodeInfo node : includeNodes) {
+ if (!nodeLocations.contains(node) ) {
notDone=true;
- LOG.info("Unexpected block location " + excludedNode.getName() );
+ LOG.info("Block is not located at " + node.getName() );
break;
}
}