There is no issue with setting GemFire-specific System Properties. Feel
free to use those. I'm talking about changing the values of System
Properties set by the JVM such as "user.dir" -- mutating or clearing these
values can cause weird bugs in the JDK or 3rd party libraries that are
harder to debug.

On Thu, Jul 20, 2017 at 7:33 PM, Galen O'Sullivan <gosulli...@pivotal.io>
wrote:

> I have had a lot of tests fail because mcast-port is nonzero. So now I set
> that system property in a lot of new tests. Maybe the tests that set it to
> something other than the default should be passing a Properties object to
> CacheFactory rather than messing with system properties.
>
> I think the Cache configuration step should happen before the Cache starts.
> This way we can start the Cache with a configuration object and keep *all*
> XML parsing, system property reading, and the like out of core code. This
> way we can get system properties out of our tests, and have more confidence
> in our ability to test clean and reliable configurations.
>
> Granted, I'm not messing with core configuration, so it looks like the
> problems you're seeing may be of a bit of a different class from the ones
> I'm seeing.
>
> On Thu, Jul 20, 2017 at 11:45 AM, Jared Stewart <jstew...@pivotal.io>
> wrote:
>
> > Indeed, this is frowned upon by the JDK authors: http://bugs.java.com/
> > bugdatabase/view_bug.do?bug_id=4045688 <http://bugs.java.com/
> > bugdatabase/view_bug.do?bug_id=4045688>
> >
> > In the long term, we need to change our code to no longer assume that
> > “user.dir” is the working directory of a given server/locator.  That
> > current assumption is what necessitates setting “user.dir” for certain
> > tests.
> >
> > In the interim, I added some time ago code (see MemberVM#stopMember) that
> > will automatically bounce any DUnit VM’s started by
> > LocatorServerStarterRule (the distributed version of MemberStarterRule)
> > that have swizzled “user.dir”.
> >
> > For non-dunit tests that change “user.dir”, I think the correct
> mitigation
> > is to include a RestoreSystemProperties rule.
> >
> > I completely agree that we should only dynamically change “user.dir” as
> an
> > option of last resort.
> >
> > - Jared
> >
> > > On Jul 20, 2017, at 11:33 AM, Kirk Lund <kl...@apache.org> wrote:
> > >
> > > We found the cause of DiskStoreMXBeanSecurityJUnitTest failing in CI:
> > > https://issues.apache.org/jira/browse/GEODE-3251.
> > >
> > > I think we should avoid setting or clearing any standard Java System
> > > properties during runtime (even in tests). These are the properties
> that
> > > JVM automatically sets:
> > > https://docs.oracle.com/javase/tutorial/essential/
> > environment/sysprop.html.
> > >
> > > The alternative to swizzling something like "user.dir" at runtime is to
> > > always fork a JVM for any test that needs "user.dir" to point somewhere
> > > special.
> > >
> > > Hope this helps someone else to avoid a similar bug!
> > >
> > > GEODE-3251 is caused by:
> > >
> > > 1) The MemberStarterRule is swizzling the user.dir System property.
> > Jinmei
> > > has a pending change to not change the user.dir. In general, we should
> > > avoid changing that System property at runtime and only fork JVMs for
> > tests
> > > that need processes to run in a specific user.dir.
> > >
> > > 2) FastClasspathScanner throws NoSuchFileException because
> > > System.getProperty("user.dir") returns null. It's null because
> > > MemberStarterRule set it to null.
> > >
> > > 3) The call stack for ManagementAdapter#handleCacheCreation(
> > InternalCache)
> > > catches the NoSuchFileException and swallows it without logging it..
> The
> > > ManagementAgent then closes itself in the finally block of
> > > #handleCacheCreation.
> > >
> > > 4) When MBeanServerConnectionRule tries to connect to JMX RMI, it fails
> > > because JMX RMI was closed in #3 above. This throws IOException "Failed
> > to
> > > retrieve RMIServer stub".
> > >
> > > Here's the Exception stack trace that the Management Agent code was
> > > swallowing:
> > >
> > > java.lang.RuntimeException: java.lang.RuntimeException:
> > > java.nio.file.NoSuchFileException:
> > > /var/folders/28/m__9dv1906n60kmz7t71wm680000gn/T/
> > junit7797861898628691451
> > > at
> > > io.github.lukehutch.fastclasspathscanner.FastClasspathScanner.scan(
> > FastClasspathScanner.java:1115)
> > > at
> > > io.github.lukehutch.fastclasspathscanner.FastClasspathScanner.scan(
> > FastClasspathScanner.java:1143)
> > > at
> > > io.github.lukehutch.fastclasspathscanner.FastClasspathScanner.scan(
> > FastClasspathScanner.java:1166)
> > > at
> > > org.apache.geode.management.internal.cli.util.ClasspathScanLoadHelper.
> > scanPackageForClassesImplementing(ClasspathScanLoadHelper.java:35)
> > > at
> > > org.apache.geode.management.internal.cli.CommandManager.
> > loadGeodeCommands(CommandManager.java:223)
> > > at
> > > org.apache.geode.management.internal.cli.CommandManager.
> > loadCommands(CommandManager.java:176)
> > > at
> > > org.apache.geode.management.internal.cli.CommandManager.<
> > init>(CommandManager.java:83)
> > > at
> > > org.apache.geode.management.internal.cli.remote.
> CommandProcessor.<init>(
> > CommandProcessor.java:61)
> > > at
> > > org.apache.geode.management.internal.cli.remote.
> > MemberCommandService.<init>(MemberCommandService.java:36)
> > > at
> > > org.apache.geode.management.cli.CommandService.
> > createLocalCommandService(CommandService.java:128)
> > > at
> > > org.apache.geode.management.internal.beans.MemberMBeanBridge.<init>(
> > MemberMBeanBridge.java:348)
> > > at
> > > org.apache.geode.management.internal.beans.ManagementAdapter.
> > handleCacheCreation(ManagementAdapter.java:142)
> > > at
> > > org.apache.geode.management.internal.beans.ManagementListener.
> > handleEvent(ManagementListener.java:106)
> > > at
> > > org.apache.geode.distributed.internal.InternalDistributedSystem.
> > notifyResourceEventListeners(InternalDistributedSystem.java:2198)
> > > at
> > > org.apache.geode.distributed.internal.InternalDistributedSystem.
> > handleResourceEvent(InternalDistributedSystem.java:585)
> > > at
> > > org.apache.geode.internal.cache.GemFireCacheImpl.
> > initialize(GemFireCacheImpl.java:1198)
> > > at
> > > org.apache.geode.internal.cache.GemFireCacheImpl.
> > basicCreate(GemFireCacheImpl.java:763)
> > > at
> > > org.apache.geode.internal.cache.GemFireCacheImpl.create(
> > GemFireCacheImpl.java:750)
> > > at org.apache.geode.cache.CacheFactory.create(CacheFactory.java:175)
> > > at org.apache.geode.cache.CacheFactory.create(CacheFactory.java:222)
> > > at
> > > org.apache.geode.test.dunit.rules.ServerStarterRule.
> > startServer(ServerStarterRule.java:175)
> > > at
> > > org.apache.geode.test.dunit.rules.ServerStarterRule.
> > before(ServerStarterRule.java:91)
> > > at org.junit.rules.ExternalResource$1.evaluate(
> ExternalResource.java:46)
> > > at org.junit.rules.RunRules.evaluate(RunRules.java:20)
> > > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
> > > at
> > > org.junit.runners.BlockJUnit4ClassRunner.runChild(
> > BlockJUnit4ClassRunner.java:78)
> > > at
> > > org.junit.runners.BlockJUnit4ClassRunner.runChild(
> > BlockJUnit4ClassRunner.java:57)
> > > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
> > > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
> > > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
> > > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
> > > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
> > > at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
> > > at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
> > > at
> > > com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(
> > JUnit4IdeaTestRunner.java:68)
> > > at
> > > com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.
> > startRunnerWithArgs(IdeaTestRunner.java:51)
> > > at
> > > com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(
> > JUnitStarter.java:242)
> > > at com.intellij.rt.execution.junit.JUnitStarter.main(
> > JUnitStarter.java:70)
> > > Caused by: java.lang.RuntimeException: java.nio.file.
> > NoSuchFileException:
> > > /var/folders/28/m__9dv1906n60kmz7t71wm680000gn/T/
> > junit7797861898628691451
> > > at
> > > io.github.lukehutch.fastclasspathscanner.scanner.
> > Scanner.call(Scanner.java:217)
> > > at
> > > io.github.lukehutch.fastclasspathscanner.scanner.
> > Scanner.call(Scanner.java:61)
> > > at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> > > at
> > > java.util.concurrent.ThreadPoolExecutor.runWorker(
> > ThreadPoolExecutor.java:1142)
> > > at
> > > java.util.concurrent.ThreadPoolExecutor$Worker.run(
> > ThreadPoolExecutor.java:617)
> > > at java.lang.Thread.run(Thread.java:745)
> > > Caused by: java.nio.file.NoSuchFileException:
> > > /var/folders/28/m__9dv1906n60kmz7t71wm680000gn/T/
> > junit7797861898628691451
> > > at sun.nio.fs.UnixException.translateToIOException(
> > UnixException.java:86)
> > > at sun.nio.fs.UnixException.rethrowAsIOException(
> UnixException.java:102)
> > > at sun.nio.fs.UnixException.rethrowAsIOException(
> UnixException.java:107)
> > > at sun.nio.fs.UnixPath.toRealPath(UnixPath.java:876)
> > > at
> > > io.github.lukehutch.fastclasspathscanner.scanner.
> > Scanner.call(Scanner.java:215)
> > > ... 5 more
> > > java.io.IOException: Failed to retrieve RMIServer stub:
> > > javax.naming.ServiceUnavailableException [Root exception is
> > > java.rmi.ConnectException: Connection refused to host: 10.118.33.235;
> > > nested exception is:
> > > java.net.ConnectException: Connection refused]
> > > at javax.management.remote.rmi.RMIConnector.connect(
> > RMIConnector.java:369)
> > > at
> > > javax.management.remote.JMXConnectorFactory.connect(
> > JMXConnectorFactory.java:270)
> > > at
> > > org.apache.geode.test.dunit.rules.MBeanServerConnectionRule.
> > lambda$connect$0(MBeanServerConnectionRule.java:166)
> > > at
> > > org.awaitility.core.CallableCondition$ConditionEvaluationWrapper.
> > eval(CallableCondition.java:100)
> > > at
> > > org.awaitility.core.ConditionAwaiter$ConditionPoller.run(
> > ConditionAwaiter.java:215)
> > > at java.util.concurrent.Executors$RunnableAdapter.
> > call(Executors.java:511)
> > > at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> > > at
> > > java.util.concurrent.ThreadPoolExecutor.runWorker(
> > ThreadPoolExecutor.java:1142)
> > > at
> > > java.util.concurrent.ThreadPoolExecutor$Worker.run(
> > ThreadPoolExecutor.java:617)
> > > at java.lang.Thread.run(Thread.java:745)
> > > Caused by: javax.naming.ServiceUnavailableException [Root exception is
> > > java.rmi.ConnectException: Connection refused to host: 10.118.33.235;
> > > nested exception is:
> > > java.net.ConnectException: Connection refused]
> > > at
> > > com.sun.jndi.rmi.registry.RegistryContext.lookup(
> > RegistryContext.java:122)
> > > at
> > > com.sun.jndi.toolkit.url.GenericURLContext.lookup(
> > GenericURLContext.java:205)
> > > at javax.naming.InitialContext.lookup(InitialContext.java:417)
> > > at
> > > javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(
> > RMIConnector.java:1957)
> > > at
> > > javax.management.remote.rmi.RMIConnector.findRMIServer(
> > RMIConnector.java:1924)
> > > at javax.management.remote.rmi.RMIConnector.connect(
> > RMIConnector.java:287)
> > > ... 9 more
> > > Caused by: java.rmi.ConnectException: Connection refused to host:
> > > 10.118.33.235; nested exception is:
> > > java.net.ConnectException: Connection refused
> > > at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
> > > at sun.rmi.transport.tcp.TCPChannel.createConnection(
> > TCPChannel.java:216)
> > > at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
> > > at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
> > > at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
> > > at
> > > com.sun.jndi.rmi.registry.RegistryContext.lookup(
> > RegistryContext.java:118)
> > > ... 14 more
> > > Caused by: java.net.ConnectException: Connection refused
> > > at java.net.PlainSocketImpl.socketConnect(Native Method)
> > > at
> > > java.net.AbstractPlainSocketImpl.doConnect(
> AbstractPlainSocketImpl.java:
> > 350)
> > > at
> > > java.net.AbstractPlainSocketImpl.connectToAddress(
> > AbstractPlainSocketImpl.java:206)
> > > at
> > > java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:
> > 188)
> > > at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
> > > at java.net.Socket.connect(Socket.java:589)
> > > at java.net.Socket.connect(Socket.java:538)
> > > at java.net.Socket.<init>(Socket.java:434)
> > > at java.net.Socket.<init>(Socket.java:211)
> > > at
> > > sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(
> > RMIDirectSocketFactory.java:40)
> > > at
> > > sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(
> > RMIMasterSocketFactory.java:148)
> > > at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
> > > ... 19 more
> >
> >
>

Reply via email to