HDFS-3664. BlockManager race when stopping active services. Contributed by Colin Patrick McCabe

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1383753 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Eli Collins 2012-09-12 04:10:58 +00:00
parent 229a79bbc3
commit 414abe6918
4 changed files with 18 additions and 5 deletions

View File

@ -755,6 +755,9 @@ Release 2.0.2-alpha - 2012-09-07
HDFS-2757. Cannot read a local block that's being written to when HDFS-2757. Cannot read a local block that's being written to when
using the local read short circuit. (Jean-Daniel Cryans via eli) using the local read short circuit. (Jean-Daniel Cryans via eli)
HDFS-3664. BlockManager race when stopping active services.
(Colin Patrick McCabe via eli)
BREAKDOWN OF HDFS-3042 SUBTASKS BREAKDOWN OF HDFS-3042 SUBTASKS
HDFS-2185. HDFS portion of ZK-based FailoverController (todd) HDFS-2185. HDFS portion of ZK-based FailoverController (todd)

View File

@ -363,11 +363,10 @@ public class BlockManager {
replicationThread.join(3000); replicationThread.join(3000);
} }
} catch (InterruptedException ie) { } catch (InterruptedException ie) {
} finally {
if (pendingReplications != null) pendingReplications.stop();
blocksMap.close();
datanodeManager.close();
} }
datanodeManager.close();
pendingReplications.stop();
blocksMap.close();
} }
/** @return the datanodeManager */ /** @return the datanodeManager */

View File

@ -192,7 +192,13 @@ public class DatanodeManager {
} }
void close() { void close() {
if (decommissionthread != null) decommissionthread.interrupt(); if (decommissionthread != null) {
decommissionthread.interrupt();
try {
decommissionthread.join(3000);
} catch (InterruptedException e) {
}
}
heartbeatManager.close(); heartbeatManager.close();
} }

View File

@ -74,6 +74,11 @@ class HeartbeatManager implements DatanodeStatistics {
void close() { void close() {
heartbeatThread.interrupt(); heartbeatThread.interrupt();
try {
// This will no effect if the thread hasn't yet been started.
heartbeatThread.join(3000);
} catch (InterruptedException e) {
}
} }
synchronized int getLiveDatanodeCount() { synchronized int getLiveDatanodeCount() {