Repository: hadoop Updated Branches: refs/heads/branch-2 9bc676aa6 -> 47ddaee1d
HDFS-7122. Use of ThreadLocal<Random> results in poor block placement. (wang) (cherry picked from commit d7086c563ff2847c415913ac625b2a557eeccbdd) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/47ddaee1 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/47ddaee1 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/47ddaee1 Branch: refs/heads/branch-2 Commit: 47ddaee1dbe7e027218437df674ca48d45eb55e2 Parents: 9bc676a Author: Andrew Wang <[email protected]> Authored: Mon Sep 29 14:50:28 2014 -0700 Committer: Andrew Wang <[email protected]> Committed: Mon Sep 29 15:00:28 2014 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/net/NetworkTopology.java | 25 ++++---------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ 2 files changed, 7 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/47ddaee1/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java index 3404ff0..a11ba9c 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java @@ -674,27 +674,11 @@ public class NetworkTopology { return node1.getParent()==node2.getParent(); } - private static final ThreadLocal<Random> r = new ThreadLocal<Random>(); - - /** - * Getter for thread-local Random, which provides better performance than - * a shared Random (even though Random is thread-safe). - * - * @return Thread-local Random. - */ - protected Random getRandom() { - Random rand = r.get(); - if (rand == null) { - rand = new Random(); - r.set(rand); - } - return rand; - } + private static final Random r = new Random(); @VisibleForTesting void setRandomSeed(long seed) { - Random rand = getRandom(); - rand.setSeed(seed); + r.setSeed(seed); } /** randomly choose one node from <i>scope</i> @@ -746,7 +730,7 @@ public class NetworkTopology { "Failed to find datanode (scope=\"" + String.valueOf(scope) + "\" excludedScope=\"" + String.valueOf(excludedScope) + "\")."); } - int leaveIndex = getRandom().nextInt(numOfDatanodes); + int leaveIndex = r.nextInt(numOfDatanodes); return innerNode.getLeaf(leaveIndex, node); } @@ -919,11 +903,10 @@ public class NetworkTopology { list.add(node); } - Random rand = getRandom(); int idx = 0; for (List<Node> list: tree.values()) { if (list != null) { - Collections.shuffle(list, rand); + Collections.shuffle(list, r); for (Node n: list) { nodes[idx] = n; idx++; http://git-wip-us.apache.org/repos/asf/hadoop/blob/47ddaee1/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 0e0459a..2bb6ad8 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -277,6 +277,9 @@ Release 2.6.0 - UNRELEASED HDFS-6865. Byte array native checksumming on client side (James Thomas via todd) + HDFS-7122. Use of ThreadLocal<Random> results in poor block placement. + (wang) + BUG FIXES HDFS-6823. dfs.web.authentication.kerberos.principal shows up in logs for
