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