[ 
https://issues.apache.org/jira/browse/DERBY-6112?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14134523#comment-14134523
 ] 

Myrna van Lunteren edited comment on DERBY-6112 at 9/15/14 9:32 PM:
--------------------------------------------------------------------

I tried the experiment Kathey suggested and added the line to the run() method 
in org.apache.derby.impl.drda.ClientThread:acceptClientWithRetry:
{code}
    private Socket acceptClientWithRetry() {
        return AccessController.doPrivileged(
                new PrivilegedAction<Socket>() {
                    public Socket run() {
                        for (int trycount = 1; trycount <= 3; trycount++) {
                            try {
=> +                         System.getProperty("derby.system.home");
                                // DERBY-5347 Need to exit if
                                // accept fails with IOException
                                // Cannot just aimlessly loop
                                // writing errors
                                return serverSocket.accept();
                            } catch (IOException acceptE) {
....
{code}
Then I ran the test with sane jars using ibm 1.7. 
The test did not hang, instead, I got a number of jvm core dumps and the test 
failed with  OutOfMemoryErrors like this:

1) 
testSSLBasicDSConnect(org.apache.derbyTesting.functionTests.tests.derbynet.SSLTest)java.lang.OutOfMemoryError:
 Java heap space
        at java.lang.StringCoding.decode(StringCoding.java:508)
        at java.lang.StringCoding.decode(StringCoding.java:578)
        at java.lang.String.<init>(String.java:181)
        at com.ibm.jvm.io.ConsolePrintStream.write(ConsolePrintStream.java:177)
        at java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:165)
        at 
org.apache.derbyTesting.junit.SpawnedProcess.printDiagnostics(SpawnedProcess.java:367)
        at 
org.apache.derbyTesting.junit.SpawnedProcess.complete(SpawnedProcess.java:329)
        at 
org.apache.derbyTesting.junit.NetworkServerTestSetup.setUp(NetworkServerTestSetup.java:219)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:20)
        at junit.extensions.TestSetup.run(TestSetup.java:25)
        at 
org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:58)
        at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
        at junit.extensions.TestSetup.run(TestSetup.java:25)
        at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
        at junit.extensions.TestSetup.run(TestSetup.java:25)
        at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
        at junit.extensions.TestSetup.run(TestSetup.java:25)
        at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
        at junit.extensions.TestSetup.run(TestSetup.java:25)




was (Author: myrna):
I tried the experiment Kathey suggested and added the line to the run() method 
in org.apache.derby.impl.drda.ClientThread:acceptClientWithRetry:

    private Socket acceptClientWithRetry() {
        return AccessController.doPrivileged(
                new PrivilegedAction<Socket>() {
                    public Socket run() {
                        for (int trycount = 1; trycount <= 3; trycount++) {
                            try {
=> +                         System.getProperty("derby.system.home");
                                // DERBY-5347 Need to exit if
                                // accept fails with IOException
                                // Cannot just aimlessly loop
                                // writing errors
                                return serverSocket.accept();
                            } catch (IOException acceptE) {
....

Then I ran the test with sane jars using ibm 1.7. 
The test did not hang, instead, I got a number of jvm core dumps and the test 
failed with  OutOfMemoryErrors like this:

1) 
testSSLBasicDSConnect(org.apache.derbyTesting.functionTests.tests.derbynet.SSLTest)java.lang.OutOfMemoryError:
 Java heap space
        at java.lang.StringCoding.decode(StringCoding.java:508)
        at java.lang.StringCoding.decode(StringCoding.java:578)
        at java.lang.String.<init>(String.java:181)
        at com.ibm.jvm.io.ConsolePrintStream.write(ConsolePrintStream.java:177)
        at java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:165)
        at 
org.apache.derbyTesting.junit.SpawnedProcess.printDiagnostics(SpawnedProcess.java:367)
        at 
org.apache.derbyTesting.junit.SpawnedProcess.complete(SpawnedProcess.java:329)
        at 
org.apache.derbyTesting.junit.NetworkServerTestSetup.setUp(NetworkServerTestSetup.java:219)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:20)
        at junit.extensions.TestSetup.run(TestSetup.java:25)
        at 
org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:58)
        at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
        at junit.extensions.TestSetup.run(TestSetup.java:25)
        at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
        at junit.extensions.TestSetup.run(TestSetup.java:25)
        at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
        at junit.extensions.TestSetup.run(TestSetup.java:25)
        at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
        at junit.extensions.TestSetup.run(TestSetup.java:25)



> SSL Test (and network server )  can hang if serverSocket.accept() fails for 
> something other than an IOException
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-6112
>                 URL: https://issues.apache.org/jira/browse/DERBY-6112
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Server, Test
>    Affects Versions: 10.8.3.0
>            Reporter: Kathey Marsden
>              Labels: derby_triage10_11
>
> In starting a server with SSL as in SSLTest if serverSocket.accept() fails 
> for some reason other than an IOException  it may just print the error to 
> console and hang.  In this case it was:
> java.security.AccessControlException: Access denied 
> (java.util.PropertyPermission
> I saw this when debugging a java  issue in serverSocket.accept() but I think 
> it could be simulated by adding an unwrapped System.getProperty() of some 
> sort before serverSocket.accept() to force a  permission error. e.g. 
>          System.getProperty("derby.system.home");
>          return serverSocket.accept();
>                             } catch (IOException acceptE) {
> I have not verified that would work.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to