Return-Path: Delivered-To: apmail-hadoop-hdfs-commits-archive@minotaur.apache.org Received: (qmail 82359 invoked from network); 6 Dec 2010 04:34:52 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 6 Dec 2010 04:34:52 -0000 Received: (qmail 17260 invoked by uid 500); 6 Dec 2010 04:34:52 -0000 Delivered-To: apmail-hadoop-hdfs-commits-archive@hadoop.apache.org Received: (qmail 17166 invoked by uid 500); 6 Dec 2010 04:34:50 -0000 Mailing-List: contact hdfs-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: hdfs-dev@hadoop.apache.org Delivered-To: mailing list hdfs-commits@hadoop.apache.org Received: (qmail 17158 invoked by uid 99); 6 Dec 2010 04:34:49 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Dec 2010 04:34:49 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Dec 2010 04:34:46 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id DE59E238897D; Mon, 6 Dec 2010 04:34:24 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1042517 - in /hadoop/hdfs/trunk: CHANGES.txt src/test/unit/org/apache/hadoop/hdfs/server/datanode/TestBlockRecovery.java Date: Mon, 06 Dec 2010 04:34:24 -0000 To: hdfs-commits@hadoop.apache.org From: cos@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101206043424.DE59E238897D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: cos Date: Mon Dec 6 04:34:24 2010 New Revision: 1042517 URL: http://svn.apache.org/viewvc?rev=1042517&view=rev Log: HDFS-1502. TestBlockRecovery triggers NPE in assert. Contributed by Hairong Kuang. Modified: hadoop/hdfs/trunk/CHANGES.txt hadoop/hdfs/trunk/src/test/unit/org/apache/hadoop/hdfs/server/datanode/TestBlockRecovery.java Modified: hadoop/hdfs/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/CHANGES.txt?rev=1042517&r1=1042516&r2=1042517&view=diff ============================================================================== --- hadoop/hdfs/trunk/CHANGES.txt (original) +++ hadoop/hdfs/trunk/CHANGES.txt Mon Dec 6 04:34:24 2010 @@ -426,6 +426,8 @@ Release 0.22.0 - Unreleased HDFS-1523. TestLargeBlock is failing on trunk. (cos) + HDFS-1502. TestBlockRecovery triggers NPE in assert. (hairong via cos) + Release 0.21.1 - Unreleased IMPROVEMENTS Modified: hadoop/hdfs/trunk/src/test/unit/org/apache/hadoop/hdfs/server/datanode/TestBlockRecovery.java URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/test/unit/org/apache/hadoop/hdfs/server/datanode/TestBlockRecovery.java?rev=1042517&r1=1042516&r2=1042517&view=diff ============================================================================== --- hadoop/hdfs/trunk/src/test/unit/org/apache/hadoop/hdfs/server/datanode/TestBlockRecovery.java (original) +++ hadoop/hdfs/trunk/src/test/unit/org/apache/hadoop/hdfs/server/datanode/TestBlockRecovery.java Mon Dec 6 04:34:24 2010 @@ -128,7 +128,8 @@ public class TestBlockRecovery { private void testSyncReplicas(ReplicaRecoveryInfo replica1, ReplicaRecoveryInfo replica2, InterDatanodeProtocol dn1, - InterDatanodeProtocol dn2) throws IOException { + InterDatanodeProtocol dn2, + long expectLen) throws IOException { DatanodeInfo[] locs = new DatanodeInfo[]{ mock(DatanodeInfo.class), mock(DatanodeInfo.class)}; @@ -141,6 +142,13 @@ public class TestBlockRecovery { new DatanodeID("aa", "bb", 11, 22), dn2, replica2); syncList.add(record1); syncList.add(record2); + + when(dn1.updateReplicaUnderRecovery((Block)anyObject(), anyLong(), + anyLong())).thenReturn(new Block(block.getBlockId(), + expectLen, block.getGenerationStamp())); + when(dn2.updateReplicaUnderRecovery((Block)anyObject(), anyLong(), + anyLong())).thenReturn(new Block(block.getBlockId(), + expectLen, block.getGenerationStamp())); dn.syncBlock(rBlock, syncList); } @@ -162,7 +170,7 @@ public class TestBlockRecovery { InterDatanodeProtocol dn1 = mock(InterDatanodeProtocol.class); InterDatanodeProtocol dn2 = mock(InterDatanodeProtocol.class); - testSyncReplicas(replica1, replica2, dn1, dn2); + testSyncReplicas(replica1, replica2, dn1, dn2, REPLICA_LEN1); verify(dn1).updateReplicaUnderRecovery(block, RECOVERY_ID, REPLICA_LEN1); verify(dn2).updateReplicaUnderRecovery(block, RECOVERY_ID, REPLICA_LEN1); @@ -173,7 +181,7 @@ public class TestBlockRecovery { REPLICA_LEN2, GEN_STAMP-2, ReplicaState.FINALIZED); try { - testSyncReplicas(replica1, replica2, dn1, dn2); + testSyncReplicas(replica1, replica2, dn1, dn2, REPLICA_LEN1); Assert.fail("Two finalized replicas should not have different lengthes!"); } catch (IOException e) { Assert.assertTrue(e.getMessage().startsWith( @@ -201,7 +209,7 @@ public class TestBlockRecovery { InterDatanodeProtocol dn1 = mock(InterDatanodeProtocol.class); InterDatanodeProtocol dn2 = mock(InterDatanodeProtocol.class); - testSyncReplicas(replica1, replica2, dn1, dn2); + testSyncReplicas(replica1, replica2, dn1, dn2, REPLICA_LEN1); verify(dn1).updateReplicaUnderRecovery(block, RECOVERY_ID, REPLICA_LEN1); verify(dn2).updateReplicaUnderRecovery(block, RECOVERY_ID, REPLICA_LEN1); @@ -214,7 +222,7 @@ public class TestBlockRecovery { dn1 = mock(InterDatanodeProtocol.class); dn2 = mock(InterDatanodeProtocol.class); - testSyncReplicas(replica1, replica2, dn1, dn2); + testSyncReplicas(replica1, replica2, dn1, dn2, REPLICA_LEN1); verify(dn1).updateReplicaUnderRecovery(block, RECOVERY_ID, REPLICA_LEN1); verify(dn2, never()).updateReplicaUnderRecovery( block, RECOVERY_ID, REPLICA_LEN1); @@ -240,7 +248,7 @@ public class TestBlockRecovery { InterDatanodeProtocol dn1 = mock(InterDatanodeProtocol.class); InterDatanodeProtocol dn2 = mock(InterDatanodeProtocol.class); - testSyncReplicas(replica1, replica2, dn1, dn2); + testSyncReplicas(replica1, replica2, dn1, dn2, REPLICA_LEN1); verify(dn1).updateReplicaUnderRecovery(block, RECOVERY_ID, REPLICA_LEN1); verify(dn2, never()).updateReplicaUnderRecovery( block, RECOVERY_ID, REPLICA_LEN1); @@ -254,7 +262,7 @@ public class TestBlockRecovery { dn1 = mock(InterDatanodeProtocol.class); dn2 = mock(InterDatanodeProtocol.class); - testSyncReplicas(replica1, replica2, dn1, dn2); + testSyncReplicas(replica1, replica2, dn1, dn2, REPLICA_LEN1); verify(dn1).updateReplicaUnderRecovery(block, RECOVERY_ID, REPLICA_LEN1); verify(dn2, never()).updateReplicaUnderRecovery( block, RECOVERY_ID, REPLICA_LEN1); @@ -278,8 +286,8 @@ public class TestBlockRecovery { InterDatanodeProtocol dn1 = mock(InterDatanodeProtocol.class); InterDatanodeProtocol dn2 = mock(InterDatanodeProtocol.class); - testSyncReplicas(replica1, replica2, dn1, dn2); long minLen = Math.min(REPLICA_LEN1, REPLICA_LEN2); + testSyncReplicas(replica1, replica2, dn1, dn2, minLen); verify(dn1).updateReplicaUnderRecovery(block, RECOVERY_ID, minLen); verify(dn2).updateReplicaUnderRecovery(block, RECOVERY_ID, minLen); } @@ -302,7 +310,7 @@ public class TestBlockRecovery { InterDatanodeProtocol dn1 = mock(InterDatanodeProtocol.class); InterDatanodeProtocol dn2 = mock(InterDatanodeProtocol.class); - testSyncReplicas(replica1, replica2, dn1, dn2); + testSyncReplicas(replica1, replica2, dn1, dn2, REPLICA_LEN1); verify(dn1).updateReplicaUnderRecovery(block, RECOVERY_ID, REPLICA_LEN1); verify(dn2, never()).updateReplicaUnderRecovery( block, RECOVERY_ID, REPLICA_LEN1); @@ -326,9 +334,9 @@ public class TestBlockRecovery { InterDatanodeProtocol dn1 = mock(InterDatanodeProtocol.class); InterDatanodeProtocol dn2 = mock(InterDatanodeProtocol.class); - testSyncReplicas(replica1, replica2, dn1, dn2); - long minLen = Math.min(REPLICA_LEN1, REPLICA_LEN2); + testSyncReplicas(replica1, replica2, dn1, dn2, minLen); + verify(dn1).updateReplicaUnderRecovery(block, RECOVERY_ID, minLen); verify(dn2).updateReplicaUnderRecovery(block, RECOVERY_ID, minLen); }