Repository: cassandra
Updated Branches:
  refs/heads/trunk 88b01c866 -> f165e72bf


Fix speculative retry parsing on non-english default Locale

Patch by Paulo Motta; Reviewed by Aleksey Yeschenko for CASSANDRA-14374


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f165e72b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f165e72b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f165e72b

Branch: refs/heads/trunk
Commit: f165e72bf19e8d12457b8f569517012628513d24
Parents: 88b01c8
Author: Paulo Motta <pa...@apache.org>
Authored: Tue Apr 17 15:47:29 2018 -0300
Committer: Paulo Motta <pa...@apache.org>
Committed: Tue Apr 17 15:47:29 2018 -0300

----------------------------------------------------------------------
 .../reads/PercentileSpeculativeRetryPolicy.java       |  7 ++++++-
 .../service/reads/SpeculativeRetryParseTest.java      | 14 ++++++++++++--
 2 files changed, 18 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/f165e72b/src/java/org/apache/cassandra/service/reads/PercentileSpeculativeRetryPolicy.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/service/reads/PercentileSpeculativeRetryPolicy.java
 
b/src/java/org/apache/cassandra/service/reads/PercentileSpeculativeRetryPolicy.java
index 9bf5d95..42f90fe 100644
--- 
a/src/java/org/apache/cassandra/service/reads/PercentileSpeculativeRetryPolicy.java
+++ 
b/src/java/org/apache/cassandra/service/reads/PercentileSpeculativeRetryPolicy.java
@@ -18,6 +18,8 @@
 package org.apache.cassandra.service.reads;
 
 import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -32,7 +34,10 @@ public class PercentileSpeculativeRetryPolicy implements 
SpeculativeRetryPolicy
     public static final PercentileSpeculativeRetryPolicy NINETY_NINE_P = new 
PercentileSpeculativeRetryPolicy(99.0);
 
     private static final Pattern PATTERN = 
Pattern.compile("^(?<val>[0-9.]+)p(ercentile)?$", Pattern.CASE_INSENSITIVE);
-    private static final DecimalFormat FORMATTER = new DecimalFormat("#.####");
+    /**
+     * The pattern above uses dot as decimal separator, so we use {@link 
Locale#ENGLISH} to enforce that. (CASSANDRA-14374)
+     */
+    private static final DecimalFormat FORMATTER = new DecimalFormat("#.####", 
new DecimalFormatSymbols(Locale.ENGLISH));
 
     private final double percentile;
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/f165e72b/test/unit/org/apache/cassandra/service/reads/SpeculativeRetryParseTest.java
----------------------------------------------------------------------
diff --git 
a/test/unit/org/apache/cassandra/service/reads/SpeculativeRetryParseTest.java 
b/test/unit/org/apache/cassandra/service/reads/SpeculativeRetryParseTest.java
index 8c742be..86b307e 100644
--- 
a/test/unit/org/apache/cassandra/service/reads/SpeculativeRetryParseTest.java
+++ 
b/test/unit/org/apache/cassandra/service/reads/SpeculativeRetryParseTest.java
@@ -20,6 +20,7 @@ package org.apache.cassandra.service.reads;
 
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Locale;
 
 import org.junit.Test;
 import org.junit.experimental.runners.Enclosed;
@@ -36,10 +37,11 @@ import static 
org.apache.cassandra.service.reads.HybridSpeculativeRetryPolicy.Fu
 @RunWith(Enclosed.class)
 public class SpeculativeRetryParseTest
 {
-
     @RunWith(Parameterized.class)
     public static class SuccessfulParseTest
     {
+        static final Locale defaultLocale = Locale.getDefault();
+
         private final String string;
         private final SpeculativeRetryPolicy expectedValue;
 
@@ -104,9 +106,17 @@ public class SpeculativeRetryParseTest
         }
 
         @Test
-        public void testToStringRoundTrip()
+        public void testToStringRoundTripDefaultLocale()
+        {
+            assertEquals(expectedValue, 
SpeculativeRetryPolicy.fromString(expectedValue.toString()));
+        }
+
+        @Test
+        public void testToStringRoundTripCommaDecimalSeparatorLocale()
         {
+            Locale.setDefault(new Locale("pt","BR")); // CASSANDRA-14374: 
Brazil uses comma instead of dot as decimal separator
             assertEquals(expectedValue, 
SpeculativeRetryPolicy.fromString(expectedValue.toString()));
+            Locale.setDefault(defaultLocale);
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to