[
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