You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "nabarun (JIRA)" <ji...@apache.org> on 2018/10/03 21:38:41 UTC

[jira] [Closed] (GEODE-5467) MemberStaterRule.withJMXManager selects port before binding

     [ https://issues.apache.org/jira/browse/GEODE-5467?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

nabarun closed GEODE-5467.
--------------------------

> 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
>            Assignee: Brian Rowe
>            Priority: Major
>              Labels: pull-request-available, swat
>             Fix For: 1.7.0
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> 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)