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

ASF GitHub Bot commented on KAFKA-3155:
---------------------------------------

GitHub user original-brownbear opened a pull request:

    https://github.com/apache/kafka/pull/2639

    KAFKA-3155: Avoid Long Overflow by Setting Linger to 1h instead of LONG_MAX

    This deals with https://issues.apache.org/jira/browse/KAFKA-3155
    
    This is a really trivial one :) The problem is that `Long.MaxValue` for the 
linger overflows in 
`org.apache.kafka.clients.producer.internals.RecordBatch#maybeExpire` when 
added the current timestamp like so:
    
    
![longoverflow](https://cloud.githubusercontent.com/assets/6490959/23581016/f1852054-010c-11e7-9a7f-574937b5060f.png)
    
    Then causing an error to be set for the batch by `Sender` like so (not 
happening every time since this depends on the timing of `Sender`):
    
    
![error](https://cloud.githubusercontent.com/assets/6490959/23581032/204725c2-010d-11e7-9553-0423e826e34c.png)
    
    That error then causes a call to 
`org.apache.kafka.clients.producer.internals.ProduceRequestResult#done` on the 
batch, as can be seen in the second screenshot's stacktrace ... which then 
makes the check for "not done" fail.
    
    Long story short ... trivial to fix by using 1h as linger instead of 
`Long.MaxValue` prevents the overflow and fixes the instability.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/original-brownbear/kafka KAFKA-3155

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/kafka/pull/2639.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #2639
    
----
commit ddd9e5e114827e90b96d71688f438dad24b467bc
Author: Armin Braun <m...@obrown.io>
Date:   2017-03-04T17:48:04Z

    KAFKA-3155: Avoid Long Overflow by Setting Linger to 1h instead of LONG_MAX

----


> Transient Failure in kafka.api.PlaintextProducerSendTest.testFlush
> ------------------------------------------------------------------
>
>                 Key: KAFKA-3155
>                 URL: https://issues.apache.org/jira/browse/KAFKA-3155
>             Project: Kafka
>          Issue Type: Sub-task
>            Reporter: Guozhang Wang
>            Assignee: Armin Braun
>              Labels: transient-unit-test-failure
>             Fix For: 0.11.0.0
>
>
> {code}
> Stacktrace
> java.lang.AssertionError: No request is complete.
>       at org.junit.Assert.fail(Assert.java:88)
>       at org.junit.Assert.assertTrue(Assert.java:41)
>       at 
> kafka.api.BaseProducerSendTest$$anonfun$testFlush$1.apply$mcVI$sp(BaseProducerSendTest.scala:275)
>       at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:141)
>       at 
> kafka.api.BaseProducerSendTest.testFlush(BaseProducerSendTest.scala:273)
>       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:50)
>       at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>       at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
>       at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
>       at 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
>       at 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
>       at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>       at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
>       at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
>       at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>       at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>       at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>       at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>       at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>       at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>       at 
> org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:105)
>       at 
> org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:56)
>       at 
> org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:64)
>       at 
> org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:50)
>       at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:606)
>       at 
> org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
>       at 
> org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
>       at 
> org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
>       at 
> org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
>       at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
>       at 
> org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:106)
>       at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:606)
>       at 
> org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
>       at 
> org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
>       at 
> org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:360)
>       at 
> org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
>       at 
> org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>       at java.lang.Thread.run(Thread.java:744)
> {code}
> One example: 
> https://builds.apache.org/job/kafka-trunk-git-pr-jdk7/2117/testReport/junit/kafka.api/PlaintextProducerSendTest/testFlush/



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to