You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flume.apache.org by ro...@apache.org on 2014/11/20 05:07:10 UTC
flume git commit: FLUME-2487. SyslogParser has rounding errors in
timestamp parsing
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 <ro...@hortonworks.com>
Authored: Wed Nov 19 19:58:31 2014 -0800
Committer: Roshan Naik <ro...@hortonworks.com>
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();