|
@@ -146,7 +146,15 @@ public class TestDataTransferKeepalive {
|
|
|
stm.read();
|
|
|
assertXceiverCount(1);
|
|
|
|
|
|
- Thread.sleep(WRITE_TIMEOUT + 1000);
|
|
|
+ // Poll for 0 running xceivers. Allow up to 5 seconds for some slack.
|
|
|
+ long totalSleepTime = 0;
|
|
|
+ long sleepTime = WRITE_TIMEOUT + 100;
|
|
|
+ while (getXceiverCountWithoutServer() > 0 && totalSleepTime < 5000) {
|
|
|
+ Thread.sleep(sleepTime);
|
|
|
+ totalSleepTime += sleepTime;
|
|
|
+ sleepTime = 100;
|
|
|
+ }
|
|
|
+
|
|
|
// DN should time out in sendChunks, and this should force
|
|
|
// the xceiver to exit.
|
|
|
assertXceiverCount(0);
|
|
@@ -190,9 +198,7 @@ public class TestDataTransferKeepalive {
|
|
|
}
|
|
|
|
|
|
private void assertXceiverCount(int expected) {
|
|
|
- // Subtract 1, since the DataXceiverServer
|
|
|
- // counts as one
|
|
|
- int count = dn.getXceiverCount() - 1;
|
|
|
+ int count = getXceiverCountWithoutServer();
|
|
|
if (count != expected) {
|
|
|
ReflectionUtils.printThreadInfo(
|
|
|
new PrintWriter(System.err),
|
|
@@ -201,4 +207,14 @@ public class TestDataTransferKeepalive {
|
|
|
count);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Returns the datanode's xceiver count, but subtracts 1, since the
|
|
|
+ * DataXceiverServer counts as one.
|
|
|
+ *
|
|
|
+ * @return int xceiver count, not including DataXceiverServer
|
|
|
+ */
|
|
|
+ private int getXceiverCountWithoutServer() {
|
|
|
+ return dn.getXceiverCount() - 1;
|
|
|
+ }
|
|
|
}
|