HDFS-6470. TestBPOfferService.testBPInitErrorHandling is flaky. Contributed by Ming Ma.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1602490 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andrew Wang 2014-06-13 19:00:03 +00:00
parent 02f3ff3387
commit 70db2ec417
2 changed files with 34 additions and 7 deletions

View File

@ -437,6 +437,9 @@ Release 2.5.0 - UNRELEASED
HDFS-6330. Move mkdirs() to FSNamesystem. (wheat9) HDFS-6330. Move mkdirs() to FSNamesystem. (wheat9)
HDFS-6470. TestBPOfferService.testBPInitErrorHandling is flaky.
(Ming Ma via wang)
OPTIMIZATIONS OPTIMIZATIONS
HDFS-6214. Webhdfs has poor throughput for files >2GB (daryn) HDFS-6214. Webhdfs has poor throughput for files >2GB (daryn)

View File

@ -325,15 +325,14 @@ public class TestBPOfferService {
} }
}).when(mockDn).initBlockPool(Mockito.any(BPOfferService.class)); }).when(mockDn).initBlockPool(Mockito.any(BPOfferService.class));
BPOfferService bpos = setupBPOSForNNs(mockDn, mockNN1, mockNN2); BPOfferService bpos = setupBPOSForNNs(mockDn, mockNN1, mockNN2);
List<BPServiceActor> actors = bpos.getBPServiceActors();
assertEquals(2, actors.size());
bpos.start(); bpos.start();
try { try {
waitForInitialization(bpos); waitForInitialization(bpos);
List<BPServiceActor> actors = bpos.getBPServiceActors(); // even if one of the actor initialization fails, the other one will be
// even if one of the actor initialization fails also other will be // finish block report.
// running until both failed. waitForBlockReport(mockNN1, mockNN2);
assertEquals(2, actors.size());
BPServiceActor actor = actors.get(0);
waitForBlockReport(actor.getNameNodeProxy());
} finally { } finally {
bpos.stop(); bpos.stop();
} }
@ -409,7 +408,32 @@ public class TestBPOfferService {
} }
}, 500, 10000); }, 500, 10000);
} }
private void waitForBlockReport(
final DatanodeProtocolClientSideTranslatorPB mockNN1,
final DatanodeProtocolClientSideTranslatorPB mockNN2)
throws Exception {
GenericTestUtils.waitFor(new Supplier<Boolean>() {
@Override
public Boolean get() {
return get(mockNN1) || get(mockNN2);
}
private Boolean get(DatanodeProtocolClientSideTranslatorPB mockNN) {
try {
Mockito.verify(mockNN).blockReport(
Mockito.<DatanodeRegistration>anyObject(),
Mockito.eq(FAKE_BPID),
Mockito.<StorageBlockReport[]>anyObject());
return true;
} catch (Throwable t) {
LOG.info("waiting on block report: " + t.getMessage());
return false;
}
}
}, 500, 10000);
}
private ReceivedDeletedBlockInfo[] waitForBlockReceived( private ReceivedDeletedBlockInfo[] waitForBlockReceived(
ExtendedBlock fakeBlock, ExtendedBlock fakeBlock,
DatanodeProtocolClientSideTranslatorPB mockNN) throws Exception { DatanodeProtocolClientSideTranslatorPB mockNN) throws Exception {