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();