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 rh...@apache.org on 2014/04/01 20:38:32 UTC

svn commit: r1583749 - in /db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest: NsTest.java init/DbSetup.java tester/TesterObject.java utils/DbUtil.java utils/SequenceReader.java

Author: rhillegas
Date: Tue Apr  1 18:38:32 2014
New Revision: 1583749

URL: http://svn.apache.org/r1583749
Log:
DERBY-6533: Add a sequence generator to NsTest along with start and end timestamps; commit derby-6533-02-aa-sequencesAndMoreStats.diff.

Added:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/utils/SequenceReader.java   (with props)
Modified:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/NsTest.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/init/DbSetup.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/tester/TesterObject.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/utils/DbUtil.java

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/NsTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/NsTest.java?rev=1583749&r1=1583748&r2=1583749&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/NsTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/NsTest.java Tue Apr  1 18:38:32 2014
@@ -29,6 +29,7 @@ import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.sql.Connection;
+import java.sql.Timestamp;
 
 import org.apache.derbyTesting.system.nstest.init.DbSetup;
 import org.apache.derbyTesting.system.nstest.init.Initializer;
@@ -38,6 +39,7 @@ import org.apache.derbyTesting.system.ns
 import org.apache.derbyTesting.system.nstest.tester.Tester2;
 import org.apache.derbyTesting.system.nstest.tester.Tester3;
 import org.apache.derbyTesting.system.nstest.utils.MemCheck;
