gemmellr commented on code in PR #5487:
URL: https://github.com/apache/activemq-artemis/pull/5487#discussion_r1952359866


##########
artemis-commons/src/main/java/org/apache/activemq/artemis/utils/RandomUtil.java:
##########
@@ -31,17 +31,56 @@ public static Random getRandom() {
       return random;
    }
 
+   private static String letters = "abcdefghijklmnopqrstuvwxyz";
+
+   private static String digits = "0123456789";
+
+   private static String randomBase = letters + letters.toUpperCase() + digits;
+
+   /**
+    * Utility method to build a {@code String} filled with random 
alpha-numeric characters. The {@code String} will
+    * contain characters from the following:
+    * <ul>
+    *    <li>abcdefghijklmnopqrstuvwxyz</li>
+    *    <li>ABCDEFGHIJKLMNOPQRSTUVWXYZ</li>
+    *    <li>0123456789</li>
+    * </ul>
+    * @param length how long the returned {@code String} should be
+    * @return a {@code String} of random alpha-numeric characters
+    */
+   public static String randomAlphaNumericString(int length) {
+      StringBuilder result = new StringBuilder(length);
+      for (int i = 0; i < length; i++) {
+         result.append(randomBase.charAt(randomInterval(0, 
randomBase.length())));

Review Comment:
   So, looking at the impl of randomInterval (which I didn't when reviewing the 
addition here before), I can see now that its actually not _exactly_ either of 
the options I said, but rather a third [variant of the first] option.
   
   It turns out randomInterval(..) _can_ pick the 'max', but _only_ if its 
equal the 'min', i.e meaning there is actually no random possibility, but then 
in the more typical use where the two args actually differ it can indeed 
_never_ pick 'max' due to the behaviour of Random#nextInt which you quoted, 
where the calculated singular 'bound' passed to that can never be returned.
   
   So in this exact setup, with min and max essentially fixed at 0 and 62, 
randomAlphaNumericString (..) will indeed work as expected...but only because 
randomInterval(..) is arguably wrong in that it both can and cant return 'max' 
depending on what you feed it. If it were ever changed such that the 'max' 
could generally be returned (as it can in the other method RandomUtil has with 
a 'max') then randomAlphaNumericString(..) would become broken and would 
randomly throw.
   
   
   I would simply change the implementation of randomAlphaNumericString to just 
directly call _random.nextInt(randomBase.length())_ by itself instead of using 
randomInterval(..) to do it, and we can consider whether to change that 
separately.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscr...@activemq.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: gitbox-unsubscr...@activemq.apache.org
For additional commands, e-mail: gitbox-h...@activemq.apache.org
For further information, visit: https://activemq.apache.org/contact


Reply via email to