You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by km...@apache.org on 2010/08/21 02:33:44 UTC

svn commit: r987678 - in /db/derby/code/branches/10.6: ./ java/client/org/apache/derby/client/net/ java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/ java/testing/org/apache/derbyTesting/functionTests/tests/lang/

Author: kmarsden
Date: Sat Aug 21 00:33:44 2010
New Revision: 987678

URL: http://svn.apache.org/viewvc?rev=987678&view=rev
Log:
DERBY-2026  Setting a login timeout in client driver can lead to query timeout


Modified:
    db/derby/code/branches/10.6/   (props changed)
    db/derby/code/branches/10.6/java/client/org/apache/derby/client/net/NetConnection.java
    db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/J2EEDataSourceTest.java
    db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConnectTest.java

Propchange: db/derby/code/branches/10.6/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Aug 21 00:33:44 2010
@@ -1,2 +1,2 @@
-/db/derby/code/trunk:938547,938796,938959,939231,940462,940469,941627,942031,942286,942476,942480,942587,944152,946794,948045,948069,951346,951366,952138,952237,952581,954344,954421,954544,954748,955001,955540,955634,956075,956234,956445,956569,956659,957260,958163,958522,958555,958618,958939,959550,962716,963206,963705,964115,965647,967304,980684
+/db/derby/code/trunk:938547,938796,938959,939231,940462,940469,941627,942031,942286,942476,942480,942587,944152,946794,948045,948069,951346,951366,952138,952237,952581,954344,954421,954544,954748,955001,955540,955634,956075,956234,956445,956569,956659,957260,958163,958522,958555,958618,958939,959550,962716,963206,963705,964115,965647,967304,980684,986689,986834
 /db/derby/docs/trunk:954344

Modified: db/derby/code/branches/10.6/java/client/org/apache/derby/client/net/NetConnection.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.6/java/client/org/apache/derby/client/net/NetConnection.java?rev=987678&r1=987677&r2=987678&view=diff
==============================================================================
--- db/derby/code/branches/10.6/java/client/org/apache/derby/client/net/NetConnection.java (original)
+++ db/derby/code/branches/10.6/java/client/org/apache/derby/client/net/NetConnection.java Sat Aug 21 00:33:44 2010
@@ -218,6 +218,8 @@ public class NetConnection extends org.a
         flowConnect(password, securityMechanism_);
         if(!isConnectionNull())
         	completeConnect();
+        //DERBY-2026. reset timeout after connection is made
+        netAgent_.setTimeout(0);
     }
 
     // For JDBC 2 Connections
@@ -304,14 +306,19 @@ public class NetConnection extends org.a
         // (which the InternalDriver assumes means there's a subsubprotocol)  
         // and it's not a subsubprotocol recognized by our drivers.
         // If so, bail out here.
-        if(!isConnectionNull())
+        if(!isConnectionNull()) {
             completeConnect();
+        }
         else
         {
             agent_.accumulateChainBreakingReadExceptionAndThrow(new DisconnectException(agent_,
                     new ClientMessageId(SQLState.PROPERTY_INVALID_VALUE),
                     Attribute.DBNAME_ATTR,databaseName_));
         }
+        // DERBY-2026
+        //reset timeout if previously set for login timeout
+        netAgent_.setTimeout(0);
+        
     }
 
     // preferably without password in the method signature.
@@ -339,6 +346,9 @@ public class NetConnection extends org.a
         boolean isDeferredReset = flowReconnect(getDeferredResetPassword(),
                                                 securityMechanism_);
         completeReset(isDeferredReset);
+        //DERBY-2026. Make sure soTimeout is set back to
+        // infinite after connection is made.
+        netAgent_.setTimeout(0);
     }
 
 

Modified: db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/J2EEDataSourceTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/J2EEDataSourceTest.java?rev=987678&r1=987677&r2=987678&view=diff
==============================================================================
--- db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/J2EEDataSourceTest.java (original)
+++ db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/J2EEDataSourceTest.java Sat Aug 21 00:33:44 2010
@@ -55,6 +55,7 @@ import org.apache.derby.jdbc.ClientConne
 import org.apache.derby.jdbc.ClientXADataSource;
 import org.apache.derby.jdbc.EmbeddedSimpleDataSource;
 import org.apache.derbyTesting.functionTests.util.SecurityCheck;
+import org.apache.derbyTesting.functionTests.util.TestRoutines;
 import org.apache.derbyTesting.junit.BaseJDBCTestCase;
 import org.apache.derbyTesting.junit.CleanDatabaseTestSetup;
 import org.apache.derbyTesting.junit.DatabasePropertyTestSetup;
@@ -170,6 +171,7 @@ public class J2EEDataSourceTest extends 
         suite.addTest(new J2EEDataSourceTest("testClientDSConnectionAttributes"));
         suite.addTest(new J2EEDataSourceTest(
                 "testClientTraceFileDSConnectionAttribute"));
+        suite.addTest(new J2EEDataSourceTest("testDerby2026LoginTimeout"));
         //DISABLED until DERBY-4067 is fixed.
         //suite.addTest(new J2EEDataSourceTest(
         //        "testClientMessageTextConnectionAttribute"));
@@ -229,6 +231,7 @@ public class J2EEDataSourceTest extends 
                  * @see org.apache.derbyTesting.junit.CleanDatabaseTestSetup#decorateSQL(java.sql.Statement)
                  */
                 protected void decorateSQL(Statement s) throws SQLException {
+                    TestRoutines.installRoutines(getConnection());
                     s.executeUpdate("create table autocommitxastart(i int)");
                     s.executeUpdate("insert into autocommitxastart values 1,2,3,4,5");
                     s.executeUpdate("create schema SCHEMA_Patricio");
@@ -2059,6 +2062,75 @@ public class J2EEDataSourceTest extends 
         pc.close();
     }
 
