[ https://issues.apache.org/jira/browse/ZOOKEEPER-1990?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16406301#comment-16406301 ]
Mark Fenes commented on ZOOKEEPER-1990: --------------------------------------- [~shralex] According to Random's source, the parameterless instantiation of Random (new Random()) does the following: {code:java} public Random() { this(seedUniquifier() ^ System.nanoTime()); }{code} The above looks to me at least as random as {code:java} sourceOfRandomness = new Random(System.currentTimeMillis() ^ this.hashCode()); {code} or probably new Random() is even more random, as seedUniquifier() seems to be different each time, but this.hashCode() returns the same value if the same StaticHostProvider instance is used. I understand those cases, when in tests, we would like to have the same repeatable results (e.g. when new Random(1) is used), but what is the purpose of setting a less random seed (e.g. sessionId ^ superSecret) instead of using new Random(), which appears to be more random? > suspicious instantiation of java Random instances > ------------------------------------------------- > > Key: ZOOKEEPER-1990 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1990 > Project: ZooKeeper > Issue Type: Bug > Affects Versions: 3.5.0 > Reporter: Patrick Hunt > Assignee: Mark Fenes > Priority: Critical > Fix For: 3.5.4, 3.6.0 > > > It's not clear to me why we are doing this, but it looks very suspicious. Why > aren't we just calling "new Random()" in these cases? (even for the tests I > don't really see it - typically that would just be for repeatability) > {noformat} > ag "new Random[ \t]*\(" . > src/java/main/org/apache/zookeeper/ClientCnxn.java > 817: private Random r = new Random(System.nanoTime()); > src/java/main/org/apache/zookeeper/client/StaticHostProvider.java > 75: sourceOfRandomness = new Random(System.currentTimeMillis() ^ > this.hashCode()); > 98: sourceOfRandomness = new Random(randomnessSeed); > src/java/main/org/apache/zookeeper/server/quorum/AuthFastLeaderElection.java > 420: rand = new Random(java.lang.Thread.currentThread().getId() > src/java/main/org/apache/zookeeper/server/SyncRequestProcessor.java > 64: private final Random r = new Random(System.nanoTime()); > src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java > 537: Random r = new Random(id ^ superSecret); > 554: Random r = new Random(sessionId ^ superSecret); > src/java/test/org/apache/zookeeper/server/quorum/WatchLeakTest.java > 271: Random r = new Random(SESSION_ID ^ superSecret); > src/java/test/org/apache/zookeeper/server/quorum/CommitProcessorTest.java > 151: Random rand = new Random(Thread.currentThread().getId()); > 258: Random rand = new Random(Thread.currentThread().getId()); > 288: Random rand = new Random(Thread.currentThread().getId()); > src/java/test/org/apache/zookeeper/test/StaticHostProviderTest.java > 40: private Random r = new Random(1); > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)