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)