Improve error handling for epoch format parser with time zone (#23689)
Change the error response when using a non UTF timezone for range queries with epoch_millis or epoch_second formats to an illegal argument exception. The goal is to provide a better explanation of why the query has failed. The current behavior is to respond with a parse exception. Closes #22621
This commit is contained in:
parent
efc62f193f
commit
3caf887632
|
@ -333,9 +333,10 @@ public class Joda {
|
|||
boolean isPositive = text.startsWith("-") == false;
|
||||
boolean isTooLong = text.length() > estimateParsedLength();
|
||||
|
||||
if ((isPositive && isTooLong) ||
|
||||
// timestamps have to have UTC timezone
|
||||
bucket.getZone() != DateTimeZone.UTC) {
|
||||
if (bucket.getZone() != DateTimeZone.UTC) {
|
||||
String format = hasMilliSecondPrecision ? "epoch_millis" : "epoch_second";
|
||||
throw new IllegalArgumentException("time_zone must be UTC for format [" + format + "]");
|
||||
} else if (isPositive && isTooLong) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -314,6 +314,36 @@ public class SimpleJodaTests extends ESTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
public void testForInvalidTimeZoneWithEpochSeconds() {
|
||||
DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder()
|
||||
.append(new Joda.EpochTimeParser(false))
|
||||
.toFormatter()
|
||||
.withZone(DateTimeZone.forOffsetHours(1));
|
||||
FormatDateTimeFormatter formatter =
|
||||
new FormatDateTimeFormatter("epoch_seconds", dateTimeFormatter, Locale.ROOT);
|
||||
try {
|
||||
formatter.parser().parseDateTime("1433144433655");
|
||||
fail("Expected IllegalArgumentException");
|
||||
} catch (IllegalArgumentException e) {
|
||||
assertThat(e.getMessage(), containsString("time_zone must be UTC"));
|
||||
}
|
||||
}
|
||||
|
||||
public void testForInvalidTimeZoneWithEpochMillis() {
|
||||
DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder()
|
||||
.append(new Joda.EpochTimeParser(true))
|
||||
.toFormatter()
|
||||
.withZone(DateTimeZone.forOffsetHours(1));
|
||||
FormatDateTimeFormatter formatter =
|
||||
new FormatDateTimeFormatter("epoch_millis", dateTimeFormatter, Locale.ROOT);
|
||||
try {
|
||||
formatter.parser().parseDateTime("1433144433");
|
||||
fail("Expected IllegalArgumentException");
|
||||
} catch (IllegalArgumentException e) {
|
||||
assertThat(e.getMessage(), containsString("time_zone must be UTC"));
|
||||
}
|
||||
}
|
||||
|
||||
public void testThatEpochParserIsPrinter() {
|
||||
FormatDateTimeFormatter formatter = Joda.forPattern("epoch_millis");
|
||||
assertThat(formatter.parser().isPrinter(), is(true));
|
||||
|
|
Loading…
Reference in New Issue