+
+    /**
+     * DERBY-2026 - Make sure login timeout does not impact 
+     * queries.
+     */
+    public void testDerby2026LoginTimeout() throws SQLException {
+        DataSource jds = null;
+        try {
+            jds = JDBCDataSource.getDataSource();
+            jds.setLoginTimeout(10);
+            Connection conn = jds.getConnection();
+            CallableStatement cs = conn.prepareCall("CALL TESTROUTINE.SLEEP(20000)");
+            cs.execute();
+            //rollback to make sure our connection is ok.
+            conn.rollback();
+        } finally {
+            if (jds != null)
+                jds.setLoginTimeout(0);
+        }
+
+        ConnectionPoolDataSource cpds = null;
+        try {
+            cpds = J2EEDataSource.getConnectionPoolDataSource();        
+            cpds.setLoginTimeout(10);
+            PooledConnection pc = cpds.getPooledConnection();
+            Connection conn = pc.getConnection();
+            CallableStatement cs = conn.prepareCall("CALL TESTROUTINE.SLEEP(20000)");
+            cs.execute();
+            //rollback to make sure our connection is ok.
+            conn.rollback();
+
+            // Close the logical connection and get a new one.
+            // This will invoke reset which also needs its timeout reset
+            conn.close();
+            conn = pc.getConnection();
+            cs = conn.prepareCall("CALL TESTROUTINE.SLEEP(20000)");
+            cs.execute();
+            //rollback to make sure our connection is ok.
+            conn.rollback();
+        } finally {
+            if (cpds != null)
+                cpds.setLoginTimeout(0);
+        }
+
+        XADataSource xads = null;
+        try {
+            xads = J2EEDataSource.getXADataSource();        
+            xads.setLoginTimeout(10);
+            XAConnection xac = xads.getXAConnection();
+            Connection conn = xac.getConnection();
+            CallableStatement cs = conn.prepareCall("CALL TESTROUTINE.SLEEP(20000)");
+            cs.execute();
+            //rollback to make sure our connection is ok.
+            conn.rollback();
+
+            // Close the logical connection and get a new one.
+            // This will invoke reset which also needs its timeout reset
+            conn.close();
+            conn = xac.getConnection();
+            cs = conn.prepareCall("CALL TESTROUTINE.SLEEP(20000)");
+            cs.execute();
+            //rollback to make sure our connection is ok.
+            conn.rollback();
+        } finally {
+            if (xads != null)
+                xads.setLoginTimeout(0);
+        }
+    }
+
     // test that an xastart in auto commit mode commits the existing work.
     // test fix of a bug ('beetle 5178') wherein XAresource.start() when 
     // auto-commit is true did not implictly commit any transaction

Modified: db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConnectTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConnectTest.java?rev=987678&r1=987677&r2=987678&view=diff
==============================================================================
--- db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConnectTest.java (original)
+++ db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConnectTest.java Sat Aug 21 00:33:44 2010
@@ -21,6 +21,7 @@
 */
 package org.apache.derbyTesting.functionTests.tests.lang;
 
+import java.sql.CallableStatement;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
@@ -29,7 +30,9 @@ import java.sql.Statement;
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
+import org.apache.derbyTesting.functionTests.util.TestRoutines;
 import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.CleanDatabaseTestSetup;
 import org.apache.derbyTesting.junit.JDBC;
 import org.apache.derbyTesting.junit.TestConfiguration;
 
@@ -48,8 +51,15 @@ public class ConnectTest extends BaseJDB
             // is not supported with JSR169
             return 
             new TestSuite("empty ConnectTest:DriverManager not supported");
-        else
-            return TestConfiguration.defaultSuite(ConnectTest.class);
+        else  {
+                TestSuite suite = new TestSuite("ConnectTest suite");  
+                suite.addTest(TestConfiguration.defaultSuite(ConnectTest.class));
+                // Derby2026 test uses explicit client connection so not relevant to embedded
+                suite.addTest(TestConfiguration.
+                            clientServerDecorator(new ConnectTest("clientTestDerby2026LoginTimeout")));
+                return new CleanDatabaseTestSetup(suite);
+        }
+                  
     }
 
     /**
@@ -137,4 +147,32 @@ public class ConnectTest extends BaseJDB
         st.close();
         con.close();
     }
-}
+
+    /**
+     * DERBY-2026 make sure loginTimeout does not
+     * affect queries
+     * @throws SQLException
+     */
+    public void clientTestDerby2026LoginTimeout() throws SQLException  {
+        String url = "jdbc:derby://" + TestConfiguration.getCurrent().getHostName() +":" +
+        TestConfiguration.getCurrent().getPort() + "/" + TestConfiguration.getCurrent().getDefaultDatabaseName();
+        try {
+            DriverManager.setLoginTimeout(10);
+            //System.out.println(url);
+            try {
+                Class.forName("org.apache.derby.jdbc.ClientDriver");
+            } catch (ClassNotFoundException e) {
+                fail(e.getMessage());
+            }
+            Connection conn = DriverManager.getConnection(url);
+            TestRoutines.installRoutines(conn);
+            CallableStatement cs = conn.prepareCall("CALL TESTROUTINE.SLEEP(20000)");
+            cs.execute();
+            //rollback to make sure our connection is ok.
+            conn.rollback();
+        } finally {
+            DriverManager.setLoginTimeout(0);
+        }
+    }   
+    
+}
\ No newline at end of file