You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flume.apache.org by "Santiago M. Mola (JIRA)" <ji...@apache.org> on 2014/11/11 16:03:34 UTC

[jira] [Commented] (FLUME-2487) Timestamp mismatch in TestMultiportSyslogTCPSource

    [ https://issues.apache.org/jira/browse/FLUME-2487?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14206507#comment-14206507 ] 

Santiago M. Mola commented on FLUME-2487:
-----------------------------------------

[~ashishpaliwal] Given the non-deterministic nature of the test (dependent of the time its run), chances are that you never get this error running the test. But the bug is clearly visible in the code: floating point numbers are not exact and they lead to rounding errors. This is a well-known fact. Just run this yourself:

  @Test
  public void testXXX() {
    for (long i = 100; i < 999; i++) {
      float frac = Float.parseFloat(String.format(".%d", i));
      float multiplied = (frac * 1000f);
      long milliseconds = (long) multiplied;
      if (i != milliseconds) {
        System.out.println("PRECISION ERROR: " + i + " | " + milliseconds + " | " + frac + " | " + multiplied);
      }
    }
  }

Output:
PRECISION ERROR: 251 | 250 | 0.251 | 250.99998
PRECISION ERROR: 253 | 252 | 0.253 | 252.99998
PRECISION ERROR: 502 | 501 | 0.502 | 501.99997
PRECISION ERROR: 506 | 505 | 0.506 | 505.99997
PRECISION ERROR: 511 | 510 | 0.511 | 510.99997


This code needs to use integer arithmetic or BigDecimal. My patch uses just integer arithmetic, but I can write one to use BigDecimal if that's preferred.

> Timestamp mismatch in TestMultiportSyslogTCPSource
> --------------------------------------------------
>
>                 Key: FLUME-2487
>                 URL: https://issues.apache.org/jira/browse/FLUME-2487
>             Project: Flume
>          Issue Type: Bug
>          Components: Sinks+Sources
>    Affects Versions: v1.5.0.1
>            Reporter: Santiago M. Mola
>            Assignee: Santiago M. Mola
>              Labels: test-fail
>             Fix For: v1.6.0
>
>         Attachments: FLUME-2487-0.patch
>
>
> https://travis-ci.org/Stratio/flume/jobs/36847695#L6180
> {noformat}
> testMultiplePorts(org.apache.flume.source.TestMultiportSyslogTCPSource) Time elapsed: 2465 sec <<< FAILURE!
> org.junit.ComparisonFailure: Timestamps must match expected:<141223934050[2]> but was:<141223934050[1]>
> at org.junit.Assert.assertEquals(Assert.java:125)
> at org.apache.flume.source.TestMultiportSyslogTCPSource.testMultiplePorts(TestMultiportSyslogTCPSource.java:156)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:606)
> at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
> at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
> at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
> at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
> at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
> at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
> at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:606)
> at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
> at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
> at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
> at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
> at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)