Author: mikem Date: Tue May 3 17:16:44 2005 New Revision: 168025 URL: http://svn.apache.org/viewcvs?rev=168025&view=rev Log: enhancing online compress testing.
Added: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/OnlineCompressTest.out Modified: incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/D_DiagnosticUtil.java incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/FileContainer.java incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/BaseTest.java incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/OnlineCompressTest.java Modified: incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/D_DiagnosticUtil.java URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/D_DiagnosticUtil.java?rev=168025&r1=168024&r2=168025&view=diff ============================================================================== --- incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/D_DiagnosticUtil.java (original) +++ incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/D_DiagnosticUtil.java Tue May 3 17:16:44 2005 @@ -100,7 +100,6 @@ } /* Public Methods of This class: */ - /** * Given a Database name and conglomid print out diagnostic info. * <p> @@ -110,12 +109,19 @@ * configuration, will only print out a fixed length (default 128 bytes), * so having ij print the string can be a problem. * <p> - * RESOLVE - example does not work in version 10.x and later * * Can be called from ij to find out info about conglomid 19 in database * 'msgdb' by using the following syntax: * - values + maximumdisplaywidth 9000; + + CREATE FUNCTION D_CONGLOMID_PRINT(DBNAME VARCHAR(128), CONGLOMID INT) + RETURNS VARCHAR(32000) RETURNS NULL ON NULL INPUT + EXTERNAL NAME + 'org.apache.derby.impl.store.raw.data.D_DiagnosticUtil.diag_conglomid_print' + LANGUAGE JAVA PARAMETER STYLE JAVA; + + values D_CONGLOMID_PRINT('msgdb', 19); com.ibm.db2j.protocol.BasicServices.Diagnostic.T_Diagnosticable:: diag_conglomid_print('msgdb', 19); * @@ -154,6 +160,17 @@ * values * com.ibm.db2j.protocol.BasicServices.Diagnostic.T_Diagnosticable:: * diag_conglomid('msgdb', 19); + maximumdisplaywidth 9000; + + CREATE FUNCTION DIAG_CONGLOMID(DBNAME VARCHAR(128), CONGLOMID INT) + RETURNS VARCHAR(32000) RETURNS NULL ON NULL INPUT + EXTERNAL NAME + 'org.apache.derby.impl.store.raw.data.D_DiagnosticUtil.diag_conglomid' + LANGUAGE JAVA PARAMETER STYLE JAVA; + + values DIAG_CONGLOMID('msgdb', 19); + com.ibm.db2j.protocol.BasicServices.Diagnostic.T_Diagnosticable:: + diag_conglomid_print('msgdb', 19); * * RESOLVE - An interface that takes a table name would be nice. * @@ -198,7 +215,6 @@ return(ret_string); } - /** * Dump raw contents of a page. Modified: incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/FileContainer.java URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/FileContainer.java?rev=168025&r1=168024&r2=168025&view=diff ============================================================================== --- incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/FileContainer.java (original) +++ incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/FileContainer.java Tue May 3 17:16:44 2005 @@ -1399,12 +1399,8 @@ prev_alloc_page = null; } - System.out.println("calling flushAll()"); - // flush all changes to this file from cache. flushAll(); - - System.out.println("calling discard."); // make sure all truncated pages are removed from the cache, // as it will get confused in the future if we allocate the same Added: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/OnlineCompressTest.out URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/OnlineCompressTest.out?rev=168025&view=auto ============================================================================== --- incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/OnlineCompressTest.out (added) +++ incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/OnlineCompressTest.out Tue May 3 17:16:44 2005 @@ -0,0 +1,35 @@ +conn 2 from ij.startJBMS() = EmbedConnection +Beginning test: test1 +Executing test: begin 0 row test, create = true, drop = false. +Executing test: no delete case complete. +Executing test: delete all rows case succeeded. +Executing test: end 0 row test. +Executing test: begin 0 row test, create = false, drop = true. +Executing test: no delete case complete. +Executing test: delete all rows case succeeded. +Executing test: end 0 row test. +Executing test: begin 1 row test, create = true, drop = false. +Executing test: no delete case complete. +Executing test: delete all rows case succeeded. +Executing test: end 1 row test. +Executing test: begin 1 row test, create = false, drop = true. +Executing test: no delete case complete. +Executing test: delete all rows case succeeded. +Executing test: end 1 row test. +Executing test: begin 50 row test, create = true, drop = false. +Executing test: no delete case complete. +Executing test: delete all rows case succeeded. +Executing test: end 50 row test. +Executing test: begin 50 row test, create = false, drop = true. +Executing test: no delete case complete. +Executing test: delete all rows case succeeded. +Executing test: end 50 row test. +Executing test: begin 10000 row test, create = true, drop = false. +Executing test: no delete case complete. +Executing test: delete all rows case succeeded. +Executing test: end 10000 row test. +Executing test: begin 10000 row test, create = false, drop = true. +Executing test: no delete case complete. +Executing test: delete all rows case succeeded. +Executing test: end 10000 row test. +Ending test: test1 Modified: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/BaseTest.java URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/BaseTest.java?rev=168025&r1=168024&r2=168025&view=diff ============================================================================== --- incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/BaseTest.java (original) +++ incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/BaseTest.java Tue May 3 17:16:44 2005 @@ -26,12 +26,25 @@ import java.sql.Connection; import java.sql.Statement; +import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; + +/** +Common utility functions that can be shared across store .java tests. +<p> +If more than one store tests wants a function, put it here rather than copy +it. Hopefully going forward, with enough utility functions adding new store +tests will be easier. New store tests should extend this test to pick +up access to utility routines - see OnlineCompressTest.java as an example. + +**/ public abstract class BaseTest { + private static boolean debug_system_procedures_created = false; + abstract void testList(Connection conn) throws SQLException; void runTests(String[] argv) @@ -126,5 +139,77 @@ conn.commit(); return(consistent); + } + + /** + * Create a system procedures to access SANE debug table routines. + * <p> + **/ + protected void createDebugSystemProcedures( + Connection conn) + throws SQLException + { + Statement s = conn.createStatement(); + s.executeUpdate( + "CREATE FUNCTION D_CONGLOMID_PRINT(DBNAME VARCHAR(128), CONGLOMID INT) RETURNS VARCHAR(32000) RETURNS NULL ON NULL INPUT EXTERNAL NAME 'org.apache.derby.impl.store.raw.data.D_DiagnosticUtil.diag_conglomid' LANGUAGE JAVA PARAMETER STYLE JAVA"); + s.executeUpdate( + "CREATE FUNCTION DIAG_CONGLOMID(DBNAME VARCHAR(128), CONGLOMID INT) RETURNS VARCHAR(32000) RETURNS NULL ON NULL INPUT EXTERNAL NAME 'org.apache.derby.impl.store.raw.data.D_DiagnosticUtil.diag_conglomid' LANGUAGE JAVA PARAMETER STYLE JAVA"); + s.close(); + conn.commit(); + + debug_system_procedures_created = true; + } + + /** + * Return string with table information. + * <p> + * Dumps summary store information about the table, also dumps extra + * information about individual pages into the error log file. + **/ + String dump_table( + Connection conn, + String schemaName, + String tableName) + throws SQLException + { + if (!debug_system_procedures_created) + createDebugSystemProcedures(conn); + + // run the following query: + // + // select + // sys.systables.tablename, + // sys.sysconglomerates.conglomeratenumber, + // DIAG_CONGLOMID('wombat', conglomeratenumber) + // from sys.systables, sys.sysconglomerates + // where + // sys.systables.tableid = sys.sysconglomerates.tableid and + // sys.systables.schemaid = sys.sysconglomerates.schemaid and + // sys.systables.tablename = tableName; + // + // TODO - really should join with schemaName too. + + PreparedStatement ps = + conn.prepareStatement( + "select sys.systables.tablename, sys.sysconglomerates.conglomeratenumber, DIAG_CONGLOMID('wombat', conglomeratenumber) from sys.systables, sys.sysconglomerates where sys.systables.tableid = sys.sysconglomerates.tableid and sys.systables.schemaid = sys.sysconglomerates.schemaid and sys.systables.tablename = ?"); + ps.setString(1, tableName); + ResultSet rs = ps.executeQuery(); + + if (!rs.next()) + { + if (SanityManager.DEBUG) + { + SanityManager.THROWASSERT("no value from values clause."); + } + } + + String dump_table_info = rs.getString(3); + + rs.close(); + + conn.commit(); + + return(dump_table_info); + } } Modified: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/OnlineCompressTest.java URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/OnlineCompressTest.java?rev=168025&r1=168024&r2=168025&view=diff ============================================================================== --- incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/OnlineCompressTest.java (original) +++ incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/OnlineCompressTest.java Tue May 3 17:16:44 2005 @@ -36,7 +36,7 @@ public class OnlineCompressTest extends BaseTest { - boolean verbose = true; + boolean verbose = false; OnlineCompressTest() { @@ -191,6 +191,24 @@ + /** + * Create and load a table. + * <p> + * If create_table is set creates a test data table with indexes. + * Loads num_rows into the table. This table defaults to 32k page size. + * This schema fits 25 rows per page + * <p> + * + * @return The identifier to be used to open the conglomerate later. + * + * @param conn Connection to use for sql execution. + * @param create_table If true, create new table - otherwise load into + * existing table. + * @param tblname table to use. + * @param num_rows number of rows to add to the table. + * + * @exception StandardException Standard exception policy. + **/ private void createAndLoadTable( Connection conn, boolean create_table, @@ -373,7 +391,7 @@ * loop through testing interesting row count cases. The cases are * 0 rows - basic edge case, 2 page table: 1 alloc, 1 user page * 1 row - another edge case, 2 page table: 1 alloc, 1 user page - * TODO - 3 page table case: 1 alloc, 1 user page, 1 user page freed + * 50 rows - 3 page table case: 1 alloc, 1 user page, 1 user page freed * 10000 rows - reasonable number of pages to test out, still 1 alloc page * * These tests can be run relatively quickly, not a lot of rows needed.