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

Myrna van Lunteren commented on DERBY-5912:
-------------------------------------------

Kathey was right, when I tested this manually the connection  following the 
timeout indeed had become unavailable. I logged DERBY-5919 for this.

The location of the sleep in EXCSQLIMM was not right, because the isValid call 
is actually a prepared statement call, see NetConnection40:
         "...
                // Set the query timeout
                isValidStmt.setQueryTimeout(timeout);

                // Run the query against the database
                ResultSet rs = isValidStmt.executeQuery();
                rs.close();
         ...  "

After some discussion with Kathey, I first tried the sleep in 
CodePoint.PRPSQLSTT, but that wasn't correct either, because before the above 
code snippet, NetConnection40 has this:
      
         "....
                if (isValidStmt == null) {
                    isValidStmt = prepareStatement("VALUES (1)");
                } 
          ..."
 
Kathey said: So the prepareStatment() won't happen  the second time and so we 
won't go through PRPSQLSTT on the server.
The right location for the sleep is in CodePoint.OPNQRY.

I modified the current test with a test case that will not run unless one 
removes a 'x' in front of the fixture name, and added the sleep, but commented 
out, into DRDAConnThread.

I also noticed the comment saying that isValid was also tested in 
TestConnectionMethods.java.
That test has been converted to junit and renamed ConnectionMethodsTest, so I 
updated the comment.
I also modified ConnectionMethodsTest to have a longer timeout.

I will attach these changes as patch, then commit these changes shortly.
                
> testIsValidImplemented fails for NetworkServer in some slow running 
> machines/configurations
> -------------------------------------------------------------------------------------------
>
>                 Key: DERBY-5912
>                 URL: https://issues.apache.org/jira/browse/DERBY-5912
>             Project: Derby
>          Issue Type: Bug
>          Components: Test
>    Affects Versions: 10.8.2.3
>            Reporter: Kathey Marsden
>            Assignee: Myrna van Lunteren
>             Fix For: 10.8.2.3, 10.9.1.1, 10.10.0.0
>
>         Attachments: DERBY-5912.diff
>
>
> The following test has been seen to fail as below  in some runs where the 
> machine is under heavy load  and slow running options are specified and the 
> isValid() call takes more than a second to return.
> 1) 
> testIsValidImplemented(org.apache.derbyTesting.functionTests.tests.jdbc4.ConnectionTest)junit.framework.AssertionFailedError
>       at 
> org.apache.derbyTesting.functionTests.tests.jdbc4.ConnectionTest.testIsValidImplemented(ConnectionTest.java:168)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
>       at 
> org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:113)
>       at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
>       at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
>       at junit.extensions.TestSetup.run(TestSetup.java:23)
>       at 
> org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
>       at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
>       at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
>       at junit.extensions.TestSetup.run(TestSetup.java:23)
> The test does:
>    // Test with a 1 second timeout
>         assertTrue(getConnection().isValid(1));
> assuming it will return in one second.  For embedded the int parameter is not 
> implemented so indeed this always passes. For the Network implementation in 
> NetConnection40.java we actually do timeout and perform a query as part of 
> the implementation so might indeed return false. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to