reef-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From 이산하 <sanhaleeh...@gmail.com>
Subject Sharing Wake LocalAddressProvider issue
Date Mon, 05 Jun 2017 09:44:37 GMT
Hello reefers,

I'd like to share an issue related with Wake I've experienced, and seek
your opinion.
I'm working on a project that runs on REEF, and it occasionally spitted
some exception saying there is no available TCP port. Full message was like
below.

Caused by: java.lang.RuntimeException:
org.apache.reef.tang.exceptions.InjectionException: Could not invoke
constructor: new NettyMessagingTransport(String HostAddress =
##UNKNOWN##, Integer Port = 0, EStage RemoteClientStage =
org.apache.reef.wake.remote.impl.OrderedRemoteReceiverStage@47523643,
EStage RemoteServerStage =
org.apache.reef.wake.remote.impl.OrderedRemoteReceiverStage@47523643,
Integer NumberOfTries = 3, Integer RetryTimeout = 10000,
[ClassNodeImpl 'org.apache.reef.wake.remote.ports.TcpPortProvider']:
= RangeTcpPortProvider{portRangeBegin=10000, portRangeCount=10000,
portRangeTryCount=1000}, LocalAddressProvider = new
HostnameBasedLocalAddressProvider())
	at org.apache.reef.wake.remote.transport.netty.MessagingTransportFactory.newInstance(MessagingTransportFactory.java:135)
	at org.apache.reef.wake.remote.impl.DefaultRemoteManagerImplementation.<init>(DefaultRemoteManagerImplementation.java:89)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.apache.reef.tang.implementation.java.InjectorImpl.injectFromPlan(InjectorImpl.java:637)
	... 50 more
Caused by: org.apache.reef.tang.exceptions.InjectionException: Could
not invoke constructor: new NettyMessagingTransport(String HostAddress
= ##UNKNOWN##, Integer Port = 0, EStage RemoteClientStage =
org.apache.reef.wake.remote.impl.OrderedRemoteReceiverStage@47523643,
EStage RemoteServerStage =
org.apache.reef.wake.remote.impl.OrderedRemoteReceiverStage@47523643,
Integer NumberOfTries = 3, Integer RetryTimeout = 10000,
[ClassNodeImpl 'org.apache.reef.wake.remote.ports.TcpPortProvider']:
= RangeTcpPortProvider{portRangeBegin=10000, portRangeCount=10000,
portRangeTryCount=1000}, LocalAddressProvider = new
HostnameBasedLocalAddressProvider())
	at org.apache.reef.tang.implementation.java.InjectorImpl.injectFromPlan(InjectorImpl.java:654)
	at org.apache.reef.tang.implementation.java.InjectorImpl.getInstance(InjectorImpl.java:515)
	at org.apache.reef.tang.implementation.java.InjectorImpl.getInstance(InjectorImpl.java:533)
	at org.apache.reef.wake.remote.transport.netty.MessagingTransportFactory.newInstance(MessagingTransportFactory.java:133)
	... 56 more
Caused by: org.apache.reef.wake.remote.transport.exception.TransportRuntimeException:
tcpPortProvider failed to return free ports.
	at org.apache.reef.wake.remote.transport.netty.NettyMessagingTransport.<init>(NettyMessagingTransport.java:183)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.apache.reef.tang.implementation.java.InjectorImpl.injectFromPlan(InjectorImpl.java:637)
	... 59 more
Caused by: java.lang.IllegalStateException: tcpPortProvider cannot
find a free port.
	at org.apache.reef.wake.remote.transport.netty.NettyMessagingTransport.<init>(NettyMessagingTransport.java:167)
	... 64 more

This error was caused by NettyMessagingTransport when it failed to find
available TCP port in the local address provided by LocalAddressProvider.
Because of this, this error occurred selectively depending on the network
environment.

I've resolved it by changing LegacyLocalAddressProvider as the default
implementation of LocalAddressProvider, which sorts the available local
addresses and find minimum one.
It seems to have been deprecated because it is slow, but it worked for me.
For now, I added a custom Wake jar to my project for this.

So, isn't there anyone who has experienced this issue?
If is so, what do you think about changing the default implementation of
LocalAddressProvider?
I'm seeking your opinions.

Best regards,
Sanha Lee.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message