[
https://issues.apache.org/jira/browse/HDFS-11533?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mukul Kumar Singh updated HDFS-11533:
-------------------------------------
Attachment: HDFS-11533.001.patch
Tested this patch manually by killing the nfs gateway using "kill -9" and
starting nfs gateway after that. Repeated this multiple time to verify the
correctness of the patch.
> reuseAddress option should be used for child channels in Portmap and
> SimpleTcpServer
> ------------------------------------------------------------------------------------
>
> Key: HDFS-11533
> URL: https://issues.apache.org/jira/browse/HDFS-11533
> Project: Hadoop HDFS
> Issue Type: Bug
> Components: nfs
> Reporter: Mukul Kumar Singh
> Assignee: Mukul Kumar Singh
> Attachments: HDFS-11533.001.patch
>
>
> Bind can fail in SimpleTcpServer because reuseAddress option is not used for
> child channels. Binding to the port for child channels can fail because this
> option is currently only set for parent channel.
> This options is not needed in SimpleUdpServer, Portmap(udpServer)
> as they use ConnectionlessBootstrap, where the child option is not needed
> https://docs.jboss.org/netty/3.2/api/org/jboss/netty/bootstrap/ConnectionlessBootstrap.html
> However Portmap(tcpServer) and SimpleTcpServer
> uses ServerBootstrap, where the child option is needed
> https://docs.jboss.org/netty/3.2/api/org/jboss/netty/bootstrap/ServerBootstrap.html
> {code:java}
> Failed to start the TCP server.\norg.jboss.netty.channel.ChannelException:
> Failed to bind to: 0.0.0.0/0.0.0.0:4242\n\tat
> org.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:272)\n\tat
> org.apache.hadoop.oncrpc.SimpleTcpServer.run(SimpleTcpServer.java:87)\n\tat
> org.apache.hadoop.mount.MountdBase.startTCPServer(MountdBase.java:83)\n\tat
> org.apache.hadoop.mount.MountdBase.start(MountdBase.java:98)\n\tat
> org.apache.hadoop.hdfs.nfs.nfs3.Nfs3.startServiceInternal(Nfs3.java:56)\n\tat
> org.apache.hadoop.hdfs.nfs.nfs3.Nfs3.startService(Nfs3.java:69)\n\tat
> org.apache.hadoop.hdfs.nfs.nfs3.PrivilegedNfsGatewayStarter.start(PrivilegedNfsGatewayStarter.java:71)\n\tat
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat
> java.lang.reflect.Method.invoke(Method.java:498)\n\tat
> org.apache.commons.daemon.support.DaemonLoader.start(DaemonLoader.java:243)\nCaused
> by: java.net.BindException: Address already in use\n\tat
> sun.nio.ch.Net.bind0(Native Method)\n\tat
> sun.nio.ch.Net.bind(Net.java:433)\n\tat
> sun.nio.ch.Net.bind(Net.java:425)\n\tat
> sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)\n\tat
> sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)\n\tat
> org.jboss.netty.channel.socket.nio.NioServerBoss$RegisterTask.run(NioServerBoss.java:193)\n\tat
>
> org.jboss.netty.channel.socket.nio.AbstractNioSelector.processTaskQueue(AbstractNioSelector.java:366)\n\tat
>
> org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:290)\n\tat
>
> org.jboss.netty.channel.socket.nio.NioServerBoss.run(NioServerBoss.java:42)\n\tat
>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n\tat
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n\tat
> java.lang.Thread.run(Thread.java:745)\n
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]