HDFS-9435. TestBlockRecovery#testRBWReplicas is failing intermittently. Contributed by Rakesh R.
(cherry picked from commit 001ecf962c
)
This commit is contained in:
parent
846de7d842
commit
040c582b99
|
@ -1501,6 +1501,9 @@ Release 2.8.0 - UNRELEASED
|
||||||
HDFS-9428. Fix intermittent failure of
|
HDFS-9428. Fix intermittent failure of
|
||||||
TestDNFencing.testQueueingWithAppend. (Masatake Iwasaki via waltersu4549)
|
TestDNFencing.testQueueingWithAppend. (Masatake Iwasaki via waltersu4549)
|
||||||
|
|
||||||
|
HDFS-9435. TestBlockRecovery#testRBWReplicas is failing intermittently.
|
||||||
|
(Rakesh R via waltersu4549)
|
||||||
|
|
||||||
Release 2.7.3 - UNRELEASED
|
Release 2.7.3 - UNRELEASED
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -41,6 +41,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
import java.util.concurrent.TimeoutException;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
@ -90,6 +91,8 @@ import org.mockito.Mockito;
|
||||||
import org.mockito.invocation.InvocationOnMock;
|
import org.mockito.invocation.InvocationOnMock;
|
||||||
import org.mockito.stubbing.Answer;
|
import org.mockito.stubbing.Answer;
|
||||||
|
|
||||||
|
import com.google.common.base.Supplier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This tests if sync all replicas in block recovery works correctly
|
* This tests if sync all replicas in block recovery works correctly
|
||||||
*/
|
*/
|
||||||
|
@ -179,10 +182,35 @@ public class TestBlockRecovery {
|
||||||
};
|
};
|
||||||
// Trigger a heartbeat so that it acknowledges the NN as active.
|
// Trigger a heartbeat so that it acknowledges the NN as active.
|
||||||
dn.getAllBpOs().get(0).triggerHeartbeatForTests();
|
dn.getAllBpOs().get(0).triggerHeartbeatForTests();
|
||||||
|
waitForActiveNN();
|
||||||
|
|
||||||
spyDN = spy(dn);
|
spyDN = spy(dn);
|
||||||
recoveryWorker = new BlockRecoveryWorker(spyDN);
|
recoveryWorker = new BlockRecoveryWorker(spyDN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for active NN up to 15 seconds.
|
||||||
|
*/
|
||||||
|
private void waitForActiveNN() {
|
||||||
|
try {
|
||||||
|
GenericTestUtils.waitFor(new Supplier<Boolean>() {
|
||||||
|
@Override
|
||||||
|
public Boolean get() {
|
||||||
|
return dn.getAllBpOs().get(0).getActiveNN() != null;
|
||||||
|
}
|
||||||
|
}, 1000, 15 * 1000);
|
||||||
|
} catch (TimeoutException e) {
|
||||||
|
// Here its not failing, will again do the assertions for activeNN after
|
||||||
|
// this waiting period and fails there if BPOS has not acknowledged
|
||||||
|
// any NN as active.
|
||||||
|
LOG.warn("Failed to get active NN", e);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
LOG.warn("InterruptedException while waiting to see active NN", e);
|
||||||
|
}
|
||||||
|
Assert.assertNotNull("Failed to get ActiveNN",
|
||||||
|
dn.getAllBpOs().get(0).getActiveNN());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cleans the resources and closes the instance of datanode
|
* Cleans the resources and closes the instance of datanode
|
||||||
* @throws IOException if an error occurred
|
* @throws IOException if an error occurred
|
||||||
|
|
Loading…
Reference in New Issue