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 ba...@apache.org on 2005/06/04 20:03:28 UTC

svn commit: r180009 - in /incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests: master/ConcurrentImplicitCreateSchema.out tests/lang/ConcurrentImplicitCreateSchema.java

Author: bandaram
Date: Sat Jun  4 11:03:27 2005
New Revision: 180009

URL: http://svn.apache.org/viewcvs?rev=180009&view=rev
Log:
Derby-230: Submit missed test files in the previous checkin for this bug. (179834)

Submitted by Oystein Grovlen.(Oystein.Grovlen@Sun.COM)

Added:
    incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ConcurrentImplicitCreateSchema.out   (with props)
    incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConcurrentImplicitCreateSchema.java   (with props)

Added: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ConcurrentImplicitCreateSchema.out
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ConcurrentImplicitCreateSchema.out?rev=180009&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ConcurrentImplicitCreateSchema.out (added)
+++ incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ConcurrentImplicitCreateSchema.out Sat Jun  4 11:03:27 2005
@@ -0,0 +1,3 @@
+Test ConcurrentImplicitCreateSchema starting
+Closed connection
+Test ConcurrentImplicitCreateSchema PASSED

Propchange: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ConcurrentImplicitCreateSchema.out
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConcurrentImplicitCreateSchema.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConcurrentImplicitCreateSchema.java?rev=180009&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConcurrentImplicitCreateSchema.java (added)
+++ incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConcurrentImplicitCreateSchema.java Sat Jun  4 11:03:27 2005
@@ -0,0 +1,193 @@
+/*
+
+   Derby - Class org.apache.derbyTesting.functionTests.tests.lang. ConcurrentImplicitCreateSchema.java
+
+   Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+ */
+
+package org.apache.derbyTesting.functionTests.tests.lang;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.apache.derby.tools.ij;
+
+/**
+ * Test for several threads creating tables in the same originally
+ * non-existing schema.  This will cause an implicit creation of the
+ * schema.  The test was created for the fix of JIRA issue DERBY-230
+ * where an error occurred if two threads try to create the schema in
+ * parallel.
+ * 
+ * @author oystein.grovlen@sun.com
+ */
+
+public class ConcurrentImplicitCreateSchema
+{
+    
+    /**
+     * Runnable that will create and drop table.
+     */
+    class CreateTable implements Runnable 
+    {
+        /** Id of the thread running this instance */
+        private int myId;
+        /** Which schema to use */
+        private int schemaId;
+        /** Database connection for this thread */
+        private Connection conn = null;
+        /** Test object. Used to inform about failures. */
+        private ConcurrentImplicitCreateSchema test;
+
+        CreateTable(int id, int schemaId, 
+                    ConcurrentImplicitCreateSchema test) 
+            throws SQLException, IllegalAccessException, 
+                   ClassNotFoundException, InstantiationException
+        {
+            this.myId = id;
+            this.schemaId = schemaId;
+            this.test = test; 
+
+            // Open a connection for this thread
+            conn = ij.startJBMS();
+            conn.setAutoCommit(false);
+        }
+     
+        public void run()        
+        {
+            try {
+                Statement s = conn.createStatement();
+                s.execute("create table testschema" + schemaId + ".testtab" 
+                          + myId + "(num int, addr varchar(40))");
+                s.execute("drop table testschema" + schemaId + ".testtab" 
+                          + myId);
+            } catch (SQLException e) {
+                test.failed(e);
+            } 
+  
+            // We should close the transaction regardless of outcome 
+            // Otherwise, other threads may wait on transactional 
+            // locks until this transaction times out.
+            try {
+                conn.commit();
+                conn.close();
+            } catch (SQLException e) {
+                test.failed(e);
+            }
+            //            System.out.println("Thread " + myId + " completed.");
+        }
+    }
+    
+    /** 
+     * Outcome of test.  
+     * Will be set to false if any failure is detected.
+     */
+    boolean passed = true;
+
+    public static void main(String[] args)
+    {
+        new ConcurrentImplicitCreateSchema().go(args);
+    }
+
+    void go(String[] args)
+    {
+        System.out.println("Test ConcurrentImplicitCreateSchema starting");
+
+        try {
+            // Load the JDBC Driver class
+            // use the ij utility to read the property file and
+            // make the initial connection.
+            ij.getPropertyArg(args);
+            Connection conn = ij.startJBMS();
+
+            conn.setAutoCommit(true);
+
+            // Drop the schemas we will be using in case they exist.
+            // This will ensure that they are implicitly created by this test
+            Statement s = conn.createStatement();
+
+            // Number of schemas to use.  An equal number of threads
+            // will operate on each schema.
+            final int NSCHEMAS = 1;
+
+            for (int i=0; i < NSCHEMAS; ++i) {
+                try {
+                    s.execute("drop schema testschema" + i + " restrict");
+                } catch (SQLException e) {
+                    if (e.getSQLState().equals("42Y07")) {
+                        // IGNORE. Schema did not exist. That is our target.
+                    } else {
+                        throw e;
+                    }
+                }
+            }
+
+            // Number of threads to run.  
+            final int NTHREADS = 100;  
+
+            // Create threads
+            Thread[] threads = new Thread[NTHREADS];
+            for (int i=0; i<NTHREADS; ++i) {
+                threads[i] 
+                    = new Thread(new CreateTable(i, i%NSCHEMAS, this));
+            }
+            
+            // Start threads
+            for (int i=0; i<NTHREADS; ++i) {
+                threads[i].start();           
+            }         
+            
+            // Wait for threads to complete
+            for (int i=0; i<NTHREADS; ++i) {
+                threads[i].join();           
+            }
+  
+            conn.close();
+            System.out.println("Closed connection");
+        } catch (Throwable e) {
+            System.out.println("exception thrown:");
+            failed(e);
+        }
+
+        System.out.print("Test ConcurrentImplicitCreateSchema ");
+        if (passed) {
+            System.out.println("PASSED");
+        } else {
+            System.out.println("FAILED");
+	}
+    }
+
+    void failed(Throwable e) 
+    {
+        if (e instanceof SQLException) {
+            printSQLError((SQLException) e);
+        } else {
+            e.printStackTrace();
+        }
+        passed = false;
+    }
+
+    void printSQLError(SQLException e)
+    {
+        while (e != null)
+        {
+            System.out.println(e.toString());
+            e.printStackTrace();
+            e = e.getNextException();
+        }
+    }
+}

Propchange: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConcurrentImplicitCreateSchema.java
------------------------------------------------------------------------------
    svn:eol-style = native