Brian Rowe created GEODE-5467:
---------------------------------

             Summary: MemberStaterRule.withJMXManager selects port before 
binding
                 Key: GEODE-5467
                 URL: https://issues.apache.org/jira/browse/GEODE-5467
             Project: Geode
          Issue Type: Bug
            Reporter: Brian Rowe


Integration test #143 on develop fails with:

{{org.apache.geode.management.internal.cli.commands.ConnectCommandWithSecurityTest
 > classMethod FAILED
 org.apache.geode.management.ManagementException: 
java.rmi.server.ExportException: Port already in use: 21592; nested exception 
is: 
 java.net.BindException: Failed to create server socket on null[21,592]

Caused by:
 java.rmi.server.ExportException: Port already in use: 21592; nested exception 
is: 
 java.net.BindException: Failed to create server socket on null[21,592]

Caused by:
 java.net.BindException: Failed to create server socket on null[21,592]

Caused by:
 java.net.BindException: Address already in use (Bind failed)}}

 

Digging into this a bit, I found that the test is trying to start up the jmx 
manager using a port which was randomly chosen via 
AvailablePortHelper.getRandomAvailableTCPPort() during setup.  Unfortunately 
there was at least one other call to getRandomAvailableTCPPort after this 
(prior to where we're trying to bind the socket for the jmx manager), which 
creates the possibility that we'll have multiple services trying to bind the 
same port.

The port is selected in the MemberStaterRule.withJMXManager call, which happens 
prior to the crash seen above, which has the following stack:

{{

org.apache.geode.management.ManagementException: 
java.rmi.server.ExportException: Port already in use: 21592; nested exception 
is: java.net.BindException: Failed to create server socket on null[21,592] at 
org.apache.geode.management.internal.ManagementAgent.startAgent(ManagementAgent.java:161)
 at 
org.apache.geode.management.internal.SystemManagementService.startManager(SystemManagementService.java:435)
 at 
org.apache.geode.management.internal.beans.ManagementAdapter.handleCacheCreation(ManagementAdapter.java:173)
 at 
org.apache.geode.management.internal.beans.ManagementListener.handleEvent(ManagementListener.java:118)
 at 
org.apache.geode.distributed.internal.InternalDistributedSystem.notifyResourceEventListeners(InternalDistributedSystem.java:2201)
 at 
org.apache.geode.distributed.internal.InternalDistributedSystem.handleResourceEvent(InternalDistributedSystem.java:590)
 at 
org.apache.geode.internal.cache.GemFireCacheImpl.initialize(GemFireCacheImpl.java:1217)
 at 
org.apache.geode.internal.cache.GemFireCacheImpl.basicCreate(GemFireCacheImpl.java:792)
 at 
org.apache.geode.internal.cache.GemFireCacheImpl.create(GemFireCacheImpl.java:778)
 at org.apache.geode.cache.CacheFactory.create(CacheFactory.java:177) at 
org.apache.geode.cache.CacheFactory.create(CacheFactory.java:224) at 
org.apache.geode.distributed.internal.InternalLocator.startCache(InternalLocator.java:662)
 at 
org.apache.geode.distributed.internal.InternalLocator.startDistributedSystem(InternalLocator.java:649)
 at 
org.apache.geode.distributed.internal.InternalLocator.startLocator(InternalLocator.java:311)
 at org.apache.geode.distributed.Locator.startLocator(Locator.java:253) at 
org.apache.geode.distributed.Locator.startLocatorAndDS(Locator.java:140) at 
org.apache.geode.test.junit.rules.LocatorStarterRule.startLocator(LocatorStarterRule.java:80)
 at 
org.apache.geode.test.junit.rules.LocatorStarterRule.before(LocatorStarterRule.java:59)
 at 
org.apache.geode.test.junit.rules.serializable.SerializableExternalResource.access$000(SerializableExternalResource.java:24)
 at 
org.apache.geode.test.junit.rules.serializable.SerializableExternalResource$1.evaluate(SerializableExternalResource.java:35)
 at org.junit.rules.RunRules.evaluate(RunRules.java:20) at 
org.junit.runners.ParentRunner.run(ParentRunner.java:363) at 
org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:106)
 at 
org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
 at 
org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
 at 
org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:66)
 at 
org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498) at 
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
 at 
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
 at 
org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
 at 
org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
 at com.sun.proxy.$Proxy1.processTestClass(Unknown Source) at 
org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498) at 
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
 at 
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
 at 
org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
 at 
org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
 at 
org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
 at 
org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
 at 
org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
 at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
at 
org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
 at java.lang.Thread.run(Thread.java:748) Caused by: 
java.rmi.server.ExportException: Port already in use: 21592; nested exception 
is: java.net.BindException: Failed to create server socket on null[21,592] at 
sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:346) at 
sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:254) at 
sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:411) at 
sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147) at 
sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:236) at 
sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:213) at 
sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:173) at 
sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:144) at 
java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:239) at 
org.apache.geode.management.internal.ManagementAgent.configureAndStart(ManagementAgent.java:452)
 at 
org.apache.geode.management.internal.ManagementAgent.startAgent(ManagementAgent.java:159)
 ... 51 more Caused by: java.net.BindException: Failed to create server socket 
on null[21,592] at 
org.apache.geode.internal.net.SocketCreator.createServerSocket(SocketCreator.java:752)
 at 
org.apache.geode.internal.net.SocketCreator.createServerSocket(SocketCreator.java:709)
 at 
org.apache.geode.management.internal.ManagementAgent$GemFireRMIServerSocketFactory.createServerSocket(ManagementAgent.java:611)
 at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:666) at 
sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:335) ... 61 more 
Caused by: java.net.BindException: Address already in use (Bind failed) at 
java.net.PlainSocketImpl.socketBind(Native Method) at 
java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387) at 
java.net.ServerSocket.bind(ServerSocket.java:375) at 
org.apache.geode.internal.net.SocketCreator.createServerSocket(SocketCreator.java:748)
 ... 65 more}}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to