Uploaded image for project: 'Giraph (Retired)'
  1. Giraph (Retired)
  2. GIRAPH-1137

Remove channel probing from Netty worker thread for credit-based flow-control

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • None
    • None

    Description

      In credit-based flow-control, sometimes, client threads (one type of Netty worker threads used in Giraph) try to send requests to other workers. This is bad practice for Netty and can cause Netty to mark the execution as deadlock-prone (an example exception shown below). Client threads should only be responsible for sending ACK/NACK messages in response to requests, and they should do so by reuseing the channel from which they received the request. In the current implementation, client threads may try to send unsent/cached requests in credit-based flow control. Sending such requests should be delegated to other threads.

      WARN 2017-03-08 06:06:22,104 [netty-client-worker-3] ....
      io.netty.util.concurrent.BlockingOperationException: DefaultChannelPromise@2c455378(incomplete)
      at io.netty.util.concurrent.DefaultPromise.checkDeadLock(DefaultPromise.java:383)
      at io.netty.channel.DefaultChannelPromise.checkDeadLock(DefaultChannelPromise.java:157)
      at io.netty.util.concurrent.DefaultPromise.await0(DefaultPromise.java:343)
      at io.netty.util.concurrent.DefaultPromise.await(DefaultPromise.java:259)
      at org.apache.giraph.utils.ProgressableUtils$ChannelFutureWaitable.waitFor(ProgressableUtils.java:461)
      at org.apache.giraph.utils.ProgressableUtils.waitFor(ProgressableUtils.java:214)
      at org.apache.giraph.utils.ProgressableUtils.waitForever(ProgressableUtils.java:180)
      at org.apache.giraph.utils.ProgressableUtils.waitForever(ProgressableUtils.java:165)
      at org.apache.giraph.utils.ProgressableUtils.awaitChannelFuture(ProgressableUtils.java:132)
      at org.apache.giraph.comm.netty.NettyClient.getNextChannel(NettyClient.java:715)
      at org.apache.giraph.comm.netty.NettyClient.writeRequestToChannel(NettyClient.java:799)
      at org.apache.giraph.comm.netty.NettyClient.doSend(NettyClient.java:789)
      at org.apache.giraph.comm.flow_control.CreditBasedFlowControl.trySendCachedRequests(CreditBasedFlowControl.java:515)
      at org.apache.giraph.comm.flow_control.CreditBasedFlowControl.messageAckReceived(CreditBasedFlowControl.java:485)
      at org.apache.giraph.comm.netty.NettyClient.messageReceived(NettyClient.java:840)
      at org.apache.giraph.comm.netty.handler.ResponseClientHandler.channelRead(ResponseClientHandler.java:87)
      at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338)
      at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324)
      at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:153)
      at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338)
      at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324)
      at org.apache.giraph.comm.netty.InboundByteCounter.channelRead(InboundByteCounter.java:89)
      at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338)
      at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324)
      at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785)
      at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:126)
      at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:485)
      at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:452)
      at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:346)
      at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101)
      at java.lang.Thread.run(Thread.java:745)

      Attachments

        Issue Links

          Activity

            People

              heslami Hassan Eslami
              heslami Hassan Eslami
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated: