db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Myrna van Lunteren (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DERBY-5912) testIsValidImplemented fails for NetworkServer in some slow running machines/configurations
Date Thu, 06 Sep 2012 19:41:07 GMT

    [ 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

Mime
View raw message