1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
/*
Derby - Class org.apache.derbyTesting.system.nstest.tester.Tester3
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.tester;
import java.sql.Connection;
import org.apache.derbyTesting.system.nstest.NsTest;
/**
* Tester3 - Threads that opens/closes the connection to the database after each query
*/
public class Tester3 extends TesterObject {
//*******************************************************************************
//
// Constructor. Get's the name of the thread running this for use in messages
//
//*******************************************************************************
public Tester3(String name) {
super(name);
}
//*********************************************************************************
//
// This starts the acutal test operations. Overrides the startTesting() of parent.
// Tester3 profile -
// Query only kind of client that deals with a large result
// set based on a select query that returns a large number of
// rows (stress condition). Connection is closed after each
// query. The query will need to run in a DIRTY_READ mode, i.e.
// READ UNCOMMITTED isolation level. We work over the untouched
// portion of rows in the table (i.e. serialkey 1 to NUM_UNTOUCHED_ROWS)
//
//*********************************************************************************
public void startTesting() {
//The following loop will be done nstest.MAX_ITERATIONS times after which we exit the thread
// Note that a different connection is used for each operation. The purpose of this client is
// to work on a large set of data as defined by the parameter NUM_HIGH_STRESS_ROWS
// This thread could be made to pause (sleep) for a bit between each iteration.
for (int i = 0; i < NsTest.MAX_ITERATIONS; i++) {
//Get the connection. It will be closed at the end of the loop
connex = getConnection();
if (connex == null) {
NsTest.logger.println("FAIL: " + getThread_id()
+ " could not get the database connection");
return; //quit
}
// set isolation level to Connection.TRANSACTION_READ_UNCOMMITTED to reduce number of
// deadlocks/lock issues
setIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED);
//Now select nstest.NUM_HIGH_STRESS_ROWS number of rows
try {
int numSelected = doSelectOperation(NsTest.NUM_HIGH_STRESS_ROWS);
NsTest.logger.println(getThread_id()+" Tester3: Rows selected "+numSelected);
} catch (Exception e) {
NsTest.logger.println("doSelect in thread " + getThread_id()
+ " threw ");
printException("doSelectOperation() in Tester3 of "+getThread_id(), e);
}
//close the connection
closeConnection();
//Thread.sleep(10 * 60000); //10 minutes
}//end of for (int i=0;...)
NsTest.logger.println("Thread " + getThread_id() + " is now terminating");
}//end of startTesting()
}
|