|
@@ -673,27 +673,11 @@ public class NetworkTopology {
|
|
return node1.getParent()==node2.getParent();
|
|
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
|
|
@VisibleForTesting
|
|
void setRandomSeed(long seed) {
|
|
void setRandomSeed(long seed) {
|
|
- Random rand = getRandom();
|
|
|
|
- rand.setSeed(seed);
|
|
|
|
|
|
+ r.setSeed(seed);
|
|
}
|
|
}
|
|
|
|
|
|
/** randomly choose one node from <i>scope</i>
|
|
/** randomly choose one node from <i>scope</i>
|
|
@@ -745,7 +729,7 @@ public class NetworkTopology {
|
|
"Failed to find datanode (scope=\"" + String.valueOf(scope) +
|
|
"Failed to find datanode (scope=\"" + String.valueOf(scope) +
|
|
"\" excludedScope=\"" + String.valueOf(excludedScope) + "\").");
|
|
"\" excludedScope=\"" + String.valueOf(excludedScope) + "\").");
|
|
}
|
|
}
|
|
- int leaveIndex = getRandom().nextInt(numOfDatanodes);
|
|
|
|
|
|
+ int leaveIndex = r.nextInt(numOfDatanodes);
|
|
return innerNode.getLeaf(leaveIndex, node);
|
|
return innerNode.getLeaf(leaveIndex, node);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -918,11 +902,10 @@ public class NetworkTopology {
|
|
list.add(node);
|
|
list.add(node);
|
|
}
|
|
}
|
|
|
|
|
|
- Random rand = getRandom();
|
|
|
|
int idx = 0;
|
|
int idx = 0;
|
|
for (List<Node> list: tree.values()) {
|
|
for (List<Node> list: tree.values()) {
|
|
if (list != null) {
|
|
if (list != null) {
|
|
- Collections.shuffle(list, rand);
|
|
|
|
|
|
+ Collections.shuffle(list, r);
|
|
for (Node n: list) {
|
|
for (Node n: list) {
|
|
nodes[idx] = n;
|
|
nodes[idx] = n;
|
|
idx++;
|
|
idx++;
|