Repository: flume Updated Branches: refs/heads/flume-1.6 0b7568229 -> fdb51b2af
FLUME-2487. SyslogParser has rounding errors in timestamp parsing (Santiago M. Mola via Roshan Naik) Project: http://git-wip-us.apache.org/repos/asf/flume/repo Commit: http://git-wip-us.apache.org/repos/asf/flume/commit/fdb51b2a Tree: http://git-wip-us.apache.org/repos/asf/flume/tree/fdb51b2a Diff: http://git-wip-us.apache.org/repos/asf/flume/diff/fdb51b2a Branch: refs/heads/flume-1.6 Commit: fdb51b2af879f9fb98ffe209068a95424f700e69 Parents: 0b75682 Author: Roshan Naik <[email protected]> Authored: Wed Nov 19 19:58:31 2014 -0800 Committer: Roshan Naik <[email protected]> Committed: Wed Nov 19 20:00:24 2014 -0800 ---------------------------------------------------------------------- .../main/java/org/apache/flume/source/SyslogParser.java | 11 ++++++++--- .../java/org/apache/flume/source/TestSyslogParser.java | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flume/blob/fdb51b2a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogParser.java ---------------------------------------------------------------------- diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogParser.java b/flume-ng-core/src/main/java/org/apache/flume/source/SyslogParser.java index 0171309..b61f745 100644 --- a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogParser.java +++ b/flume-ng-core/src/main/java/org/apache/flume/source/SyslogParser.java @@ -237,9 +237,14 @@ public class SyslogParser { } // if they had a valid fractional second, append it rounded to millis - if (endMillisPos - (curPos + 1) > 0) { - float frac = Float.parseFloat(msg.substring(curPos, endMillisPos)); - long milliseconds = (long) (frac * 1000f); + final int fractionalPositions = endMillisPos - (curPos + 1); + if (fractionalPositions > 0) { + long milliseconds = Long.parseLong(msg.substring(curPos + 1, endMillisPos)); + if (fractionalPositions > 3) { + milliseconds /= Math.pow(10, (fractionalPositions - 3)); + } else if (fractionalPositions < 3) { + milliseconds *= Math.pow(10, (3 - fractionalPositions)); + } ts += milliseconds; } else { throw new IllegalArgumentException( http://git-wip-us.apache.org/repos/asf/flume/blob/fdb51b2a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogParser.java ---------------------------------------------------------------------- diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogParser.java b/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogParser.java index 6e0fd66..265157e 100644 --- a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogParser.java +++ b/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogParser.java @@ -37,7 +37,8 @@ public class TestSyslogParser { final String[] examples = { "1985-04-12T23:20:50.52Z", "1985-04-12T19:20:50.52-04:00", "2003-10-11T22:14:15.003Z", "2003-08-24T05:14:15.000003-07:00", - "2012-04-13T11:11:11-08:00", "2012-04-13T08:08:08.0001+00:00" + "2012-04-13T11:11:11-08:00", "2012-04-13T08:08:08.0001+00:00", + "2012-04-13T08:08:08.251+00:00" }; SyslogParser parser = new SyslogParser();