+import org.apache.derbyTesting.system.nstest.utils.SequenceReader;
 
 /**
  * NsTest - the main class to start the tests The main test settings are as
@@ -63,6 +65,8 @@ public class NsTest extends Thread
     private static  final   String  OUTPUT_FILE = "derby.nstest.outputFile";
     private static  final   String  JUST_COUNT_ERRORS = "derby.nstest.justCountErrors";
     private static  final   String  QUIET = "derby.nstest.quiet";
+
+    private static  final   long    MILLIS_PER_MINUTE = 1000L * 60L;
     
     private static  final   String  USAGE =
         "Usage:\n" +
@@ -222,6 +226,9 @@ public class NsTest extends Thread
     private static  HashMap<String,NsTestError> _errors = new HashMap<String,NsTestError>();
 
     private static  boolean _statisticsAlreadyPrinted = false;
+    private static  long        _maxSequenceCounter;
+    private static  long        _startTimestamp;
+    private static  long        _endTimestamp;
 
 	public static int numActiveTestThreads() {
 		int activeThreadCount=0;
@@ -238,6 +245,11 @@ public class NsTest extends Thread
 		return activeThreadCount;
 	}
 
+    public  static  void    updateSequenceTracker( long newValue )
+    {
+        _maxSequenceCounter = newValue;
+    }
+
     public  static  boolean justCountErrors() { return _justCountErrors; }
 
 	public static synchronized void addError( Throwable t )
@@ -329,6 +341,8 @@ public class NsTest extends Thread
 	public static void main(String[] args) throws SQLException, IOException,
 	InterruptedException, Exception, Throwable
     {
+        _startTimestamp = System.currentTimeMillis();
+
 		String outputFile = System.getProperty( OUTPUT_FILE );
         statisticsLogger = System.out;
         if ( outputFile != null )
@@ -483,7 +497,7 @@ public class NsTest extends Thread
 		if (CREATE_DATABASE_ONLY) {
 			logger
 			.println("Finished creating the database, TEST THREADS WILL NOT RUN!!");
-			// Finally also stop the memory checker thread, else the test will
+			// Finally also stop the memory checker and sequence threads, else the test will
 			// remain hung!
 			mc.stopNow = true;
 			mc.join();
@@ -544,6 +558,12 @@ public class NsTest extends Thread
 
 		}
 
+		// check sequence value thread
+		// 60,000 msec = 1 minute delay between checks
+		logger.println("Starting sequence reader thread");
+		SequenceReader  sequenceReader = new SequenceReader( DriverManager.getConnection( jdbcUrl, prop ), 60000 );
+		sequenceReader.start();
+
 		// Wait for the test threads to finish and join back
 		for (int j = 0; j < maxTestThreads; j++)
         {
@@ -551,6 +571,10 @@ public class NsTest extends Thread
 			testThreads[j].join();
 		}
 
+        // stop the sequence reader thread
+		sequenceReader.stopNow = true;
+		sequenceReader.join();
+
 		// Print statistics
         printStatistics();
 
@@ -568,10 +592,16 @@ public class NsTest extends Thread
         if ( _statisticsAlreadyPrinted ) { return; }
         else { _statisticsAlreadyPrinted = true; }
 
+        _endTimestamp = System.currentTimeMillis();
+
 		statisticsLogger.println("");
 		statisticsLogger.println("STATISTICS OF OPERATIONS DONE");
 		statisticsLogger.println("-----------------------------");
-		statisticsLogger.println("");
+		statisticsLogger.println("\n\n");
+		statisticsLogger.println( "Start time = " + (new Timestamp( _startTimestamp )).toString() );
+		statisticsLogger.println( "End time = " + (new Timestamp( _endTimestamp )).toString() );
+		statisticsLogger.println( "Duration = " + ( (_endTimestamp - _startTimestamp) / MILLIS_PER_MINUTE ) + " minutes" );
+		statisticsLogger.println("\n\n");
 		statisticsLogger.println("SUCCESSFUL: ");
 		statisticsLogger.println("	Number of INSERTS = " + numInserts);
 		statisticsLogger.println("	Number of UPDATES = " + numUpdates);
@@ -591,6 +621,8 @@ public class NsTest extends Thread
 		.println("NOTE: Failing operations could be because of locking issue that are\n"
 				+ "directly related to the application logic.  They are not necessarily bugs.");
 
+        statisticsLogger.println( "\nMax sequence counter peeked at = " + _maxSequenceCounter + "\n" );
+        
         if ( _errors.size() > 0 )
         {
             countAndPrintSQLStates();

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/init/DbSetup.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/init/DbSetup.java?rev=1583749&r1=1583748&r2=1583749&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/init/DbSetup.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/init/DbSetup.java Tue Apr  1 18:38:32 2014
@@ -86,6 +86,7 @@ public class DbSetup {
 						+ "t_timestamp timestamp," + "t_varchar varchar(100),"
 						+ "t_clob clob(1K)," + "t_blob blob(10K),"
 						+ "serialkey bigint generated always as identity, "
+						+ "sequenceColumn bigint, "
 						+ "unique (serialkey)) ");
 
 				s.execute("create index t_char_ind on nstesttab ( t_char)");
@@ -112,6 +113,9 @@ public class DbSetup {
 				s
 				.execute("create index t_serialkey_ind on nstesttab (serialkey)");
 
+                NsTest.logger.println( "Creating nstesttab_seq sequence" );
+                s.execute( "create sequence nstesttab_seq as bigint start with 0" );
+
 				NsTest.logger
 				.println("creating table 'NSTRIGTAB' and corresponding indices");
 				s.execute("create table NSTRIGTAB (" + "id int,"
@@ -123,7 +127,8 @@ public class DbSetup {
 						+ "t_smallint smallint," + "t_time time,"
 						+ "t_timestamp timestamp," + "t_varchar varchar(100),"
 						+ "t_clob clob(1K)," + "t_blob blob(10K),"
-						+ "serialkey bigint )");
+						+ "serialkey bigint, "
+						+ "sequenceColumn bigint )");
 				// create trigger
 				s.execute("CREATE TRIGGER NSTEST_TRIG AFTER DELETE ON nstesttab "
 						+ "REFERENCING OLD AS OLDROW FOR EACH ROW MODE DB2SQL "
@@ -133,7 +138,8 @@ public class DbSetup {
 						+ "OLDROW.T_FLOAT, OLDROW.T_INT,OLDROW.T_LONGINT, OLDROW.T_numeric_large,"
 						+ "OLDROW.T_real,OLDROW.T_smallint,OLDROW.T_time,OLDROW.T_timestamp,OLDROW.T_varchar,"
 						+ "OLDROW.T_clob,OLDROW.T_blob, "
-						+ "OLDROW.serialkey)");
+						+ "OLDROW.serialkey, "
+						+ "OLDROW.sequenceColumn )");
 			} catch (Exception e) {
                 if ( NsTest.justCountErrors() ) { NsTest.printException( DbSetup.class.getName(), e ); }
 				else { e.printStackTrace( NsTest.logger ); }

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/tester/TesterObject.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/tester/TesterObject.java?rev=1583749&r1=1583748&r2=1583749&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/tester/TesterObject.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/tester/TesterObject.java Tue Apr  1 18:38:32 2014
@@ -216,7 +216,7 @@ public class TesterObject {
 					+ " t_date, t_decimal, t_decimal_nn, t_double, "
 					+ " t_float, t_int, t_longint, t_numeric_large,"
 					+ " t_real, t_smallint, t_time, t_timestamp,"
-					+ " t_varchar, serialkey from nstesttab where serialkey <= "
+					+ " t_varchar, serialkey, sequenceColumn from nstesttab where serialkey <= "
 					+ numRowsToSelect);
 		} catch (Exception e) {
 			NsTest.logger
@@ -282,6 +282,9 @@ public class TesterObject {
 		            // get value of column serialkey
 		            long lg2 = rSet.getLong(16);
 
+		            // get value of sequence column
+		            long lg3 = rSet.getLong(17);
+
 		            numRowsSelected++;
 		        }
 		        NsTest.addStats(NsTest.SELECT, 1);

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/utils/DbUtil.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/utils/DbUtil.java?rev=1583749&r1=1583748&r2=1583749&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/utils/DbUtil.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/utils/DbUtil.java Tue Apr  1 18:38:32 2014
@@ -96,8 +96,8 @@ public class DbUtil {
 					+ " t_date, t_decimal, t_decimal_nn, t_double, "
 					+ " t_float, t_int, t_longint, t_numeric_large,"
 					+ " t_real, t_smallint, t_time, t_timestamp,"
-					+ " t_varchar,t_clob,t_blob) values ("
-					+ " ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,cast('00000000000000000000000000000000031' as clob(1K)),cast(X'000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031' as blob(10K)))");
+					+ " t_varchar,t_clob,t_blob,sequenceColumn) values ("
+					+ " ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,cast('00000000000000000000000000000000031' as clob(1K)),cast(X'000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031' as blob(10K)), next value for nstesttab_seq)");
 			
 			Random rand = new Random();
 			
@@ -195,19 +195,26 @@ public class DbUtil {
 			try {
 				rowsAdded = ps.executeUpdate();
 			} catch (SQLException sqe) {
-				if (sqe.getSQLState().equalsIgnoreCase("40XL1")) {
-					NsTest.logger
-					.println("LOCK TIMEOUT obtained during insert - add_one_row() "
-							+ sqe.getSQLState());
-				}
-				else if (sqe.getSQLState().equalsIgnoreCase("23505")) {
-				    NsTest.logger
-				    .println("prevented duplicate row - add_one_row(): "
-				            + sqe.getSQLState() + "; " + sqe.getMessage());
+                if ( NsTest.justCountErrors() )
+                {
+                    NsTest.addError( sqe );
+                }
+                else
+                {
+                    if (sqe.getSQLState().equalsIgnoreCase("40XL1")) {
+                        NsTest.logger
+                            .println("LOCK TIMEOUT obtained during insert - add_one_row() "
+                                     + sqe.getSQLState());
+                    }
+                    else if (sqe.getSQLState().equalsIgnoreCase("23505")) {
+                        NsTest.logger
+                            .println("prevented duplicate row - add_one_row(): "
+                                     + sqe.getSQLState() + "; " + sqe.getMessage());
 
-				} else {
-					throw sqe;
-				}
+                    } else {
+                        throw sqe;
+                    }
+                }
 				
 			}
 			if (rowsAdded == 1) {

Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/utils/SequenceReader.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/utils/SequenceReader.java?rev=1583749&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/utils/SequenceReader.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/utils/SequenceReader.java Tue Apr  1 18:38:32 2014
@@ -0,0 +1,100 @@
+/*
+ 
+ Derby - Class org.apache.derbyTesting.system.nstest.utils.SequenceReader
+ 
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.system.nstest.utils;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.Date;
+
+import org.apache.derbyTesting.system.nstest.NsTest;
+
+/**
+ * SequenceReader - a background thread that checks the state of the sequence counter.
+ */
+public class SequenceReader extends Thread
+{
+    private Connection  conn;
+	private int delay = 60000;
+    
+
+	public boolean stopNow = false;
+
+	public SequenceReader( Connection connection, int num )
+    {
+        conn = connection;
+		delay = num;
+	}
+
+	/*
+	 * Implementation of run() method to check the sequence counter.
+	 * 
+	 */
+	public void run() {
+        NsTest.logger.println( "Starting the sequence reader thread with delay = " + delay );
+		while (stopNow == false)
+        {
+			try {
+				readSequenceValue();
+				sleep( delay );
+                
+				// first check if there are still active tester threads.
+				if (NsTest.numActiveTestThreads() != 0 && NsTest.numActiveTestThreads() > 1)
+				{
+					continue;
+				}
+				else
+				{
+					NsTest.logger.println("no more test threads, finishing SequenceReader thread also");
+                    readSequenceValue();
+					stopNow=true;
+				}
+			} catch (java.lang.InterruptedException ie) {
+				NsTest.logger.println("SequenceReader: unexpected error in sleep");
+			}
+		}
+	}
+
+	/*
+	 * Print the current memory status
+	 */
+	private void readSequenceValue()
+    {
+        try {
+            PreparedStatement   ps = conn.prepareStatement
+                ( "values syscs_util.syscs_peek_at_sequence( 'NSTEST', 'NSTESTTAB_SEQ' )" );
+            ResultSet       rs = ps.executeQuery();
+            rs.next();
+            long    nextSequenceValue = rs.getLong( 1 );
+            NsTest.logger.println( "Next sequence number = " + nextSequenceValue );
+            NsTest.updateSequenceTracker( nextSequenceValue );
+            rs.close();
+            ps.close();
+        }
+        catch (Exception e)
+        {
+            NsTest.printException( SequenceReader.class.getName(), e );
+        }
+	}
+
+}
+

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/utils/SequenceReader.java
------------------------------------------------------------------------------
    svn:eol-style = native