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

ASF subversion and git services commented on KUDU-3277:
-------------------------------------------------------

Commit 07a283ee1c990ec9639622cf621f2d36385941d5 in kudu's branch 
refs/heads/branch-1.15.x from Alexey Serbin
[ https://gitbox.apache.org/repos/asf?p=kudu.git;h=07a283e ]

KUDU-3277 fix concurrent session flush issue in Java client

This patch fixes the issue reported by KUDU-3277.  The bug manifested
itself in rare cases when a session running in the AUTO_FLUSH_BACKGROUND
mode was either being flushed explicitly or implicitly (i.e. upon
closing the session) while the AUTO_FLUSH_BACKGROUND session's logic was
flushing its data buffers concurrently as well.

This patch also adds a reproduction scenario for KUDU-3277.  The newly
introduced test scenario was reliably failing before the fix:

  * 'java.lang.AssertionError: This Deferred was already called'
    messages were encountered in the log multiple times with the stack
    exactly as described in KUDU-3277

  * some flusher threads were unable to join since KuduSession.flush()
    would hang (i.e. would not return)

Change-Id: If6aaccc06abf1a2673620ab7c649f51f91999ad9
Reviewed-on: http://gerrit.cloudera.org:8080/17486
Tested-by: Alexey Serbin <aser...@cloudera.com>
Reviewed-by: Grant Henke <granthe...@apache.org>
(cherry picked from commit d1969e2623e30bfd62f2463f15e0bf02422d1d84)
Reviewed-on: http://gerrit.cloudera.org:8080/17493
Reviewed-by: Bankim Bhavsar <ban...@cloudera.com>


> unexpected exception from downstream with kudu client 1.10 
> -----------------------------------------------------------
>
>                 Key: KUDU-3277
>                 URL: https://issues.apache.org/jira/browse/KUDU-3277
>             Project: Kudu
>          Issue Type: Bug
>          Components: client, java
>    Affects Versions: 1.10.0, 1.11.0, 1.12.0, 1.11.1, 1.13.0, 1.14.0
>         Environment: flink-connector-kudu
>            Reporter: wangkang
>            Assignee: Alexey Serbin
>            Priority: Major
>              Labels: client
>             Fix For: 1.15.0
>
>
> flink-connector-kudu:
> {code:java}
> 2021-04-20 00:19:02,451 ERROR org.apache.kudu.client.Connection - [peer 
> 26a2b2540158413ebf18206e5864a770(kudu-tserver:7050)] unexpected exception 
> from downstream on [id: 0x9309d12d, /.....:60166 => ....:7050] 
> java.lang.AssertionError: This Deferred was already called! New result=null, 
> this=Deferred@75271701(state=DONE, result=null, callback=<none>, 
> errback=<none>) at com.stumbleupon.async.Deferred.callback(Deferred.java:979) 
> at 
> org.apache.kudu.client.AsyncKuduSession$Buffer.callbackFlushNotification(AsyncKuduSession.java:858)
>  at 
> org.apache.kudu.client.AsyncKuduSession.queueBuffer(AsyncKuduSession.java:311)
>  at 
> org.apache.kudu.client.AsyncKuduSession.access$900(AsyncKuduSession.java:114) 
> at 
> org.apache.kudu.client.AsyncKuduSession$TabletLookupCB$1.call(AsyncKuduSession.java:406)
>  at 
> org.apache.kudu.client.AsyncKuduSession$TabletLookupCB$1.call(AsyncKuduSession.java:403)
>  at com.stumbleupon.async.Deferred.doCall(Deferred.java:1280) at 
> com.stumbleupon.async.Deferred.runCallbacks(Deferred.java:1259) at 
> com.stumbleupon.async.Deferred.callback(Deferred.java:1002) at 
> com.stumbleupon.async.DeferredGroup.done(DeferredGroup.java:173) at 
> com.stumbleupon.async.DeferredGroup.recordCompletion(DeferredGroup.java:142) 
> at com.stumbleupon.async.DeferredGroup.access$000(DeferredGroup.java:36) at 
> com.stumbleupon.async.DeferredGroup$1Notify.call(DeferredGroup.java:82) at 
> com.stumbleupon.async.Deferred.doCall(Deferred.java:1280) at 
> com.stumbleupon.async.Deferred.runCallbacks(Deferred.java:1259) at 
> com.stumbleupon.async.Deferred.callback(Deferred.java:1002) at 
> org.apache.kudu.client.KuduRpc.handleCallback(KuduRpc.java:275) at 
> org.apache.kudu.client.KuduRpc.callback(KuduRpc.java:322) at 
> org.apache.kudu.client.RpcProxy.responseReceived(RpcProxy.java:296) at 
> org.apache.kudu.client.RpcProxy.access$000(RpcProxy.java:59) at 
> org.apache.kudu.client.RpcProxy$1.call(RpcProxy.java:149) at 
> org.apache.kudu.client.RpcProxy$1.call(RpcProxy.java:145) at 
> org.apache.kudu.client.Connection.messageReceived(Connection.java:390) at 
> org.apache.kudu.shaded.org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
>  at org.apache.kudu.client.Connection.handleUpstream(Connection.java:238) at 
> org.apache.kudu.shaded.org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:70)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
>  at 
> org.apache.kudu.shaded.org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
>  at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>  at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>  at java.lang.Thread.run(Thread.java:748)
> {code}
> one of flink task manager node occur with above exception, it didn't cause 
> flink job fail,but cause whole job stopped writting to kudu server.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to