From: Date: August 12 2008 6:39am Subject: bzr commit into mysql-6.0-bugteam branch (davi:2755) Bug#36990 List-Archive: http://lists.mysql.com/commits/51372 X-Bug: 36990 Message-Id: <20080812043913.AF9FDEC42E@skynet.ctb.virtua.com.br> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit # At a local mysql-6.0-bugteam repository of davi 2755 Davi Arnaut 2008-08-12 [merge] Merge mysql-6.0 into mysql-6.0-bugteam added: mysql-test/suite/falcon/r/falcon_bug_35939.result mysql-test/suite/falcon/r/falcon_bug_38039.result mysql-test/suite/falcon/t/falcon_bug_35939.test mysql-test/suite/falcon/t/falcon_bug_38039.test renamed: mysql-test/suite/falcon_team/r/falcon_bug_23962.result => mysql-test/suite/falcon/r/falcon_bug_23962.result mysql-test/suite/falcon_team/r/falcon_bug_27997.result => mysql-test/suite/falcon/r/falcon_bug_27997.result mysql-test/suite/falcon_team/r/falcon_bug_37080.result => mysql-test/suite/falcon/r/falcon_bug_37080.result mysql-test/suite/falcon_team/t/falcon_bug_23962.test => mysql-test/suite/falcon/t/falcon_bug_23962.test mysql-test/suite/falcon_team/t/falcon_bug_27997.test => mysql-test/suite/falcon/t/falcon_bug_27997.test mysql-test/suite/falcon_team/t/falcon_bug_37080.test => mysql-test/suite/falcon/t/falcon_bug_37080.test modified: mysql-test/mysql-test-run.pl mysql-test/suite/falcon/r/falcon_bug_22161.result mysql-test/suite/falcon/r/falcon_bug_31295.result mysql-test/suite/falcon/r/falcon_bug_33404.result mysql-test/suite/falcon/r/falcon_options.result mysql-test/suite/falcon/r/falcon_options2.result mysql-test/suite/falcon/t/falcon_bug_22161.test mysql-test/suite/falcon/t/falcon_bug_31295.test mysql-test/suite/falcon/t/falcon_bug_33404.test mysql-test/suite/falcon/t/falcon_options2.test mysql-test/suite/funcs_1/r/is_columns_is_falcon.result mysql-test/suite/funcs_1/r/is_tables_is_falcon.result mysql-test/t/information_schema-master.opt mysql-test/t/information_schema_db-master.opt mysql-test/t/mysqlshow-master.opt mysql-test/t/variables-master.opt sql/probes.h storage/falcon/BDB.cpp storage/falcon/BDB.h storage/falcon/BackLog.cpp storage/falcon/Cache.cpp storage/falcon/CollationManager.cpp storage/falcon/CompiledStatement.cpp storage/falcon/Configuration.cpp storage/falcon/Configuration.h storage/falcon/Connection.cpp storage/falcon/Database.cpp storage/falcon/DatabaseClone.cpp storage/falcon/DatabaseCopy.cpp storage/falcon/Dbb.cpp storage/falcon/Dbb.h storage/falcon/DeferredIndex.cpp storage/falcon/DeferredIndex.h storage/falcon/Gopher.cpp storage/falcon/IO.cpp storage/falcon/IOx.h storage/falcon/Index.cpp storage/falcon/IndexWalker.cpp storage/falcon/IndexWalker.h storage/falcon/Inversion.cpp storage/falcon/LicenseManager.cpp storage/falcon/Makefile.am storage/falcon/MemMgr.cpp storage/falcon/RecordLeaf.cpp storage/falcon/RecordVersion.cpp storage/falcon/RecoveryObjects.cpp storage/falcon/RecoveryObjects.h storage/falcon/Repository.cpp storage/falcon/RepositoryManager.cpp storage/falcon/RepositoryVolume.cpp storage/falcon/ResultSet.cpp storage/falcon/Role.cpp storage/falcon/SQLParse.cpp storage/falcon/SRLCreateTableSpace.cpp storage/falcon/SRLCreateTableSpace.h storage/falcon/SRLDeleteIndex.cpp storage/falcon/SRLPrepare.cpp storage/falcon/SRLRollback.cpp storage/falcon/SRLUpdateIndex.cpp storage/falcon/Scheduler.cpp storage/falcon/SectorBuffer.cpp storage/falcon/SectorCache.cpp storage/falcon/SequenceManager.cpp storage/falcon/SerialLog.cpp storage/falcon/SerialLog.h storage/falcon/SerialLogFile.cpp storage/falcon/Server.cpp storage/falcon/SessionManager.cpp storage/falcon/Statement.cpp storage/falcon/StorageDatabase.cpp storage/falcon/StorageDatabase.h storage/falcon/StorageHandler.cpp storage/falcon/StorageHandler.h storage/falcon/StorageTableShare.cpp storage/falcon/SymbolManager.cpp storage/falcon/Sync.cpp storage/falcon/Sync.h storage/falcon/SyncObject.cpp storage/falcon/SyncObject.h storage/falcon/SyncTest.cpp storage/falcon/Table.cpp storage/falcon/TableSpace.cpp storage/falcon/TableSpace.h storage/falcon/TableSpaceManager.cpp storage/falcon/TableSpaceManager.h storage/falcon/Thread.cpp storage/falcon/Threads.cpp storage/falcon/Transaction.cpp storage/falcon/Transaction.h storage/falcon/TransactionManager.cpp storage/falcon/WalkDeferred.cpp storage/falcon/WalkDeferred.h storage/falcon/WalkIndex.cpp storage/falcon/ha_falcon.cpp storage/falcon/ha_falcon.h mysql-test/suite/falcon/r/falcon_bug_23962.result mysql-test/suite/falcon/r/falcon_bug_37080.result mysql-test/suite/falcon/t/falcon_bug_23962.test mysql-test/suite/falcon/t/falcon_bug_37080.test === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2008-07-24 14:33:10 +0000 +++ b/mysql-test/mysql-test-run.pl 2008-08-07 14:19:54 +0000 @@ -1474,13 +1474,15 @@ sub executable_setup_ndb () { $exe_ndbd= mtr_exe_maybe_exists("$ndb_path/src/kernel/ndbd", - "$ndb_path/ndbd"); + "$ndb_path/ndbd", + "$glob_basedir/libexec/ndbd"); $exe_ndb_mgm= mtr_exe_maybe_exists("$ndb_path/src/mgmclient/ndb_mgm", "$ndb_path/ndb_mgm"); $exe_ndb_mgmd= mtr_exe_maybe_exists("$ndb_path/src/mgmsrv/ndb_mgmd", - "$ndb_path/ndb_mgmd"); + "$ndb_path/ndb_mgmd", + "$glob_basedir/libexec/ndb_mgmd"); $exe_ndb_waiter= mtr_exe_maybe_exists("$ndb_path/tools/ndb_waiter", "$ndb_path/ndb_waiter"); @@ -4703,11 +4705,15 @@ sub run_mysqltest ($) { # ---------------------------------------------------------------------- # If embedded server, we create server args to give mysqltest to pass on + # and remove existing falcon tables # ---------------------------------------------------------------------- - + if ( $glob_use_embedded_server ) { mysqld_arguments($args,$master->[0],$tinfo->{'master_opt'},[]); + #Remove falcon tables before each test, otherwise every start might fail + #if there is an error in falcon recovery + rm_falcon_tables($master->[0]->{'path_myddir'}); } # ---------------------------------------------------------------------- === modified file 'mysql-test/suite/falcon/r/falcon_bug_22161.result' --- a/mysql-test/suite/falcon/r/falcon_bug_22161.result 2008-07-14 05:32:03 +0000 +++ b/mysql-test/suite/falcon/r/falcon_bug_22161.result 2008-07-31 10:37:43 +0000 @@ -9,10 +9,6 @@ CREATE INDEX i1 ON t1 (a); ERROR 42000: BLOB column 'a' can't be used in key specification with the used table type ALTER TABLE t1 MODIFY COLUMN a varchar(30000); CREATE INDEX i1 ON t1 (a); -Warnings: -Warning 1071 Specified key was too long; max key length is 1100 bytes -Warning 1071 Specified key was too long; max key length is 1100 bytes -Warning 1071 Specified key was too long; max key length is 1100 bytes SELECT count(*) FROM t1; count(*) 1 === renamed file 'mysql-test/suite/falcon_team/r/falcon_bug_23962.result' => 'mysql-test/suite/falcon/r/falcon_bug_23962.result' --- a/mysql-test/suite/falcon_team/r/falcon_bug_23962.result 2008-04-20 00:05:17 +0000 +++ b/mysql-test/suite/falcon/r/falcon_bug_23962.result 2008-07-16 16:00:34 +0000 @@ -1,5 +1,5 @@ -SET STORAGE_ENGINE = Falcon; *** Bug #23962 *** +SET @@storage_engine = 'Falcon'; DROP TABLE IF EXISTS t1; CREATE TABLE t1 (a char(5), KEY (a)); INSERT INTO t1 VALUES ('a'), ('aa'), ('aaa'), ('abc'), ('bbb'); @@ -14,4 +14,7 @@ a aaa abc bbb +SELECT count(*) FROM t1; +count(*) +5 DROP TABLE t1; === renamed file 'mysql-test/suite/falcon_team/r/falcon_bug_27997.result' => 'mysql-test/suite/falcon/r/falcon_bug_27997.result' === modified file 'mysql-test/suite/falcon/r/falcon_bug_31295.result' --- a/mysql-test/suite/falcon/r/falcon_bug_31295.result 2008-04-15 17:29:36 +0000 +++ b/mysql-test/suite/falcon/r/falcon_bug_31295.result 2008-07-29 10:45:39 +0000 @@ -1,22 +1,28 @@ *** Bug #31295 *** -SET @@storage_engine = 'Falcon'; +SET @@storage_engine = Falcon; DROP TABLE IF EXISTS t1; -DROP TABLESPACE ts1 ENGINE 'Falcon'; -CREATE TABLESPACE ts1 ADD DATAFILE 'ts1.fts' ENGINE 'Falcon'; +DROP TABLESPACE ts1 ENGINE Falcon; +CREATE TABLESPACE ts1 ADD DATAFILE 'ts1.fts' ENGINE Falcon; CREATE TABLE t1(a int); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE TABLE_NAME='t1'; -SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME -TEST T1 FALCON_USER T1 -ALTER TABLE t1 TABLESPACE ts1 ENGINE 'Falcon'; -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE TABLE_NAME='t1'; -SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME -TEST T1 ts1 T1 -ALTER TABLE t1 ENGINE 'Falcon'; -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE TABLE_NAME='t1'; -SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME -TEST T1 ts1 T1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +ALTER TABLE t1 TABLESPACE ts1 ENGINE Falcon; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) /*!50100 TABLESPACE `ts1` */ ENGINE=ENGINE DEFAULT CHARSET=latin1 +ALTER TABLE t1 ENGINE Falcon; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) /*!50100 TABLESPACE `ts1` */ ENGINE=ENGINE DEFAULT CHARSET=latin1 SELECT count(*) FROM t1; count(*) 0 DROP TABLE t1; -DROP TABLESPACE ts1 ENGINE 'Falcon'; +DROP TABLESPACE ts1 ENGINE Falcon; === modified file 'mysql-test/suite/falcon/r/falcon_bug_33404.result' --- a/mysql-test/suite/falcon/r/falcon_bug_33404.result 2008-04-23 06:54:13 +0000 +++ b/mysql-test/suite/falcon/r/falcon_bug_33404.result 2008-07-29 10:45:39 +0000 @@ -12,23 +12,17 @@ SUBPARTITION p2s1, SUBPARTITION p2s2 ) ); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE -TABLE_NAME = 't1' AND SCHEMA_NAME='test'; -SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME -TEST T1 P1S1 ts3 T1#P#P1#SP#P1S1 -TEST T1 P1S2 ts2 T1#P#P1#SP#P1S2 -TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1 -TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2 SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL ) /*!50100 TABLESPACE `ts1` */ ENGINE=Falcon DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (a) SUBPARTITION BY HASH (a) (PARTITION p1 VALUES LESS THAN (100) (SUBPARTITION p1s1 TABLESPACE = ts3 ENGINE = Falcon, SUBPARTITION p1s2 TABLESPACE = ts2 ENGINE = Falcon), PARTITION p2 VALUES LESS THAN MAXVALUE (SUBPARTITION p2s1 TABLESPACE = ts1 ENGINE = Falcon, SUBPARTITION p2s2 TABLESPACE = ts1 ENGINE = Falcon)) */ ALTER TABLE t1 REMOVE PARTITIONING; -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE -TABLE_NAME = 't1' AND SCHEMA_NAME='test'; -SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME -TEST T1 ts1 T1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) /*!50100 TABLESPACE `ts1` */ ENGINE=Falcon DEFAULT CHARSET=latin1 ALTER TABLE t1 TABLESPACE ts1 PARTITION BY RANGE(a) SUBPARTITION BY HASH(a) ( PARTITION p1 VALUES LESS THAN (100) TABLESPACE ts2 ( @@ -40,56 +34,38 @@ SUBPARTITION p2s1, SUBPARTITION p2s2 ) ); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE -TABLE_NAME = 't1' AND SCHEMA_NAME='test'; -SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME -TEST T1 P1S1 ts3 T1#P#P1#SP#P1S1 -TEST T1 P1S2 ts2 T1#P#P1#SP#P1S2 -TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1 -TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) /*!50100 TABLESPACE `ts1` */ ENGINE=Falcon DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (a) SUBPARTITION BY HASH (a) (PARTITION p1 VALUES LESS THAN (100) (SUBPARTITION p1s1 TABLESPACE = ts3 ENGINE = Falcon, SUBPARTITION p1s2 TABLESPACE = ts2 ENGINE = Falcon), PARTITION p2 VALUES LESS THAN (200) (SUBPARTITION p2s1 TABLESPACE = ts1 ENGINE = Falcon, SUBPARTITION p2s2 TABLESPACE = ts1 ENGINE = Falcon)) */ ALTER TABLE t1 ADD PARTITION (PARTITION p3 VALUES LESS THAN MAXVALUE); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE -TABLE_NAME = 't1' AND SCHEMA_NAME='test'; -SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME -TEST T1 P1S1 ts3 T1#P#P1#SP#P1S1 -TEST T1 P1S2 ts2 T1#P#P1#SP#P1S2 -TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1 -TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2 -TEST T1 P3SP0 ts1 T1#P#P3#SP#P3SP0 -TEST T1 P3SP1 ts1 T1#P#P3#SP#P3SP1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) /*!50100 TABLESPACE `ts1` */ ENGINE=Falcon DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (a) SUBPARTITION BY HASH (a) (PARTITION p1 VALUES LESS THAN (100) (SUBPARTITION p1s1 TABLESPACE = ts3 ENGINE = Falcon, SUBPARTITION p1s2 TABLESPACE = ts2 ENGINE = Falcon), PARTITION p2 VALUES LESS THAN (200) (SUBPARTITION p2s1 TABLESPACE = ts1 ENGINE = Falcon, SUBPARTITION p2s2 TABLESPACE = ts1 ENGINE = Falcon), PARTITION p3 VALUES LESS THAN MAXVALUE (SUBPARTITION p3sp0 TABLESPACE = ts1 ENGINE = Falcon, SUBPARTITION p3sp1 TABLESPACE = ts1 ENGINE = Falcon)) */ ALTER TABLE t1 REORGANIZE PARTITION p3 INTO (PARTITION p3 VALUES LESS THAN MAXVALUE TABLESPACE ts1); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE -TABLE_NAME = 't1' AND SCHEMA_NAME='test'; -SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME -TEST T1 P1S1 ts3 T1#P#P1#SP#P1S1 -TEST T1 P1S2 ts2 T1#P#P1#SP#P1S2 -TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1 -TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2 -TEST T1 P3SP0 ts1 T1#P#P3#SP#P3SP0 -TEST T1 P3SP1 ts1 T1#P#P3#SP#P3SP1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) /*!50100 TABLESPACE `ts1` */ ENGINE=Falcon DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (a) SUBPARTITION BY HASH (a) (PARTITION p1 VALUES LESS THAN (100) (SUBPARTITION p1s1 TABLESPACE = ts3 ENGINE = Falcon, SUBPARTITION p1s2 TABLESPACE = ts2 ENGINE = Falcon), PARTITION p2 VALUES LESS THAN (200) (SUBPARTITION p2s1 TABLESPACE = ts1 ENGINE = Falcon, SUBPARTITION p2s2 TABLESPACE = ts1 ENGINE = Falcon), PARTITION p3 VALUES LESS THAN MAXVALUE (SUBPARTITION p3sp0 TABLESPACE = ts1 ENGINE = Falcon, SUBPARTITION p3sp1 TABLESPACE = ts1 ENGINE = Falcon)) */ ALTER TABLE t1 REORGANIZE PARTITION p3 INTO (PARTITION p3 VALUES LESS THAN MAXVALUE TABLESPACE ts2); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE -TABLE_NAME = 't1' AND SCHEMA_NAME='test'; -SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME -TEST T1 P1S1 ts3 T1#P#P1#SP#P1S1 -TEST T1 P1S2 ts2 T1#P#P1#SP#P1S2 -TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1 -TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2 -TEST T1 P3SP0 ts2 T1#P#P3#SP#P3SP0 -TEST T1 P3SP1 ts2 T1#P#P3#SP#P3SP1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) /*!50100 TABLESPACE `ts1` */ ENGINE=Falcon DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (a) SUBPARTITION BY HASH (a) (PARTITION p1 VALUES LESS THAN (100) (SUBPARTITION p1s1 TABLESPACE = ts3 ENGINE = Falcon, SUBPARTITION p1s2 TABLESPACE = ts2 ENGINE = Falcon), PARTITION p2 VALUES LESS THAN (200) (SUBPARTITION p2s1 TABLESPACE = ts1 ENGINE = Falcon, SUBPARTITION p2s2 TABLESPACE = ts1 ENGINE = Falcon), PARTITION p3 VALUES LESS THAN MAXVALUE (SUBPARTITION p3sp0 TABLESPACE = ts2 ENGINE = Falcon, SUBPARTITION p3sp1 TABLESPACE = ts2 ENGINE = Falcon)) */ ALTER TABLE t1 REORGANIZE PARTITION p1 INTO (PARTITION p1 VALUES LESS THAN (100) TABLESPACE ts2); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE -TABLE_NAME = 't1' AND SCHEMA_NAME='test'; -SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME -TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1 -TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2 -TEST T1 P3SP0 ts2 T1#P#P3#SP#P3SP0 -TEST T1 P3SP1 ts2 T1#P#P3#SP#P3SP1 -TEST T1 P1SP0 ts2 T1#P#P1#SP#P1SP0 -TEST T1 P1SP1 ts2 T1#P#P1#SP#P1SP1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) /*!50100 TABLESPACE `ts1` */ ENGINE=Falcon DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (a) SUBPARTITION BY HASH (a) (PARTITION p1 VALUES LESS THAN (100) (SUBPARTITION p1sp0 TABLESPACE = ts2 ENGINE = Falcon, SUBPARTITION p1sp1 TABLESPACE = ts2 ENGINE = Falcon), PARTITION p2 VALUES LESS THAN (200) (SUBPARTITION p2s1 TABLESPACE = ts1 ENGINE = Falcon, SUBPARTITION p2s2 TABLESPACE = ts1 ENGINE = Falcon), PARTITION p3 VALUES LESS THAN MAXVALUE (SUBPARTITION p3sp0 TABLESPACE = ts2 ENGINE = Falcon, SUBPARTITION p3sp1 TABLESPACE = ts2 ENGINE = Falcon)) */ DROP TABLE t1; DROP TABLESPACE ts1 ENGINE=Falcon; DROP TABLESPACE ts2 ENGINE=Falcon; === added file 'mysql-test/suite/falcon/r/falcon_bug_35939.result' --- a/mysql-test/suite/falcon/r/falcon_bug_35939.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/falcon/r/falcon_bug_35939.result 2008-07-31 10:04:30 +0000 @@ -0,0 +1,61 @@ +*** Bug #35939 *** +SET @@storage_engine = 'Falcon'; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1(i int); +INSERT INTO t1(i) VALUES (1),(2),(3),(4); +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +4 +UPDATE t1 set i=i+1; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +4 +DELETE FROM t1 WHERE i=2; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +SET AUTOCOMMIT=OFF; +BEGIN; +INSERT INTO t1(i) VALUES(42); +DELETE FROM t1 WHERE i=42; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +BEGIN; +DELETE FROM t1 WHERE i=4; +INSERT INTO t1(i) VALUES(4); +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +BEGIN; +INSERT INTO t1(i) VALUES(42); +UPDATE t1 SET i=43 WHERE i=42; +DELETE FROM t1 WHERE i=43; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +BEGIN; +DELETE FROM t1 WHERE i=4; +INSERT INTO t1(i) VALUES(4); +UPDATE t1 SET i=42 WHERE i=4; +UPDATE t1 SET i=4 WHERE i=42; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +BEGIN; +INSERT INTO t1(i) VALUES(42); +UPDATE t1 SET i=43 WHERE i=42; +DELETE FROM t1 WHERE i=43; +ROLLBACK; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +SET AUTOCOMMIT=ON; +SELECT count(*) FROM t1; +count(*) +3 +DROP TABLE t1; === renamed file 'mysql-test/suite/falcon_team/r/falcon_bug_37080.result' => 'mysql-test/suite/falcon/r/falcon_bug_37080.result' --- a/mysql-test/suite/falcon_team/r/falcon_bug_37080.result 2008-07-03 08:46:37 +0000 +++ b/mysql-test/suite/falcon/r/falcon_bug_37080.result 2008-07-16 17:52:19 +0000 @@ -1,5 +1,5 @@ *** Bug #37080 *** SET @@storage_engine = 'Falcon'; -DROP TABLE IF EXISTS t; -CREATE TABLE t(i int); -DROP TABLE t; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1(a int); +DROP TABLE t1; === added file 'mysql-test/suite/falcon/r/falcon_bug_38039.result' --- a/mysql-test/suite/falcon/r/falcon_bug_38039.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/falcon/r/falcon_bug_38039.result 2008-07-16 12:40:47 +0000 @@ -0,0 +1,18 @@ +*** Bug #38039 *** +SET @@storage_engine = 'Falcon'; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (a_int INT) Engine = Falcon; +ALTER TABLE t1 ADD KEY (a_int); +SHOW INDEXES FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_Comment +t1 1 a_int 1 a_int NULL 1 NULL NULL YES BTREE +ALTER TABLE t1 ADD KEY (a_int); +SHOW INDEXES FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_Comment +t1 1 a_int 1 a_int NULL 1 NULL NULL YES BTREE +t1 1 a_int_2 1 a_int NULL 1 NULL NULL YES BTREE +ALTER TABLE t1 DROP KEY a_int; +SHOW INDEXES FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_Comment +t1 1 a_int_2 1 a_int NULL 1 NULL NULL YES BTREE +DROP TABLE t1; === modified file 'mysql-test/suite/falcon/r/falcon_options.result' --- a/mysql-test/suite/falcon/r/falcon_options.result 2008-07-10 19:00:14 +0000 +++ b/mysql-test/suite/falcon/r/falcon_options.result 2008-07-17 13:52:17 +0000 @@ -9,7 +9,6 @@ falcon_debug_trace 0 falcon_direct_io 1 falcon_gopher_threads 5 falcon_index_chill_threshold 4194304 -falcon_initial_allocation 0 falcon_io_threads 2 falcon_large_blob_threshold 160000 falcon_lock_wait_timeout 50 @@ -92,7 +91,6 @@ FALCON_DEBUG_TRACE 0 FALCON_DIRECT_IO 1 FALCON_GOPHER_THREADS 5 FALCON_INDEX_CHILL_THRESHOLD 1073741824 -FALCON_INITIAL_ALLOCATION 0 FALCON_IO_THREADS 2 FALCON_LARGE_BLOB_THRESHOLD 160000 FALCON_LOCK_WAIT_TIMEOUT 50 === modified file 'mysql-test/suite/falcon/r/falcon_options2.result' --- a/mysql-test/suite/falcon/r/falcon_options2.result 2008-07-10 19:00:14 +0000 +++ b/mysql-test/suite/falcon/r/falcon_options2.result 2008-07-17 13:52:17 +0000 @@ -10,7 +10,6 @@ FALCON_DEBUG_TRACE 0 FALCON_DIRECT_IO 1 FALCON_GOPHER_THREADS 5 FALCON_INDEX_CHILL_THRESHOLD 4194304 -FALCON_INITIAL_ALLOCATION 0 FALCON_IO_THREADS 2 FALCON_LARGE_BLOB_THRESHOLD 160000 FALCON_LOCK_WAIT_TIMEOUT 50 @@ -54,9 +53,6 @@ SELECT @@falcon_gopher_threads; SELECT @@falcon_index_chill_threshold; @@falcon_index_chill_threshold 4194304 -SELECT @@falcon_initial_allocation; -@@falcon_initial_allocation -0 SELECT @@falcon_io_threads; @@falcon_io_threads 2 === modified file 'mysql-test/suite/falcon/t/falcon_bug_22161.test' --- a/mysql-test/suite/falcon/t/falcon_bug_22161.test 2008-02-06 15:21:13 +0000 +++ b/mysql-test/suite/falcon/t/falcon_bug_22161.test 2008-07-31 10:37:43 +0000 @@ -25,7 +25,9 @@ ALTER TABLE t1 MODIFY COLUMN a text; --error ER_BLOB_USED_AS_KEY CREATE INDEX i1 ON t1 (a); ALTER TABLE t1 MODIFY COLUMN a varchar(30000); +--disable_warnings CREATE INDEX i1 ON t1 (a); +--enable_warnings # ----------------------------------------------------- # # --- Check --- # === renamed file 'mysql-test/suite/falcon_team/t/falcon_bug_23962.test' => 'mysql-test/suite/falcon/t/falcon_bug_23962.test' --- a/mysql-test/suite/falcon_team/t/falcon_bug_23962.test 2008-04-20 00:05:17 +0000 +++ b/mysql-test/suite/falcon/t/falcon_bug_23962.test 2008-07-16 16:00:34 +0000 @@ -1,9 +1,16 @@ --source include/have_falcon.inc -SET STORAGE_ENGINE = Falcon; + # # Bug #23962: Wrong results with > search # --echo *** Bug #23962 *** + +# ----------------------------------------------------- # +# --- Initialisation --- # +# ----------------------------------------------------- # +let $engine = 'Falcon'; +eval SET @@storage_engine = $engine; + --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings @@ -11,8 +18,18 @@ DROP TABLE IF EXISTS t1; CREATE TABLE t1 (a char(5), KEY (a)); INSERT INTO t1 VALUES ('a'), ('aa'), ('aaa'), ('abc'), ('bbb'); +# ----------------------------------------------------- # +# --- Test --- # +# ----------------------------------------------------- # SELECT * FROM t1 WHERE a > 'a' ORDER BY a; SELECT * FROM t1 WHERE a > 'aa' ORDER BY a; -# Final cleanup. +# ----------------------------------------------------- # +# --- Check --- # +# ----------------------------------------------------- # +SELECT count(*) FROM t1; + +# ----------------------------------------------------- # +# --- Final cleanup --- # +# ----------------------------------------------------- # DROP TABLE t1; === renamed file 'mysql-test/suite/falcon_team/t/falcon_bug_27997.test' => 'mysql-test/suite/falcon/t/falcon_bug_27997.test' === modified file 'mysql-test/suite/falcon/t/falcon_bug_31295.test' --- a/mysql-test/suite/falcon/t/falcon_bug_31295.test 2008-04-15 17:29:36 +0000 +++ b/mysql-test/suite/falcon/t/falcon_bug_31295.test 2008-07-29 10:45:39 +0000 @@ -8,7 +8,7 @@ # ----------------------------------------------------- # # --- Initialisation --- # # ----------------------------------------------------- # -let $engine = 'Falcon'; +let $engine = Falcon; eval SET @@storage_engine = $engine; --disable_warnings @@ -23,12 +23,14 @@ CREATE TABLE t1(a int); # ----------------------------------------------------- # # --- Test --- # # ----------------------------------------------------- # -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE TABLE_NAME='t1'; +--replace_result $engine ENGINE +SHOW CREATE TABLE t1; eval ALTER TABLE t1 TABLESPACE ts1 ENGINE $engine; -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE TABLE_NAME='t1'; +--replace_result $engine ENGINE +SHOW CREATE TABLE t1; eval ALTER TABLE t1 ENGINE $engine; -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE TABLE_NAME='t1'; - +--replace_result $engine ENGINE +SHOW CREATE TABLE t1; # ----------------------------------------------------- # # --- Check --- # === modified file 'mysql-test/suite/falcon/t/falcon_bug_33404.test' --- a/mysql-test/suite/falcon/t/falcon_bug_33404.test 2008-04-23 06:54:13 +0000 +++ b/mysql-test/suite/falcon/t/falcon_bug_33404.test 2008-07-29 10:45:39 +0000 @@ -19,13 +19,10 @@ PARTITION BY RANGE(a) SUBPARTITION BY HA SUBPARTITION p2s2 ) ); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE - TABLE_NAME = 't1' AND SCHEMA_NAME='test'; SHOW CREATE TABLE t1; ALTER TABLE t1 REMOVE PARTITIONING; -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE - TABLE_NAME = 't1' AND SCHEMA_NAME='test'; +SHOW CREATE TABLE t1; ALTER TABLE t1 TABLESPACE ts1 PARTITION BY RANGE(a) SUBPARTITION BY HASH(a) ( @@ -38,27 +35,22 @@ PARTITION BY RANGE(a) SUBPARTITION BY HA SUBPARTITION p2s2 ) ); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE - TABLE_NAME = 't1' AND SCHEMA_NAME='test'; +SHOW CREATE TABLE t1; ALTER TABLE t1 ADD PARTITION (PARTITION p3 VALUES LESS THAN MAXVALUE); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE - TABLE_NAME = 't1' AND SCHEMA_NAME='test'; +SHOW CREATE TABLE t1; ALTER TABLE t1 REORGANIZE PARTITION p3 INTO (PARTITION p3 VALUES LESS THAN MAXVALUE TABLESPACE ts1); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE - TABLE_NAME = 't1' AND SCHEMA_NAME='test'; +SHOW CREATE TABLE t1; ALTER TABLE t1 REORGANIZE PARTITION p3 INTO (PARTITION p3 VALUES LESS THAN MAXVALUE TABLESPACE ts2); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE - TABLE_NAME = 't1' AND SCHEMA_NAME='test'; +SHOW CREATE TABLE t1; ALTER TABLE t1 REORGANIZE PARTITION p1 INTO (PARTITION p1 VALUES LESS THAN (100) TABLESPACE ts2); -SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE - TABLE_NAME = 't1' AND SCHEMA_NAME='test'; +SHOW CREATE TABLE t1; DROP TABLE t1; DROP TABLESPACE ts1 ENGINE=Falcon; === added file 'mysql-test/suite/falcon/t/falcon_bug_35939.test' --- a/mysql-test/suite/falcon/t/falcon_bug_35939.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/falcon/t/falcon_bug_35939.test 2008-07-31 10:04:30 +0000 @@ -0,0 +1,86 @@ +--source include/have_falcon.inc + +# +# Bug #35939: Drift in Falcon row count reported by SHOW TABLE STATUS +# +--echo *** Bug #35939 *** + +# ----------------------------------------------------- # +# --- Initialisation --- # +# ----------------------------------------------------- # +let $engine = 'Falcon'; +eval SET @@storage_engine = $engine; + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +# ----------------------------------------------------- # +# --- Test --- # +# ----------------------------------------------------- # +CREATE TABLE t1(i int); +INSERT INTO t1(i) VALUES (1),(2),(3),(4); +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Expect 4 rows +UPDATE t1 set i=i+1; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Expect 4 rows, nothing added or deleted +DELETE FROM t1 WHERE i=2; +# One row deleted, expect count=3 +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; + +# insert/delete on the same row, count does not change +SET AUTOCOMMIT=OFF; +# Next tests are transactional +BEGIN; +INSERT INTO t1(i) VALUES(42); +DELETE FROM t1 WHERE i=42; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Count should not be changed,count=3 + +#delete/insert, count does not change +BEGIN; +DELETE FROM t1 WHERE i=4; +INSERT INTO t1(i) VALUES(4); +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Count should not be changed,count=3 + +# insert/update/delete on the same row, count does not change +BEGIN; +INSERT INTO t1(i) VALUES(42); +UPDATE t1 SET i=43 WHERE i=42; +DELETE FROM t1 WHERE i=43; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Count should not be changed,count=3 + +#delete/insert/update/update, count does not change +BEGIN; +DELETE FROM t1 WHERE i=4; +INSERT INTO t1(i) VALUES(4); +UPDATE t1 SET i=42 WHERE i=4; +UPDATE t1 SET i=4 WHERE i=42; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Count should not be changed,count=3 + +# same as before, but with rollback +BEGIN; +INSERT INTO t1(i) VALUES(42); +UPDATE t1 SET i=43 WHERE i=42; +DELETE FROM t1 WHERE i=43; +ROLLBACK; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +SET AUTOCOMMIT=ON; + +# ----------------------------------------------------- # +# --- Check --- # +# ----------------------------------------------------- # +SELECT count(*) FROM t1; + +# ----------------------------------------------------- # +# --- Final cleanup --- # +# ----------------------------------------------------- # +DROP TABLE t1; === renamed file 'mysql-test/suite/falcon_team/t/falcon_bug_37080.test' => 'mysql-test/suite/falcon/t/falcon_bug_37080.test' --- a/mysql-test/suite/falcon_team/t/falcon_bug_37080.test 2008-07-03 08:46:37 +0000 +++ b/mysql-test/suite/falcon/t/falcon_bug_37080.test 2008-07-16 17:52:19 +0000 @@ -1,7 +1,8 @@ --source include/have_falcon.inc + # # Bug#37080: Falcon deadlock on parallel TRUNCATE and INSERT -# +# --echo *** Bug #37080 *** # ----------------------------------------------------- # @@ -11,25 +12,24 @@ let $engine = 'Falcon'; eval SET @@storage_engine = $engine; --disable_warnings -DROP TABLE IF EXISTS t; +DROP TABLE IF EXISTS t1; --enable_warnings - -CREATE TABLE t(i int); +CREATE TABLE t1(a int); connect (conn1,localhost,root,,); + # ----------------------------------------------------- # # --- Test --- # # ----------------------------------------------------- # - let $num=10000; --disable_query_log while ($num) { connection conn1; - --send insert into t values(1); + --send insert into t1 values(1), (3), (5), (7) , (11); connection default; - --send truncate table t; + --send truncate table t1; connection conn1; --reap connection default; @@ -45,4 +45,4 @@ while ($num) # ----------------------------------------------------- # # --- Final cleanup --- # # ----------------------------------------------------- # -DROP TABLE t; +DROP TABLE t1; === added file 'mysql-test/suite/falcon/t/falcon_bug_38039.test' --- a/mysql-test/suite/falcon/t/falcon_bug_38039.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/falcon/t/falcon_bug_38039.test 2008-07-16 12:40:47 +0000 @@ -0,0 +1,43 @@ +--source include/have_falcon.inc + +# +# Bug #38039: Assertion lockState == 0 failed in StorageTableShare::deleteTable SyncObject +# + +--echo *** Bug #38039 *** + +# ----------------------------------------------------- # +# --- Initialisation --- # +# ----------------------------------------------------- # +let $engine = 'Falcon'; +eval SET @@storage_engine = $engine; + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +CREATE TABLE t1 (a_int INT) Engine = Falcon; + +# ----------------------------------------------------- # +# --- Test --- # +# ----------------------------------------------------- # + +## SHOW INDEXES is not required to reproduce the bug, but +## is included here to verify correct behavior. + +ALTER TABLE t1 ADD KEY (a_int); +SHOW INDEXES FROM t1; + +ALTER TABLE t1 ADD KEY (a_int); +SHOW INDEXES FROM t1; + +ALTER TABLE t1 DROP KEY a_int; +SHOW INDEXES FROM t1; + +DROP TABLE t1; + +# ----------------------------------------------------- # +# --- Final cleanup --- # +# ----------------------------------------------------- # + +## None, DROP TABLE is part of the test. === modified file 'mysql-test/suite/falcon/t/falcon_options2.test' --- a/mysql-test/suite/falcon/t/falcon_options2.test 2008-07-10 19:00:14 +0000 +++ b/mysql-test/suite/falcon/t/falcon_options2.test 2008-07-17 13:52:17 +0000 @@ -14,7 +14,6 @@ SELECT @@falcon_debug_trace; SELECT @@falcon_direct_io; SELECT @@falcon_gopher_threads; SELECT @@falcon_index_chill_threshold; -SELECT @@falcon_initial_allocation; SELECT @@falcon_io_threads; SELECT @@falcon_large_blob_threshold; SELECT @@falcon_lock_wait_timeout; === modified file 'mysql-test/suite/funcs_1/r/is_columns_is_falcon.result' --- a/mysql-test/suite/funcs_1/r/is_columns_is_falcon.result 2008-04-28 20:09:51 +0000 +++ b/mysql-test/suite/funcs_1/r/is_columns_is_falcon.result 2008-07-29 10:45:39 +0000 @@ -36,11 +36,6 @@ NULL information_schema FALCON_SYSTEM_ME NULL information_schema FALCON_SYSTEM_MEMORY_SUMMARY SMALL_HUNKS 5 0 NO int NULL NULL 10 0 NULL NULL int(4) select Default Default NULL information_schema FALCON_SYSTEM_MEMORY_SUMMARY TOTAL_SPACE 1 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select Default Default NULL information_schema FALCON_SYSTEM_MEMORY_SUMMARY UNIQUE_SIZES 6 0 NO int NULL NULL 10 0 NULL NULL int(4) select Default Default -NULL information_schema FALCON_TABLES INTERNAL_NAME 5 NO varchar 127 508 NULL NULL utf8 utf8_general_ci varchar(127) select Default Default -NULL information_schema FALCON_TABLES PARTITION 3 NO varchar 127 508 NULL NULL utf8 utf8_general_ci varchar(127) select Default Default -NULL information_schema FALCON_TABLES SCHEMA_NAME 1 NO varchar 127 508 NULL NULL utf8 utf8_general_ci varchar(127) select Default Default -NULL information_schema FALCON_TABLES TABLESPACE 4 NO varchar 127 508 NULL NULL utf8 utf8_general_ci varchar(127) select Default Default -NULL information_schema FALCON_TABLES TABLE_NAME 2 NO varchar 127 508 NULL NULL utf8 utf8_general_ci varchar(127) select Default Default NULL information_schema FALCON_TABLESPACES COMMENT 3 NO varchar 127 508 NULL NULL utf8 utf8_general_ci varchar(127) select Default Default NULL information_schema FALCON_TABLESPACES TABLESPACE_NAME 1 NO varchar 127 508 NULL NULL utf8 utf8_general_ci varchar(127) select Default Default NULL information_schema FALCON_TABLESPACES TYPE 2 NO varchar 127 508 NULL NULL utf8 utf8_general_ci varchar(127) select Default Default @@ -161,11 +156,6 @@ NULL information_schema FALCON_SYSTEM_ME NULL information_schema FALCON_SYSTEM_MEMORY_SUMMARY BIG_HUNKS int NULL NULL NULL NULL int(4) NULL information_schema FALCON_SYSTEM_MEMORY_SUMMARY SMALL_HUNKS int NULL NULL NULL NULL int(4) NULL information_schema FALCON_SYSTEM_MEMORY_SUMMARY UNIQUE_SIZES int NULL NULL NULL NULL int(4) -4.0000 information_schema FALCON_TABLES SCHEMA_NAME varchar 127 508 utf8 utf8_general_ci varchar(127) -4.0000 information_schema FALCON_TABLES TABLE_NAME varchar 127 508 utf8 utf8_general_ci varchar(127) -4.0000 information_schema FALCON_TABLES PARTITION varchar 127 508 utf8 utf8_general_ci varchar(127) -4.0000 information_schema FALCON_TABLES TABLESPACE varchar 127 508 utf8 utf8_general_ci varchar(127) -4.0000 information_schema FALCON_TABLES INTERNAL_NAME varchar 127 508 utf8 utf8_general_ci varchar(127) 4.0000 information_schema FALCON_TABLESPACES TABLESPACE_NAME varchar 127 508 utf8 utf8_general_ci varchar(127) 4.0000 information_schema FALCON_TABLESPACES TYPE varchar 127 508 utf8 utf8_general_ci varchar(127) 4.0000 information_schema FALCON_TABLESPACES COMMENT varchar 127 508 utf8 utf8_general_ci varchar(127) === modified file 'mysql-test/suite/funcs_1/r/is_tables_is_falcon.result' --- a/mysql-test/suite/funcs_1/r/is_tables_is_falcon.result 2008-06-19 18:56:48 +0000 +++ b/mysql-test/suite/funcs_1/r/is_tables_is_falcon.result 2008-07-29 10:45:39 +0000 @@ -153,29 +153,6 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema -TABLE_NAME FALCON_TABLES -TABLE_TYPE SYSTEM VIEW -ENGINE MEMORY -VERSION 10 -ROW_FORMAT Fixed -TABLE_ROWS #TBLR# -AVG_ROW_LENGTH #ARL# -DATA_LENGTH #DL# -MAX_DATA_LENGTH #MDL# -INDEX_LENGTH #IL# -DATA_FREE #DF# -AUTO_INCREMENT NULL -CREATE_TIME #CRT# -UPDATE_TIME #UT# -CHECK_TIME #CT# -TABLE_COLLATION utf8_general_ci -CHECKSUM NULL -CREATE_OPTIONS #CO# -TABLE_COMMENT #TC# -user_comment -Separator ----------------------------------------------------- -TABLE_CATALOG NULL -TABLE_SCHEMA information_schema TABLE_NAME FALCON_TABLESPACES TABLE_TYPE SYSTEM VIEW ENGINE MEMORY @@ -469,29 +446,6 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema -TABLE_NAME FALCON_TABLES -TABLE_TYPE SYSTEM VIEW -ENGINE MEMORY -VERSION 10 -ROW_FORMAT Fixed -TABLE_ROWS #TBLR# -AVG_ROW_LENGTH #ARL# -DATA_LENGTH #DL# -MAX_DATA_LENGTH #MDL# -INDEX_LENGTH #IL# -DATA_FREE #DF# -AUTO_INCREMENT NULL -CREATE_TIME #CRT# -UPDATE_TIME #UT# -CHECK_TIME #CT# -TABLE_COLLATION utf8_general_ci -CHECKSUM NULL -CREATE_OPTIONS #CO# -TABLE_COMMENT #TC# -user_comment -Separator ----------------------------------------------------- -TABLE_CATALOG NULL -TABLE_SCHEMA information_schema TABLE_NAME FALCON_TABLESPACES TABLE_TYPE SYSTEM VIEW ENGINE MEMORY === modified file 'mysql-test/t/information_schema-master.opt' --- a/mysql-test/t/information_schema-master.opt 2007-11-30 03:26:57 +0000 +++ b/mysql-test/t/information_schema-master.opt 2008-07-29 10:45:39 +0000 @@ -6,7 +6,6 @@ --loose-skip-plugin-falcon_syncobjects --loose-skip-plugin-falcon_system_memory_detail --loose-skip-plugin-falcon_system_memory_summary ---loose-skip-plugin-falcon_tables --loose-skip-plugin-falcon_transaction_summary --loose-skip-plugin-falcon_transactions --loose-skip-plugin-falcon_version === modified file 'mysql-test/t/information_schema_db-master.opt' --- a/mysql-test/t/information_schema_db-master.opt 2007-11-30 03:26:57 +0000 +++ b/mysql-test/t/information_schema_db-master.opt 2008-07-29 10:45:39 +0000 @@ -6,7 +6,6 @@ --loose-skip-plugin-falcon_syncobjects --loose-skip-plugin-falcon_system_memory_detail --loose-skip-plugin-falcon_system_memory_summary ---loose-skip-plugin-falcon_tables --loose-skip-plugin-falcon_transaction_summary --loose-skip-plugin-falcon_transactions --loose-skip-plugin-falcon_version === modified file 'mysql-test/t/mysqlshow-master.opt' --- a/mysql-test/t/mysqlshow-master.opt 2007-11-30 03:26:57 +0000 +++ b/mysql-test/t/mysqlshow-master.opt 2008-07-29 10:45:39 +0000 @@ -6,7 +6,6 @@ --loose-skip-plugin-falcon_syncobjects --loose-skip-plugin-falcon_system_memory_detail --loose-skip-plugin-falcon_system_memory_summary ---loose-skip-plugin-falcon_tables --loose-skip-plugin-falcon_transaction_summary --loose-skip-plugin-falcon_transactions --loose-skip-plugin-falcon_version === modified file 'mysql-test/t/variables-master.opt' --- a/mysql-test/t/variables-master.opt 2007-09-28 19:51:23 +0000 +++ b/mysql-test/t/variables-master.opt 2008-07-29 10:45:39 +0000 @@ -6,6 +6,5 @@ --loose-skip-plugin-falcon_syncobjects --loose-skip-plugin-falcon_system_memory_detail --loose-skip-plugin-falcon_system_memory_summary ---loose-skip-plugin-falcon_tables --loose-skip-plugin-falcon_transaction_summary --loose-skip-plugin-falcon_transactions === modified file 'sql/probes.h' --- a/sql/probes.h 2007-09-21 07:09:31 +0000 +++ b/sql/probes.h 2008-07-08 13:49:57 +0000 @@ -11,7 +11,7 @@ extern "C" { #endif -#if _DTRACE_VERSION +#if _DTRACE_VERSION && defined(HAVE_DTRACE) #define MYSQL_DELETE_END() \ __dtrace_mysql___delete_end() === modified file 'storage/falcon/BDB.cpp' --- a/storage/falcon/BDB.cpp 2008-05-08 20:37:28 +0000 +++ b/storage/falcon/BDB.cpp 2008-07-24 08:45:03 +0000 @@ -57,8 +57,11 @@ Bdb::Bdb() priorDirty = nextDirty = NULL; flushIt = false; dbb = NULL; + syncObject.setName("Bdb::syncObject"); + syncWrite.setName("Bdb::syncWrite"); #ifdef COLLECT_BDB_HISTORY + syncHistory.setName("Bdb::syncHistory"); lockType = None; initCount = 0; historyCount = 0; @@ -203,7 +206,7 @@ void Bdb::initHistory() void Bdb::addHistory(int delta, const char *file, int line) { - Sync sync (&historySyncObject, "Bdb::addHistory"); + Sync sync (&syncHistory, "Bdb::addHistory"); sync.lock (Exclusive); unsigned int historyOffset = historyCount++ % MAX_BDB_HISTORY; === modified file 'storage/falcon/BDB.h' --- a/storage/falcon/BDB.h 2008-05-10 04:18:41 +0000 +++ b/storage/falcon/BDB.h 2008-07-24 08:45:03 +0000 @@ -103,7 +103,7 @@ public: volatile INTERLOCK_TYPE useCount; #ifdef COLLECT_BDB_HISTORY - SyncObject historySyncObject; + SyncObject syncHistory; uint initCount; uint historyCount; struct bdb_history history[MAX_BDB_HISTORY]; === modified file 'storage/falcon/BackLog.cpp' --- a/storage/falcon/BackLog.cpp 2008-04-12 02:22:50 +0000 +++ b/storage/falcon/BackLog.cpp 2008-07-17 13:52:17 +0000 @@ -38,7 +38,7 @@ BackLog::BackLog(Database *db, const cha database = db; dbb = new Dbb(database->dbb, 0); dbb->createPath(fileName); - dbb->create(fileName, dbb->pageSize, 0, HdrTableSpace, 0, NULL, 0); + dbb->create(fileName, dbb->pageSize, 0, HdrTableSpace, 0, NULL); dbb->noLog = true; dbb->tableSpaceId = -1; int32 sectionId = Section::createSection (dbb, NO_TRANSACTION); === modified file 'storage/falcon/Cache.cpp' --- a/storage/falcon/Cache.cpp 2008-07-09 12:35:48 +0000 +++ b/storage/falcon/Cache.cpp 2008-07-24 08:45:03 +0000 @@ -89,9 +89,12 @@ Cache::Cache(Database *db, int pageSz, i bufferHunks = new char* [numberHunks]; memset(bufferHunks, 0, numberHunks * sizeof(char*)); syncObject.setName("Cache::syncObject"); - syncDirty.setName("Cache::syncDirty"); syncFlush.setName("Cache::syncFlush"); + syncDirty.setName("Cache::syncDirty"); + syncThreads.setName("Cache::syncThreads"); syncWait.setName("Cache::syncWait"); + bufferQueue.syncObject.setName("Cache::bufferQueue.syncObject"); + flushBitmap = new Bitmap; numberIoThreads = falcon_io_threads; ioThreads = new Thread*[numberIoThreads]; @@ -359,8 +362,8 @@ Bdb* Cache::fakePage(Dbb *dbb, int32 pag void Cache::flush(int64 arg) { - Sync flushLock(&syncFlush, "Cache::flush"); - Sync sync(&syncDirty, "Cache::ioThread"); + Sync flushLock(&syncFlush, "Cache::flush(1)"); + Sync sync(&syncDirty, "Cache::flush(2)"); flushLock.lock(Exclusive); if (flushing) @@ -513,7 +516,7 @@ void Cache::markClean(Bdb *bdb) void Cache::writePage(Bdb *bdb, int type) { - Sync writer(&bdb->syncWrite, "Cache::writePage"); + Sync writer(&bdb->syncWrite, "Cache::writePage(1)"); writer.lock(Exclusive); if (!bdb->isDirty) @@ -597,7 +600,7 @@ void Cache::writePage(Bdb *bdb, int type if (dbb->shadows) { - Sync sync (&dbb->cloneSyncObject, "Cache::writePage"); + Sync sync (&dbb->syncClone, "Cache::writePage(2)"); sync.lock (Shared); for (DatabaseCopy *shadow = dbb->shadows; shadow; shadow = shadow->next) @@ -665,9 +668,9 @@ void Cache::freePage(Dbb *dbb, int32 pag void Cache::flush(Dbb *dbb) { - //Sync sync (&syncDirty, "Cache::flush(Dbb)"); + //Sync sync (&syncDirty, "Cache::flush(1)"); //sync.lock (Exclusive); - Sync sync (&syncObject, "Cache::freePage"); + Sync sync (&syncObject, "Cache::flush(3)"); sync.lock (Shared); for (Bdb *bdb = bdbs; bdb < endBdbs; ++bdb) @@ -761,10 +764,10 @@ void Cache::ioThread(void* arg) void Cache::ioThread(void) { - Sync syncThread(&syncThreads, "Cache::ioThread"); + Sync syncThread(&syncThreads, "Cache::ioThread(1)"); syncThread.lock(Shared); - Sync flushLock(&syncFlush, "Cache::ioThread"); - Sync sync(&syncObject, "Cache::ioThread"); + Sync flushLock(&syncFlush, "Cache::ioThread(2)"); + Sync sync(&syncObject, "Cache::ioThread(3)"); Priority priority(database->ioScheduler); Thread *thread = Thread::getThread("Cache::ioThread"); UCHAR *rawBuffer = new UCHAR[ASYNC_BUFFER_SIZE]; === modified file 'storage/falcon/CollationManager.cpp' --- a/storage/falcon/CollationManager.cpp 2007-09-20 15:44:25 +0000 +++ b/storage/falcon/CollationManager.cpp 2008-07-24 08:45:03 +0000 @@ -42,6 +42,7 @@ CollationManager::CollationManager() { memset(hashTable, 0, sizeof(hashTable)); add(&collationCaseless); + syncObject.setName("CollationManager::syncObject"); } CollationManager::~CollationManager() @@ -87,7 +88,7 @@ void CollationManager::add(Collation* co Collation* CollationManager::find(const char* collationName) { - Sync sync(&syncObject, "CollationManager::addCollation"); + Sync sync(&syncObject, "CollationManager::find"); sync.lock(Shared); int slot = JString::hash(collationName, COLLATION_HASH_SIZE); === modified file 'storage/falcon/CompiledStatement.cpp' --- a/storage/falcon/CompiledStatement.cpp 2007-09-20 15:44:25 +0000 +++ b/storage/falcon/CompiledStatement.cpp 2008-07-24 08:45:03 +0000 @@ -96,6 +96,7 @@ CompiledStatement::CompiledStatement(Con firstInstance = lastInstance = NULL; select = NULL; parse = NULL; + syncObject.setName("CompiledStatement::syncObject"); } CompiledStatement::~CompiledStatement() @@ -1093,7 +1094,7 @@ bool CompiledStatement::addFilter(TableF int CompiledStatement::countInstances() { - Sync sync (&syncObject, "CompiledStatement::addInstance"); + Sync sync (&syncObject, "CompiledStatement::countInstances"); sync.lock (Shared); int count = 0; @@ -1163,7 +1164,7 @@ Type CompiledStatement::getType(Syntax * void CompiledStatement::invalidate() { - Sync sync (&syncObject, "CompiledStatement::addInstance"); + Sync sync (&syncObject, "CompiledStatement::invalidate"); sync.lock (Shared); for (Statement *instance = firstInstance; instance; instance = instance->next) === modified file 'storage/falcon/Configuration.cpp' --- a/storage/falcon/Configuration.cpp 2008-07-10 09:01:32 +0000 +++ b/storage/falcon/Configuration.cpp 2008-07-17 13:52:17 +0000 @@ -62,7 +62,6 @@ extern uint64 max_memory_address; extern uint64 falcon_record_memory_max; -extern uint64 falcon_initial_allocation; extern uint falcon_allocation_extent; extern uint64 falcon_page_cache_size; //extern uint falcon_debug_mask; @@ -116,7 +115,6 @@ Configuration::Configuration(const char recordMemoryMax = falcon_record_memory_max; recordScavengeThresholdPct = falcon_record_scavenge_threshold; recordScavengeFloorPct = falcon_record_scavenge_floor; - initialAllocation = falcon_initial_allocation; allocationExtent = falcon_allocation_extent; serialLogWindows = falcon_serial_log_buffers; pageCacheSize = falcon_page_cache_size; @@ -164,7 +162,6 @@ Configuration::Configuration(const char recordScavengeThreshold = (recordMemoryMax * 100) / recordScavengeThresholdPct; recordScavengeFloor = (recordMemoryMax * 100) / recordScavengeFloorPct; serialLogWindows = 10; - initialAllocation = 0; allocationExtent = 10; pageCacheSize = getMemorySize(PAGE_CACHE_MEMORY); indexChillThreshold = 4 * ONE_MB; === modified file 'storage/falcon/Configuration.h' --- a/storage/falcon/Configuration.h 2008-03-11 16:15:47 +0000 +++ b/storage/falcon/Configuration.h 2008-07-17 13:52:17 +0000 @@ -49,7 +49,6 @@ public: uint64 recordScavengeFloor; int recordScavengeThresholdPct; int recordScavengeFloorPct; - uint64 initialAllocation; uint64 allocationExtent; uint64 pageCacheSize; int64 javaInitialAllocation; === modified file 'storage/falcon/Connection.cpp' --- a/storage/falcon/Connection.cpp 2008-07-10 09:01:32 +0000 +++ b/storage/falcon/Connection.cpp 2008-07-24 08:45:03 +0000 @@ -89,7 +89,7 @@ static Server *server; static bool panicShutdown; static Registry registry; -static SyncObject databaseList; +static SyncObject syncDatabaseList; static const char *ddl [] = { "grant all on system.sequences to %s", @@ -169,6 +169,9 @@ void Connection::init(Configuration *con isolationLevel = TRANSACTION_CONSISTENT_READ; mySqlThreadId = 0; currentStatement = NULL; + syncObject.setName("Connection::syncObject"); + syncResultSets.setName("Connection::syncResultSets"); + syncDatabaseList.setName("Connection::syncDatabaseList"); } Connection::~Connection() @@ -923,7 +926,7 @@ void Connection::openDatabase(const char if (filename) IO::expandFileName(filename, sizeof(dbFileName), dbFileName); else - { + { if (!registry.findDatabase (dbName, sizeof (dbFileName), dbFileName)) throw SQLEXCEPTION (CONNECTION_ERROR, "can't find database \"%s\"", dbName); } @@ -968,7 +971,7 @@ void Connection::createDatabase(const ch const char *password = parameters->findValue ("password", ""); char dbFileName [1024]; const char *dbFile = registry.findDatabase (dbName, sizeof (dbFileName), dbFileName); - Sync sync (&databaseList, "Connection::createDatabase"); + Sync sync (&syncDatabaseList, "Connection::createDatabase(1)"); sync.lock (Exclusive); if (dbFile) @@ -1027,7 +1030,10 @@ Database* Connection::createDatabase(con if (database) throw SQLEXCEPTION (CONNECTION_ERROR, "database is already open"); - Sync sync (&databaseList, "Connection::createDatabase"); + if (!firstDatabase) + syncDatabaseList.setName("Connection::syncDatabaseList"); + + Sync sync (&syncDatabaseList, "Connection::createDatabase(2)"); sync.lock (Exclusive); #ifndef STORAGE_ENGINE @@ -1042,7 +1048,7 @@ Database* Connection::createDatabase(con } #ifdef STORAGE_ENGINE - strcpy(dbFileName, fileName); + strcpy(dbFileName, fileName); #else registry.defineDatabase (dbName, fileName); @@ -1617,7 +1623,7 @@ ResultList* Connection::findResultList(i Database* Connection::getDatabase(const char* dbName, const char* dbFileName, Threads* threads) { - Sync sync (&databaseList, "Connection::getDatabase"); + Sync sync (&syncDatabaseList, "Connection::getDatabase"); sync.lock (Shared); Database *db; @@ -1665,7 +1671,7 @@ void Connection::dropDatabase() if (!database) throw SQLEXCEPTION (CONNECTION_ERROR, "database isn't open"); - Sync sync (&databaseList, "Connection::dropDatabase"); + Sync sync (&syncDatabaseList, "Connection::dropDatabase"); sync.lock (Exclusive); unlink(database); detachDatabase(); === modified file 'storage/falcon/Database.cpp' --- a/storage/falcon/Database.cpp 2008-06-17 17:41:54 +0000 +++ b/storage/falcon/Database.cpp 2008-07-17 13:52:17 +0000 @@ -323,14 +323,6 @@ static const char *createTableSpaces = "tablespace_id int not null," "filename varchar(512) not null," "type int," - /*** - "initial_size bigint," - "extent_size bigint," - "autoextend_size bigint," - "max_size bigint," - "nodegroup int," - "wait int," - ***/ "comment text)"; static const char *createTableSpaceSequence = @@ -634,7 +626,7 @@ void Database::createDatabase(const char int page_size = PAGE_SIZE; #endif - cache = dbb->create(filename, page_size, configuration->pageCacheSize, HdrDatabaseFile, 0, "", 0); + cache = dbb->create(filename, page_size, configuration->pageCacheSize, HdrDatabaseFile, 0, ""); try { @@ -995,7 +987,7 @@ Table* Database::findTable (const char * schema = symbolManager->getSymbol (schema); name = symbolManager->getSymbol (name); - Sync syncTbl (&syncTables, "Database::findTable"); + Sync syncTbl (&syncTables, "Database::findTable(1)"); syncTbl.lock (Shared); int slot = HASH (name, TABLE_HASH_SIZE); @@ -1012,7 +1004,7 @@ Table* Database::findTable (const char * if (untable->name == name && untable->schemaName == schema) return NULL; - Sync syncDDL(&syncSysDDL, "Database::findTable"); + Sync syncDDL(&syncSysDDL, "Database::findTable(2)"); syncDDL.lock(Shared); PStatement statement = prepareStatement ( @@ -1145,7 +1137,7 @@ CompiledStatement* Database::getCompiled Sync syncDDL(&syncSysDDL, "Database::getCompiledStatement(1)"); syncDDL.lock(Shared); - Sync syncStmt(&syncStatements, "Database::getCompiledStatement(1)"); + Sync syncStmt(&syncStatements, "Database::getCompiledStatement(2)"); syncStmt.lock(Shared); //printf("%s\n", (const char*) sqlString); @@ -1174,10 +1166,10 @@ CompiledStatement* Database::getCompiled CompiledStatement* Database::getCompiledStatement(Connection *connection, const WCString *sqlString) { - Sync syncDDL(&syncSysDDL, "Database::getCompiledStatement(WC)"); + Sync syncDDL(&syncSysDDL, "Database::getCompiledStatement(3)"); syncDDL.lock(Shared); - Sync syncStmt(&syncStatements, "Database::getCompiledStatement(WC)"); + Sync syncStmt(&syncStatements, "Database::getCompiledStatement(4)"); syncStmt.lock(Shared); //JString str(sqlString); @@ -1208,7 +1200,7 @@ CompiledStatement* Database::getCompiled CompiledStatement* Database::compileStatement(Connection *connection, JString sqlString) { - Sync syncDDL(&syncSysDDL, "Database::getCompiledStatement(WC)"); + Sync syncDDL(&syncSysDDL, "Database::compileStatement(1)"); syncDDL.lock(Shared); CompiledStatement *statement = new CompiledStatement (connection); @@ -1227,9 +1219,9 @@ CompiledStatement* Database::compileStat if (statement->useable && (statement->numberParameters > 0 || !statement->filters.isEmpty())) { - Sync syncStmt (&syncStatements, "Database::compileStatement(1)"); + Sync syncStmt (&syncStatements, "Database::compileStatement(2)"); syncStmt.lock (Shared); - Sync syncAddStmt (&syncAddStatement, "Database::compileStatement(2)"); + Sync syncAddStmt (&syncAddStatement, "Database::compileStatement(3)"); syncAddStmt.lock (Exclusive); statement->addRef(); statement->next = compiledStatements; @@ -1265,7 +1257,7 @@ void Database::commitSystemTransaction() void Database::rollbackSystemTransaction(void) { - Sync sync (&syncSysDDL, "Database::commitSystemTransaction"); + Sync sync (&syncSysDDL, "Database::rollbackSystemTransaction"); sync.lock (Exclusive); systemConnection->rollback(); } @@ -1331,10 +1323,10 @@ Table* Database::getTable(int tableId) Table* Database::loadTable(ResultSet * resultSet) { - Sync syncDDL(&syncSysDDL, "Database::loadTable"); + Sync syncDDL(&syncSysDDL, "Database::loadTable(1)"); syncDDL.lock(Shared); - Sync syncObj(&syncTables, "Database::loadTable"); + Sync syncObj(&syncTables, "Database::loadTable(2)"); if (!resultSet->next()) return NULL; @@ -1399,7 +1391,7 @@ void Database::flushInversion(Transactio void Database::dropTable(Table *table, Transaction *transaction) { - Sync syncDDL(&syncSysDDL, "Database::dropTable"); + Sync syncDDL(&syncSysDDL, "Database::dropTable(1)"); syncDDL.lock(Exclusive); table->checkDrop(); @@ -1414,7 +1406,7 @@ void Database::dropTable(Table *table, T transactionManager->dropTable(table, transaction); - Sync syncTbl(&syncTables, "Database::dropTable"); + Sync syncTbl(&syncTables, "Database::dropTable(2)"); syncTbl.lock(Exclusive); // Remove table from linear table list @@ -1455,7 +1447,7 @@ void Database::dropTable(Table *table, T // Lock sections (factored out of SRLDropTable to avoid a deadlock) - Sync syncSections(&serialLog->syncSections, "Database::dropTable"); + Sync syncSections(&serialLog->syncSections, "Database::dropTable(3)"); syncSections.lock(Exclusive); table->expunge(getSystemTransaction()); delete table; @@ -1463,7 +1455,7 @@ void Database::dropTable(Table *table, T void Database::truncateTable(Table *table, Sequence *sequence, Transaction *transaction) { - Sync syncDDL(&syncSysDDL, "Database::truncateTable"); + Sync syncDDL(&syncSysDDL, "Database::truncateTable(1)"); syncDDL.lock(Exclusive); table->checkDrop(); @@ -1476,19 +1468,19 @@ void Database::truncateTable(Table *tabl // Block table drop/add, table list scans ok - Sync syncTbl(&syncTables, "Database::truncateTable"); + Sync syncTbl(&syncTables, "Database::truncateTable(2)"); syncTbl.lock(Shared); //Lock sections (factored out of SRLDropTable to avoid a deadlock) //The lock order (serialLog->syncSections before table->syncObject) is //important - Sync syncSections(&serialLog->syncSections, "Database::truncateTable"); + Sync syncSections(&serialLog->syncSections, "Database::truncateTable(3)"); syncSections.lock(Exclusive); // No table access until truncate completes - Sync syncObj(&table->syncObject, "Database::truncateTable"); + Sync syncObj(&table->syncObject, "Database::truncateTable(4)"); syncObj.lock(Exclusive); table->deleting = true; @@ -1675,10 +1667,10 @@ Role* Database::findRole(const WCString void Database::validate(int optionMask) { - Sync syncDDL(&syncSysDDL, "Database::validate"); + Sync syncDDL(&syncSysDDL, "Database::validate(1)"); syncDDL.lock(Shared); - Sync syncObj(&syncObject, "Database::validate"); + Sync syncObj(&syncObject, "Database::validate(2)"); syncObj.lock (Exclusive); Log::debug ("Validation:\n"); @@ -1764,7 +1756,7 @@ void Database::retireRecords(bool forced { int cycle = scavengeCycle; - Sync syncScavenger(&syncScavenge, "Database::retireRecords"); + Sync syncScavenger(&syncScavenge, "Database::retireRecords(1)"); syncScavenger.lock(Exclusive); if (forced && scavengeCycle > cycle) @@ -1792,7 +1784,7 @@ void Database::retireRecords(bool forced //LogStream stream; //recordDataPool->analyze(0, &stream, NULL, NULL); - Sync syncTbl(&syncTables, "Database::retireRecords"); + Sync syncTbl(&syncTables, "Database::retireRecords(2)"); syncTbl.lock(Shared); Table *table; @@ -2006,7 +1998,7 @@ JString Database::analyze(int mask) { Stream stream; stream.setMalloc (true); - Sync syncDDL(&syncSysDDL, "Database::analyze"); + Sync syncDDL(&syncSysDDL, "Database::analyze(1)"); if (mask & analyzeMemory) MemMgrAnalyze (mask, &stream); @@ -2048,7 +2040,7 @@ JString Database::analyze(int mask) if (mask & analyzeStatements) { stream.putSegment ("\nStatements\n"); - Sync syncStmt(&syncStatements, "Database::analyze"); + Sync syncStmt(&syncStatements, "Database::analyze(2)"); syncStmt.lock(Shared); for (CompiledStatement *statement = compiledStatements; statement; @@ -2359,10 +2351,10 @@ void Database::getTableSpaceFilesInfo(In void Database::updateCardinalities(void) { - Sync syncDDL(&syncSysDDL, "Database::updateCardinalities"); + Sync syncDDL(&syncSysDDL, "Database::updateCardinalities(1)"); syncDDL.lock(Shared); - Sync syncTbl(&syncTables, "Database::updateCardinalities"); + Sync syncTbl(&syncTables, "Database::updateCardinalities(2)"); syncTbl.lock(Shared); bool hit = false; === modified file 'storage/falcon/DatabaseClone.cpp' --- a/storage/falcon/DatabaseClone.cpp 2007-10-08 17:20:26 +0000 +++ b/storage/falcon/DatabaseClone.cpp 2008-07-17 13:52:17 +0000 @@ -50,7 +50,7 @@ void DatabaseClone::createFile(const cha shadow = new IO; shadow->pageSize = dbb->pageSize; shadow->dbb = dbb; - shadow->createFile(fileName, 0); + shadow->createFile(fileName); } const char* DatabaseClone::getFileName(void) @@ -78,7 +78,7 @@ void DatabaseClone::writePage(Bdb* bdb) void DatabaseClone::clone(void) { - Sync sync(&syncObject, "DatabaseClone::clone"); + Sync sync(&syncObject, "DatabaseClone::clone(1)"); int n = 0; for (;;) @@ -111,7 +111,7 @@ void DatabaseClone::clone(void) // In theory, we're done. Lock the cache against changes, and check again - Sync syncCache(&dbb->cache->syncObject, "Dbb::cloneFile"); + Sync syncCache(&dbb->cache->syncObject, "DatabaseClone::clone(2)"); syncCache.lock(Exclusive); lastPage = PageInventoryPage::getLastPage(dbb); === modified file 'storage/falcon/DatabaseCopy.cpp' --- a/storage/falcon/DatabaseCopy.cpp 2007-09-20 15:44:25 +0000 +++ b/storage/falcon/DatabaseCopy.cpp 2008-07-24 08:45:03 +0000 @@ -31,6 +31,7 @@ DatabaseCopy::DatabaseCopy(Dbb *db) rewrittenPages = NULL; highWater = 0; atEnd = false; + syncObject.setName("DatabaseCopy::syncObject"); } DatabaseCopy::~DatabaseCopy(void) === modified file 'storage/falcon/Dbb.cpp' --- a/storage/falcon/Dbb.cpp 2008-04-12 02:22:50 +0000 +++ b/storage/falcon/Dbb.cpp 2008-07-24 08:45:03 +0000 @@ -89,6 +89,8 @@ Dbb::Dbb(Database *dbase) tableSpaceSectionId = 0; tableSpaceId = 0; noLog = false; + syncClone.setName("Dbb::syncClone"); + syncSequences.setName("Dbb::syncSequences"); } @@ -147,7 +149,7 @@ Dbb::~Dbb() dbb->close(); } -Cache* Dbb::create(const char * fileName, int pageSz, int64 cacheSize, FileType fileType, TransId transId, const char *logRoot, uint64 initialAllocation) +Cache* Dbb::create(const char * fileName, int pageSz, int64 cacheSize, FileType fileType, TransId transId, const char *logRoot) { serialLog = database->serialLog; odsVersion = ODS_VERSION; @@ -155,7 +157,7 @@ Cache* Dbb::create(const char * fileName sequence = 1; init(pageSz, (int) ((cacheSize + pageSz - 1) / pageSz)); - createFile(fileName, initialAllocation); + createFile(fileName); try { Hdr::create(this, fileType, transId, logRoot); @@ -749,7 +751,7 @@ Bdb* Dbb::getSequencePage(int sequenceId else ***/ { - Sync sync(&sequencesSyncObject, "Dbb::updateSequence"); + Sync sync(&syncSequences, "Dbb::getSequencePage"); sync.lock(Shared); int sequencePageSequence = sequenceId / sequencesPerPage; int32 sequencePageNumber = sequencePages.get(sequencePageSequence); @@ -970,7 +972,7 @@ void Dbb::cloneFile(Database *database, /*** void Dbb::cloneFile(DatabaseClone *shadow, bool isShadow) { - Sync sync (&cloneSyncObject, "Dbb::cloneFile(2)"); + Sync sync (&syncClone, "Dbb::cloneFile(2)"); sync.lock (Exclusive); shadow->next = shadows; shadows = shadow; @@ -1023,7 +1025,7 @@ void Dbb::cloneFile(DatabaseClone *shado bool Dbb::deleteShadow(DatabaseCopy *shadow) { - Sync sync (&cloneSyncObject, "Dbb::deleteShadow"); + Sync sync (&syncClone, "Dbb::deleteShadow"); sync.lock (Exclusive); for (DatabaseCopy **ptr = &shadows; *ptr; ptr = &(*ptr)->next) @@ -1352,7 +1354,7 @@ void Dbb::upgradeSequenceSection(void) void Dbb::addShadow(DatabaseCopy* shadow) { - Sync sync (&cloneSyncObject, "Dbb::addShadow"); + Sync sync (&syncClone, "Dbb::addShadow"); sync.lock (Exclusive); shadow->next = shadows; shadows = shadow; === modified file 'storage/falcon/Dbb.h' --- a/storage/falcon/Dbb.h 2008-03-27 06:09:29 +0000 +++ b/storage/falcon/Dbb.h 2008-07-24 08:45:03 +0000 @@ -61,11 +61,11 @@ static const int FillLevels = 5; struct SectionAnalysis { - int32 recordLocatorPages; - int32 dataPages; - int32 overflowPages; - int32 spaceAvailable; - int32 records; + int32 recordLocatorPages; + int32 dataPages; + int32 overflowPages; + int32 spaceAvailable; + int32 records; }; struct IndexAnalysis @@ -168,7 +168,7 @@ public: Bdb* fakePage (int32 pageNumber, PageType pageType, TransId transId); Bdb* trialFetch(int32 pageNumber, PageType pageType, LockType lockType); void init(int pageSz, int cacheSize); - Cache* create (const char *fileName, int pageSize, int64 cacheSize, FileType fileType, TransId transId, const char *logRoot, uint64 initialAllocation); + Cache* create (const char *fileName, int pageSize, int64 cacheSize, FileType fileType, TransId transId, const char *logRoot); void validateCache(void); void logUpdatedRecords(Transaction* transaction, RecordVersion* records, bool chill = false); void logIndexUpdates(DeferredIndex* deferredIndex); @@ -214,8 +214,8 @@ public: HdrState priorState; Inversion *inversion; DatabaseCopy *shadows; - SyncObject cloneSyncObject; - SyncObject sequencesSyncObject; + SyncObject syncClone; + SyncObject syncSequences; SerialLog *serialLog; JString logRoot; SparseArray sequencePages; === modified file 'storage/falcon/DeferredIndex.cpp' --- a/storage/falcon/DeferredIndex.cpp 2008-04-12 02:22:50 +0000 +++ b/storage/falcon/DeferredIndex.cpp 2008-07-25 18:07:24 +0000 @@ -60,6 +60,8 @@ DeferredIndex::DeferredIndex(Index *idx, haveMinValue = true; haveMaxValue = true; window = NULL; + syncObject.setName("DeferredIndex::syncObject"); + useCount = 1; // the transaction that created it } DeferredIndex::~DeferredIndex(void) @@ -357,11 +359,11 @@ bool DeferredIndex::deleteNode(IndexKey* bool doingDIHash = ( (index->database->configuration->useDeferredIndexHash) && (INDEX_IS_UNIQUE(index->type))); - Sync syncHash(&index->syncDIHash, "DeferredIndex::deleteNode"); + Sync syncHash(&index->syncDIHash, "DeferredIndex::deleteNode(1)"); if (doingDIHash) syncHash.lock(Exclusive); - Sync sync(&syncObject, "DeferredIndex::deleteNode"); + Sync sync(&syncObject, "DeferredIndex::deleteNode(2)"); sync.lock(Exclusive); DIBucket *buckets[DEFERRED_INDEX_MAX_LEVELS]; @@ -823,7 +825,7 @@ void DeferredIndex::detachIndex(void) void DeferredIndex::detachTransaction(void) { - Sync sync(&syncObject, "DeferredIndex::detachIndex"); + Sync sync(&syncObject, "DeferredIndex::detachTransaction"); sync.lock(Exclusive); transaction = NULL; @@ -838,7 +840,7 @@ void DeferredIndex::detachTransaction(vo else sync.unlock(); - delete this; + releaseRef(); } void DeferredIndex::chill(Dbb *dbb) @@ -874,3 +876,16 @@ DINode* DeferredIndex::findMinValue(void { return NULL; } + +void DeferredIndex::addRef() +{ + INTERLOCKED_INCREMENT (useCount); +} + +void DeferredIndex::releaseRef() +{ + INTERLOCKED_DECREMENT(useCount); + + if (useCount == 0) + delete this; +} \ No newline at end of file === modified file 'storage/falcon/DeferredIndex.h' --- a/storage/falcon/DeferredIndex.h 2008-06-08 06:52:51 +0000 +++ b/storage/falcon/DeferredIndex.h 2008-07-25 18:07:24 +0000 @@ -102,6 +102,7 @@ public: DINode* findMinValue(void); SyncObject syncObject; + volatile INTERLOCK_TYPE useCount; DeferredIndex *next; DeferredIndex *prior; DeferredIndex *nextInTransaction; @@ -123,6 +124,8 @@ public: uint64 virtualOffset; // virtual offset into the serial log where this DI was flushed. uint64 virtualOffsetAtEnd; SerialLogWindow *window; + void addRef(); + void releaseRef(); }; #endif === modified file 'storage/falcon/Gopher.cpp' --- a/storage/falcon/Gopher.cpp 2008-07-09 19:23:23 +0000 +++ b/storage/falcon/Gopher.cpp 2008-07-15 18:57:27 +0000 @@ -39,11 +39,11 @@ void Gopher::gopherThread(void* arg) void Gopher::gopherThread(void) { - Sync deadMan(&log->syncGopher, "Gopher::gopherThread"); + Sync deadMan(&log->syncGopher, "Gopher::gopherThread(1)"); deadMan.lock(Shared); workerThread = Thread::getThread("Gopher::gopherThread"); active = true; - Sync syncPending (&log->pending.syncObject, "Gopher::gopherThread pending"); + Sync syncPending (&log->pending.syncObject, "Gopher::gopherThread(2)"); syncPending.lock(Exclusive); while (!workerThread->shutdownInProgress && !log->finishing) === modified file 'storage/falcon/IO.cpp' --- a/storage/falcon/IO.cpp 2008-07-08 21:36:34 +0000 +++ b/storage/falcon/IO.cpp 2008-07-24 08:45:03 +0000 @@ -133,6 +133,7 @@ IO::IO() forceFsync = true; fatalError = false; memset(writeTypes, 0, sizeof(writeTypes)); + syncObject.setName("IO::syncObject"); } IO::~IO() @@ -184,7 +185,7 @@ bool IO::openFile(const char * name, boo return fileId != -1; } -bool IO::createFile(const char *name, uint64 initialAllocation) +bool IO::createFile(const char *name) { Log::debug("IO::createFile: creating file \"%s\"\n", name); @@ -218,26 +219,6 @@ bool IO::createFile(const char *name, ui #endif #endif - if (initialAllocation) - { - UCHAR *raw = new UCHAR[8192 * 257]; - UCHAR *aligned = (UCHAR*) (((UIPTR) raw + 8191) / 8192 * 8192); - uint size = 8192 * 256; - memset(aligned, 0, size); - uint64 offset = 0; - - for (uint64 remaining = initialAllocation; remaining;) - { - uint n = (int) MIN(remaining, size); - write(offset, n, aligned); - offset += n; - remaining -= n; - } - - delete [] raw; - sync(); - } - return fileId != -1; } === modified file 'storage/falcon/IOx.h' --- a/storage/falcon/IOx.h 2008-07-07 14:00:45 +0000 +++ b/storage/falcon/IOx.h 2008-07-18 08:15:54 +0000 @@ -54,8 +54,8 @@ public: void writeHeader (Hdr *header); int read(int length, UCHAR *buffer); void write(uint32 length, const UCHAR *data); - bool doesFileExist(const char *fileName); - int fileStat(const char *fileName, struct stat *stats = NULL, int *errnum = NULL); + static bool doesFileExist(const char *fileName); + static int fileStat(const char *fileName, struct stat *stats = NULL, int *errnum = NULL); void declareFatalError(); void seek (int pageNumber); void closeFile(); @@ -63,7 +63,7 @@ public: void writePage (Bdb *buffer, int type); void writePages(int32 pageNumber, int length, const UCHAR* data, int type); void readPage (Bdb *page); - bool createFile (const char *name, uint64 initialAllocation); + bool createFile (const char *name); bool openFile (const char *name, bool readOnly); void longSeek(int64 offset); void read(int64 offset, int length, UCHAR* buffer); === modified file 'storage/falcon/Index.cpp' --- a/storage/falcon/Index.cpp 2008-05-07 22:37:18 +0000 +++ b/storage/falcon/Index.cpp 2008-07-25 18:07:24 +0000 @@ -107,6 +107,10 @@ void Index::init(Table *tbl, const char DIHashTable = NULL; DIHashTableCounts = 0; DIHashTableSlotsUsed = 0; + + syncDIHash.setName("Index::syncDIHash"); + syncUnique.setName("Index::syncUnique"); + deferredIndexes.syncObject.setName("Index::deferredIndexes.syncObject"); } Index::~Index() @@ -227,7 +231,7 @@ DeferredIndex *Index::getDeferredIndex(T if (deferredIndexes.count < transaction->deferredIndexCount) { - Sync sync(&deferredIndexes.syncObject, "Index::insert"); + Sync sync(&deferredIndexes.syncObject, "Index::getDeferredIndex(1)"); sync.lock(Shared); for (deferredIndex = deferredIndexes.first; deferredIndex; @@ -270,7 +274,7 @@ DeferredIndex *Index::getDeferredIndex(T // Make a new one and attach to Index and Transaction. - Sync sync(&deferredIndexes.syncObject, "Index::insert"); + Sync sync(&deferredIndexes.syncObject, "Index::getDeferredIndex(2)"); deferredIndex = new DeferredIndex(this, transaction); sync.lock(Exclusive); deferredIndexes.append(deferredIndex); @@ -510,12 +514,14 @@ IndexWalker* Index::positionIndex(IndexK for (DeferredIndex *deferredIndex = deferredIndexes.first; deferredIndex; deferredIndex = deferredIndex->next) if (transaction->visible(deferredIndex->transaction, deferredIndex->transactionId, FOR_WRITING)) { + deferredIndex->addRef(); + if (!indexWalker) { indexWalker = new IndexWalker(this, transaction, searchFlags); indexWalker->addWalker(walkIndex); } - + WalkDeferred *walkDeferred = new WalkDeferred(deferredIndex, transaction, searchFlags, &walkIndex->lowerBound, &walkIndex->upperBound); indexWalker->addWalker(walkDeferred); } @@ -835,7 +841,7 @@ UCHAR Index::getPadByte(void) void Index::detachDeferredIndex(DeferredIndex *deferredIndex) { - Sync sync(&deferredIndexes.syncObject, "Index::detachDeferredIndex"); + Sync sync(&deferredIndexes.syncObject, "Index::detachDeferredIndex(1)"); sync.lock(Exclusive); deferredIndexes.remove(deferredIndex); sync.unlock(); @@ -843,9 +849,9 @@ void Index::detachDeferredIndex(Deferred if ( (database->configuration->useDeferredIndexHash) && (INDEX_IS_UNIQUE(type))) { - Sync syncHash(&syncDIHash, "Index::detachDeferredIndex"); + Sync syncHash(&syncDIHash, "Index::detachDeferredIndex(2)"); syncHash.lock(Exclusive); - Sync syncDI(&deferredIndex->syncObject, "Index::detachDeferredIndex"); + Sync syncDI(&deferredIndex->syncObject, "Index::detachDeferredIndex(3)"); syncDI.lock(Exclusive); DeferredIndexWalker walker(deferredIndex, NULL); === modified file 'storage/falcon/IndexWalker.cpp' --- a/storage/falcon/IndexWalker.cpp 2008-07-14 16:53:51 +0000 +++ b/storage/falcon/IndexWalker.cpp 2008-07-29 11:12:34 +0000 @@ -39,6 +39,8 @@ IndexWalker::IndexWalker(Index *idx, Tra balance = 0; higher = NULL; lower = NULL; + lastRecordNumber = 0; + firstRecord = true; } IndexWalker::~IndexWalker(void) @@ -124,6 +126,18 @@ Record* IndexWalker::getNext(bool lockFo Record* IndexWalker::getValidatedRecord(int32 recordId, bool lockForUpdate) { + // If this is the same recordId as the last record we returned, + // then either we've got a duplicate copy because a deferred + // index has been merged with the main index and we read both + // or we're looking at a version we don't care about. + + if (firstRecord) + firstRecord = false; + else if (recordId == lastRecordNumber) + return NULL; + + + // Fetch record. If it doesn't exist, that's ok. Record *candidate = table->fetch(recordId); @@ -165,7 +179,11 @@ Record* IndexWalker::getValidatedRecord( return NULL; } - + + // remember this record + + lastRecordNumber = recordId; + return record; } @@ -334,7 +352,7 @@ void IndexWalker::rotateLeft(void) root->lower = this; balance -= (1 + MAX(root->balance, 0)); - validate (); +// validate (); root->balance -= (1 - MIN(balance, 0)); RESET_PARENT(root); root->parent = parent; @@ -363,7 +381,7 @@ void IndexWalker::rotateRight(void) root->higher = this; balance += (1 - MIN(root->balance, 0)); - validate (); +// validate (); root->balance += (1 + MAX(balance, 0)); RESET_PARENT(root); root->parent = parent; @@ -454,7 +472,7 @@ void IndexWalker::remove(void) { parent->higher = next; parent->rebalanceUpward(-1); - } + } return; } === modified file 'storage/falcon/IndexWalker.h' --- a/storage/falcon/IndexWalker.h 2008-07-12 21:01:04 +0000 +++ b/storage/falcon/IndexWalker.h 2008-07-28 14:31:20 +0000 @@ -57,9 +57,11 @@ public: UCHAR *key; uint keyLength; int32 recordNumber; + int32 lastRecordNumber; int balance; int searchFlags; bool first; + bool firstRecord; }; #endif === modified file 'storage/falcon/Inversion.cpp' --- a/storage/falcon/Inversion.cpp 2008-02-26 20:18:33 +0000 +++ b/storage/falcon/Inversion.cpp 2008-07-24 08:45:03 +0000 @@ -61,6 +61,7 @@ Inversion::Inversion(Dbb *db) runs = 0; inserting = true; state = 0; + syncObject.setName("Inversion::syncObject"); } Inversion::~Inversion() === modified file 'storage/falcon/LicenseManager.cpp' --- a/storage/falcon/LicenseManager.cpp 2008-03-03 18:40:17 +0000 +++ b/storage/falcon/LicenseManager.cpp 2008-07-15 18:57:27 +0000 @@ -130,7 +130,7 @@ void LicenseManager::initialize() LicenseProduct* LicenseManager::getProduct(const char *name) { int slot = JString::hash (name, HASH_SIZE); - LicenseProduct *product; + LicenseProduct *product; for (product = hashTable [slot]; product; product->collision) if (product->product.equalsNoCase (name)) === modified file 'storage/falcon/Makefile.am' --- a/storage/falcon/Makefile.am 2008-07-19 03:03:39 +0000 +++ b/storage/falcon/Makefile.am 2008-08-07 14:19:54 +0000 @@ -22,9 +22,8 @@ DEFS= @DEFS@ \ -D_REENTRANT -D_PTHREADS -DFALCONDB -DSTORAGE_ENGINE -DNAMESPACE=Nfs INCLUDES= -I$(top_srcdir)/include -I$(top_builddir)/include \ - -I$(top_srcdir)/regex -I$(top_srcdir)/sql \ - -I$(srcdir) -I$(srcdir)/TransformLib @ZLIB_INCLUDES@ \ - @FALCON_SPARC_ASSEMBLY@ + -I$(top_srcdir)/regex -I$(top_srcdir)/sql -I$(srcdir) \ + -I$(srcdir)/TransformLib @ZLIB_INCLUDES@ @FALCON_SPARC_ASSEMBLY@ falcon_headers= Agent.h Alias.h Application.h \ AsciiBlob.h \ @@ -381,7 +380,7 @@ noinst_HEADERS= $(falcon_headers) \ EXTRA_LTLIBRARIES= ha_falcon.la pkglib_LTLIBRARIES= @plugin_falcon_shared_target@ -ha_falcon_la_LDFLAGS= -module -rpath $(pkglibdir) -lstdc++ +ha_falcon_la_LDFLAGS= -module -rpath $(pkglibdir) ha_falcon_la_CXXFLAGS= $(AM_CXXFLAGS) -DMYSQL_DYNAMIC_PLUGIN ha_falcon_la_CFLAGS= $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN ha_falcon_la_LIBADD= TransformLib/libtransform.la === modified file 'storage/falcon/MemMgr.cpp' --- a/storage/falcon/MemMgr.cpp 2008-06-19 15:09:45 +0000 +++ b/storage/falcon/MemMgr.cpp 2008-08-07 14:19:54 +0000 @@ -543,7 +543,9 @@ void* MemMgr::allocateDebug(int size, co { length = ROUNDUP(size, defaultRounding) + OFFSET(MemBlock*, body) + sizeof(long); memory = (MemBlock*) allocRaw(length); + memory->length = length; memory->pool = NULL; + memory->length = length; } #ifdef MEM_DEBUG === modified file 'storage/falcon/RecordLeaf.cpp' --- a/storage/falcon/RecordLeaf.cpp 2008-05-09 19:58:50 +0000 +++ b/storage/falcon/RecordLeaf.cpp 2008-07-15 18:57:27 +0000 @@ -118,7 +118,7 @@ int RecordLeaf::retireRecords (Table *ta { int count = 0; Record **ptr, **end; - Sync sync(&syncObject, "RecordLeaf::retireRecords"); + Sync sync(&syncObject, "RecordLeaf::retireRecords(1)"); sync.lock(Shared); // Get a shared lock to find at least one record to scavenge @@ -134,7 +134,7 @@ int RecordLeaf::retireRecords (Table *ta ++count; else if (record->isVersion()) { - Sync syncPrior(record->getSyncPrior(), "RecordLeaf::retireRecords1"); + Sync syncPrior(record->getSyncPrior(), "RecordLeaf::retireRecords(2)"); syncPrior.lock(Shared); if (record->scavenge(recordScavenge, Shared)) @@ -167,7 +167,7 @@ int RecordLeaf::retireRecords (Table *ta { if (record->isVersion()) { - Sync syncPrior(record->getSyncPrior(), "RecordLeaf::retireRecords2"); + Sync syncPrior(record->getSyncPrior(), "RecordLeaf::retireRecords(3)"); syncPrior.lock(Exclusive); if (record->scavenge(recordScavenge, Exclusive)) === modified file 'storage/falcon/RecordVersion.cpp' --- a/storage/falcon/RecordVersion.cpp 2008-04-27 03:13:23 +0000 +++ b/storage/falcon/RecordVersion.cpp 2008-07-15 18:57:27 +0000 @@ -247,7 +247,7 @@ void RecordVersion::scavenge(TransId tar if (!priorVersion) return; - Sync syncPrior(getSyncPrior(), "RecordVersion::scavenge()-savepoint"); + Sync syncPrior(getSyncPrior(), "RecordVersion::scavenge"); syncPrior.lock(Shared); Record *rec = priorVersion; === modified file 'storage/falcon/RecoveryObjects.cpp' --- a/storage/falcon/RecoveryObjects.cpp 2007-09-20 15:44:25 +0000 +++ b/storage/falcon/RecoveryObjects.cpp 2008-07-24 08:45:03 +0000 @@ -23,6 +23,8 @@ #include "RecoveryObjects.h" #include "RecoveryPage.h" #include "SerialLog.h" +#include "SyncObject.h" +#include "Sync.h" #ifdef _DEBUG #undef THIS_FILE @@ -38,6 +40,8 @@ RecoveryObjects::RecoveryObjects(SerialL { serialLog = log; memset(recoveryObjects, 0, sizeof(recoveryObjects)); + for (int n = 0; n < RPG_HASH_SIZE; n++) + syncArray[n].setName("RecoveryObjects::syncArray"); } RecoveryObjects::~RecoveryObjects() @@ -95,17 +99,24 @@ bool RecoveryObjects::isObjectActive(int return object->pass1Count == object->currentCount; } -RecoveryPage* RecoveryObjects::findRecoveryObject(int objectNumber, int tableSpaceId) -{ - int slot = objectNumber % RPG_HASH_SIZE; - for (RecoveryPage *object = recoveryObjects[slot]; object; object = object->collision) +static inline RecoveryPage * findInHashBucket(RecoveryPage *head, int objectNumber, int tableSpaceId) +{ + for (RecoveryPage *object = head ; object; object = object->collision) if (object->objectNumber == objectNumber && object->tableSpaceId == tableSpaceId) return object; return NULL; } +RecoveryPage* RecoveryObjects::findRecoveryObject(int objectNumber, int tableSpaceId) +{ + int slot = objectNumber % RPG_HASH_SIZE; + Sync sync(&syncArray[slot], "RecoveryObjects::findRecoveryObject"); + sync.lock(Shared); + return findInHashBucket(recoveryObjects[slot], objectNumber, tableSpaceId); +} + void RecoveryObjects::setActive(int objectNumber, int tableSpaceId) { RecoveryPage *object = findRecoveryObject(objectNumber, tableSpaceId); @@ -129,10 +140,25 @@ RecoveryPage* RecoveryObjects::getRecove int slot = objectNumber % RPG_HASH_SIZE; RecoveryPage *object; - for (object = recoveryObjects[slot]; object; object = object->collision) - if (object->objectNumber == objectNumber && object->tableSpaceId == tableSpaceId) - return object; + Sync sync(&syncArray[slot], "RecoveryObjects::getRecoveryObject"); + sync.lock(Shared); + object = findInHashBucket(recoveryObjects[slot], objectNumber, tableSpaceId); + + if(object) + return object; + + // Object not found, insert (need exlusive lock for this) + sync.unlock(); + sync.lock(Exclusive); + + // We need to traverse the collision list once again. Another thread + // may have inserted the entry while current thread was waiting + // for exclusive lock. + object = findInHashBucket(recoveryObjects[slot], objectNumber, tableSpaceId); + if (object) + return object; + // Add object to the start of the collision list object = new RecoveryPage(objectNumber, tableSpaceId); object->collision = recoveryObjects[slot]; recoveryObjects[slot] = object; @@ -143,7 +169,9 @@ RecoveryPage* RecoveryObjects::getRecove void RecoveryObjects::deleteObject(int objectNumber, int tableSpaceId) { int slot = objectNumber % RPG_HASH_SIZE; - + Sync sync(&syncArray[slot], "RecoveryObjects::deleteObject"); + sync.lock(Exclusive); + for (RecoveryPage **ptr = recoveryObjects + slot, *object; (object = *ptr); ptr = &object->collision) if (object->objectNumber == objectNumber && object->tableSpaceId == tableSpaceId) { === modified file 'storage/falcon/RecoveryObjects.h' --- a/storage/falcon/RecoveryObjects.h 2007-09-20 15:44:25 +0000 +++ b/storage/falcon/RecoveryObjects.h 2008-07-18 21:24:52 +0000 @@ -26,6 +26,7 @@ static const int RPG_HASH_SIZE = 101; +#include "SyncObject.h" class RecoveryPage; class SerialLog; @@ -48,6 +49,7 @@ public: SerialLog *serialLog; RecoveryPage *recoveryObjects[RPG_HASH_SIZE]; + SyncObject syncArray[RPG_HASH_SIZE]; }; #endif // !defined(AFX_RECOVERYOBJECTS_H__00C7CE5F_3C33_435C_9521_9C274CAB0581__INCLUDED_) === modified file 'storage/falcon/Repository.cpp' --- a/storage/falcon/Repository.cpp 2008-03-03 18:40:17 +0000 +++ b/storage/falcon/Repository.cpp 2008-07-24 08:45:03 +0000 @@ -61,6 +61,7 @@ Repository::Repository(const char *repos setRollover (rollovers); memset (volumes, 0, sizeof (volumes)); + syncObject.setName("Repository::syncObject"); } Repository::~Repository() @@ -339,7 +340,7 @@ void Repository::setVolume(int volume) void Repository::save() { - Sync syncDDL(&database->syncSysDDL, "Repository::update"); + Sync syncDDL(&database->syncSysDDL, "Repository::save"); syncDDL.lock (Shared); PreparedStatement *statement = database->prepareStatement ( "replace into system.repositories (repositoryName,schema,sequenceName,filename,rollovers,currentVolume)" === modified file 'storage/falcon/RepositoryManager.cpp' --- a/storage/falcon/RepositoryManager.cpp 2007-09-20 15:44:25 +0000 +++ b/storage/falcon/RepositoryManager.cpp 2008-07-24 08:45:03 +0000 @@ -46,6 +46,7 @@ RepositoryManager::RepositoryManager(Dat { database = db; memset (repositories, 0, sizeof (repositories)); + syncObject.setName("RepositoryManager::syncObject"); } RepositoryManager::~RepositoryManager() @@ -113,7 +114,7 @@ Repository* RepositoryManager::getReposi Repository* RepositoryManager::createRepository(const char *name, const char *schema, Sequence *sequence, const char *fileName, int volume, const char *rolloverString) { - Sync sync (&syncObject, "RepositoryManager::getRepository"); + Sync sync (&syncObject, "RepositoryManager::createRepository"); sync.lock (Exclusive); Repository *repository = findRepository (schema, database->getSymbol (name)); @@ -135,7 +136,7 @@ Repository* RepositoryManager::createRep void RepositoryManager::deleteRepository(Repository *repository) { repository->drop(); - Sync sync (&syncObject, "RepositoryManager::getRepository"); + Sync sync (&syncObject, "RepositoryManager::deleteRepository"); sync.lock (Exclusive); int slot = HASH (repository->schema, REPOSITORY_HASH_SIZE); === modified file 'storage/falcon/RepositoryVolume.cpp' --- a/storage/falcon/RepositoryVolume.cpp 2008-03-28 22:44:36 +0000 +++ b/storage/falcon/RepositoryVolume.cpp 2008-07-24 08:45:03 +0000 @@ -75,6 +75,7 @@ RepositoryVolume::RepositoryVolume(Repos lastAccess = 0; rootPage = 0; section = NULL; + syncObject.setName("RepositoryVolume::syncObject"); } RepositoryVolume::~RepositoryVolume() @@ -90,7 +91,7 @@ void RepositoryVolume::storeBlob(BlobRef void RepositoryVolume::storeBlob(int64 blobId, Stream *stream, Transaction *transaction) { - Sync sync (&syncObject, "RepositoryVolume::getBlob"); + Sync sync (&syncObject, "RepositoryVolume::storeBlob"); sync.lock (Shared); while (!isWritable) @@ -216,7 +217,7 @@ void RepositoryVolume::makeWritable() if (isWritable) return; - Sync sync(&syncObject, "RepositoryVolume::getBlob"); + Sync sync(&syncObject, "RepositoryVolume::makeWritable"); sync.lock(Exclusive); if (isWritable) @@ -232,7 +233,7 @@ void RepositoryVolume::makeWritable() void RepositoryVolume::create() { IO::createPath (fileName); - dbb->create(fileName, dbb->pageSize, 0, HdrRepositoryFile, 0, NULL, 0); + dbb->create(fileName, dbb->pageSize, 0, HdrRepositoryFile, 0, NULL); Sync syncDDL(&database->syncSysDDL, "RepositoryVolume::create"); Transaction *transaction = database->getSystemTransaction(); syncDDL.lock(Exclusive); @@ -399,7 +400,7 @@ int64 RepositoryVolume::getRepositorySiz void RepositoryVolume::deleteBlob(int64 blobId, Transaction *transaction) { - Sync sync (&syncObject, "RepositoryVolume::getBlob"); + Sync sync (&syncObject, "RepositoryVolume::deleteBlob"); sync.lock (Shared); while (!isWritable) @@ -464,7 +465,7 @@ void RepositoryVolume::scavenge() if (!isOpen || lastAccess + TIMEOUT > database->timestamp) return; - Sync sync (&syncObject, "RepositoryVolume::getBlob"); + Sync sync (&syncObject, "RepositoryVolume::scavenge"); sync.lock (Exclusive); if (!isOpen || lastAccess + TIMEOUT > database->timestamp) === modified file 'storage/falcon/ResultSet.cpp' --- a/storage/falcon/ResultSet.cpp 2007-09-20 15:44:25 +0000 +++ b/storage/falcon/ResultSet.cpp 2008-07-24 08:45:03 +0000 @@ -96,6 +96,7 @@ void ResultSet::init(int count) javaStatementCount = 0; connection = NULL; database = NULL; + syncObject.setName("ResultSet::syncObject"); } ResultSet::~ResultSet() === modified file 'storage/falcon/Role.cpp' --- a/storage/falcon/Role.cpp 2008-03-03 18:40:17 +0000 +++ b/storage/falcon/Role.cpp 2008-07-24 08:45:03 +0000 @@ -44,6 +44,7 @@ Role::Role(Database *db, const char* rol setName (roleSchema, roleName); useCount = 1; memset (privileges, 0, sizeof (privileges)); + syncObject.setName("Role::syncObject"); } Role::~Role() === modified file 'storage/falcon/SQLParse.cpp' --- a/storage/falcon/SQLParse.cpp 2008-04-05 22:09:17 +0000 +++ b/storage/falcon/SQLParse.cpp 2008-07-17 13:52:17 +0000 @@ -3298,21 +3298,6 @@ Syntax* SQLParse::parseCreateTableSpace( for (;;) { - /*** - if (match("INITIAL_SIZE")) - options.append (makeNode(nod_initial_size, parseNumber())); - else if (match ("EXTENT_SIZE")) - options.append (makeNode(nod_extent_size, parseNumber())); - else if (match ("AUTOEXTEND_SIZE")) - options.append (makeNode(nod_autoextend_size, parseNumber())); - else if (match ("MAX_SIZE")) - options.append (makeNode(nod_max_size, parseNumber())); - else if (match ("NODEGROUP")) - options.append (makeNode(nod_nodegroup, parseNumber())); - else if (match ("WAIT")) - options.append (makeNode(nod_wait, parseNumber())); - else - ***/ if (match ("COMMENT")) options.append (makeNode(nod_comment, parseQuotedString())); else if (match (",")) === modified file 'storage/falcon/SRLCreateTableSpace.cpp' --- a/storage/falcon/SRLCreateTableSpace.cpp 2008-04-05 22:09:17 +0000 +++ b/storage/falcon/SRLCreateTableSpace.cpp 2008-07-17 13:52:17 +0000 @@ -52,14 +52,6 @@ void SRLCreateTableSpace::append(TableSp putInt(len); putData(len, (const UCHAR*) p); putInt(tableSpace->type); - /*** - putInt64(tableSpace->initialSize); - putInt64(tableSpace->extentSize); - putInt64(tableSpace->autoextendSize); - putInt64(tableSpace->maxSize); - putInt(tableSpace->nodegroup); - putInt(tableSpace->wait); - ***/ p = tableSpace->comment; len = (int)strlen(p); putInt(len); @@ -81,27 +73,11 @@ void SRLCreateTableSpace::read() if (control->version >= srlVersion15) { - /*** - initialSize = getInt64(); - extentSize = getInt64(); - autoextendSize= getInt64(); - maxSize = getInt64(); - nodegroup = getInt(); - wait = getInt(); - ***/ commentLength = getInt(); comment = (const char*) getData(commentLength); } else { - /*** - initialSize = 0; - extentSize = 0; - autoextendSize= 0; - maxSize = 0; - nodegroup = 0; - wait = 0; - ***/ commentLength = 0; comment = NULL; } @@ -110,17 +86,7 @@ void SRLCreateTableSpace::read() void SRLCreateTableSpace::pass1() { TableSpaceInit tsInit; - - /*** - tsInit.initialSize = initialSize; - tsInit.extentSize = extentSize; - tsInit.autoextendSize = autoextendSize; - tsInit.maxSize = maxSize; - tsInit.nodegroup = nodegroup; - tsInit.wait = wait; - ***/ tsInit.comment = comment; - log->database->tableSpaceManager->redoCreateTableSpace(tableSpaceId, nameLength, name, filenameLength, filename, type, &tsInit); } === modified file 'storage/falcon/SRLCreateTableSpace.h' --- a/storage/falcon/SRLCreateTableSpace.h 2008-04-05 22:09:17 +0000 +++ b/storage/falcon/SRLCreateTableSpace.h 2008-07-17 13:52:17 +0000 @@ -48,14 +48,6 @@ public: int nameLength; int filenameLength; int type; - /*** - int64 initialSize; - int64 extentSize; - int64 autoExtendSize; - int64 maxSize; - int nodegroup; - int wait; - ***/ const char *comment; int commentLength; }; === modified file 'storage/falcon/SRLDeleteIndex.cpp' --- a/storage/falcon/SRLDeleteIndex.cpp 2007-10-11 12:12:16 +0000 +++ b/storage/falcon/SRLDeleteIndex.cpp 2008-07-15 18:57:27 +0000 @@ -44,10 +44,10 @@ SRLDeleteIndex::~SRLDeleteIndex() void SRLDeleteIndex::append(Dbb *dbb, TransId transId, int id, int idxVersion) { - Sync syncIndexes(&log->syncIndexes, "SRLDeleteIndex::append"); + Sync syncIndexes(&log->syncIndexes, "SRLDeleteIndex::append(1)"); syncIndexes.lock(Exclusive); - START_RECORD(srlDeleteIndex, "SRLDeleteIndex::append"); + START_RECORD(srlDeleteIndex, "SRLDeleteIndex::append(2)"); putInt(dbb->tableSpaceId); log->getTransaction(transId); log->setIndexInactive(id, dbb->tableSpaceId); === modified file 'storage/falcon/SRLPrepare.cpp' --- a/storage/falcon/SRLPrepare.cpp 2007-12-02 20:17:29 +0000 +++ b/storage/falcon/SRLPrepare.cpp 2008-07-24 08:45:03 +0000 @@ -43,7 +43,7 @@ SRLPrepare::~SRLPrepare() void SRLPrepare::append(TransId transId, int xidLength, const UCHAR *xid) { - START_RECORD(srlPrepare, ""); + START_RECORD(srlPrepare, "SRLPrepare::append"); putInt(transId); putInt(xidLength); putData(xidLength, xid); === modified file 'storage/falcon/SRLRollback.cpp' --- a/storage/falcon/SRLRollback.cpp 2007-09-20 15:44:25 +0000 +++ b/storage/falcon/SRLRollback.cpp 2008-07-24 08:45:03 +0000 @@ -40,7 +40,7 @@ SRLRollback::~SRLRollback() void SRLRollback::append(TransId transId, bool updateTransaction) { - START_RECORD(srlRollback, ""); + START_RECORD(srlRollback, "SRLRollback::append"); putInt(transId); uint64 commitBlockNumber = log->nextBlockNumber; SerialLogTransaction *transaction = log->findTransaction(transId); === modified file 'storage/falcon/SRLUpdateIndex.cpp' --- a/storage/falcon/SRLUpdateIndex.cpp 2008-04-12 02:22:50 +0000 +++ b/storage/falcon/SRLUpdateIndex.cpp 2008-07-15 18:57:27 +0000 @@ -40,7 +40,7 @@ SRLUpdateIndex::~SRLUpdateIndex(void) void SRLUpdateIndex::append(DeferredIndex* deferredIndex) { - Sync syncIndexes(&log->syncIndexes, "SRLUpdateIndex::append"); + Sync syncIndexes(&log->syncIndexes, "SRLUpdateIndex::append(1)"); syncIndexes.lock(Shared); Transaction *transaction = deferredIndex->transaction; @@ -57,7 +57,7 @@ void SRLUpdateIndex::append(DeferredInde for (DINode *node = walker.next(); node;) { - START_RECORD(srlUpdateIndex, "SRLUpdateIndex::append"); + START_RECORD(srlUpdateIndex, "SRLUpdateIndex::append(2)"); log->updateIndexUseVector(indexId, tableSpaceId, 1); SerialLogTransaction *srlTrans = log->getTransaction(transaction->transactionId); srlTrans->setTransaction(transaction); === modified file 'storage/falcon/Scheduler.cpp' --- a/storage/falcon/Scheduler.cpp 2008-03-05 20:28:53 +0000 +++ b/storage/falcon/Scheduler.cpp 2008-07-24 08:45:03 +0000 @@ -66,6 +66,7 @@ Scheduler::Scheduler(Database *db) events = NULL; useCount = 1; thread = NULL; + syncObject.setName("Scheduler::syncObject"); } Scheduler::~Scheduler() @@ -210,10 +211,10 @@ void Scheduler::start() void Scheduler::updateSchedule(const char *appName, const char *eventName, User *user, const char *schedule) { - Sync syncDDL (&database->syncSysDDL, "Scheduler::updateSchedule(2)"); + Sync syncDDL (&database->syncSysDDL, "Scheduler::updateSchedule(1)"); syncDDL.lock (Exclusive); - Sync syncObj(&syncObject, "Scheduler::updateSchedule"); + Sync syncObj(&syncObject, "Scheduler::updateSchedule(2)"); syncObj.lock(Exclusive); // Ditch old event === modified file 'storage/falcon/SectorBuffer.cpp' --- a/storage/falcon/SectorBuffer.cpp 2008-07-10 19:00:14 +0000 +++ b/storage/falcon/SectorBuffer.cpp 2008-07-24 08:45:03 +0000 @@ -25,6 +25,7 @@ SectorBuffer::SectorBuffer() { activeLength = 0; sectorNumber = -1; + syncObject.setName("SectorBuffer::syncObject"); } SectorBuffer::~SectorBuffer(void) === modified file 'storage/falcon/SectorCache.cpp' --- a/storage/falcon/SectorCache.cpp 2008-06-17 21:00:45 +0000 +++ b/storage/falcon/SectorCache.cpp 2008-07-24 08:45:03 +0000 @@ -46,6 +46,8 @@ SectorCache::SectorCache(int numBuffers, buffer->cache = this; buffer->buffer = p; } + + syncObject.setName("SectorCache::syncObject"); } SectorCache::~SectorCache(void) @@ -56,7 +58,7 @@ SectorCache::~SectorCache(void) void SectorCache::readPage(Bdb* bdb) { - Sync sync(&syncObject, "SectorCache::readPage"); + Sync sync(&syncObject, "SectorCache::readPage(1)"); sync.lock(Shared); int sectorNumber = bdb->pageNumber / pagesPerSector; int slot = sectorNumber % SECTOR_HASH_SIZE; @@ -89,7 +91,7 @@ void SectorCache::readPage(Bdb* bdb) buffer = nextBuffer; nextBuffer = buffer->next; - Sync syncBuffer(&buffer->syncObject, "SectorCache::readPage(3)"); + Sync syncBuffer(&buffer->syncObject, "SectorCache::readPage(4)"); syncBuffer.lock(Exclusive); if (buffer->sectorNumber >= 0) @@ -111,7 +113,7 @@ void SectorCache::readPage(Bdb* bdb) void SectorCache::writePage(Bdb* bdb) { - Sync sync(&syncObject, "SectorCache::writePage"); + Sync sync(&syncObject, "SectorCache::writePage(1)"); sync.lock(Shared); int sectorNumber = bdb->pageNumber / pagesPerSector; int slot = sectorNumber % SECTOR_HASH_SIZE; === modified file 'storage/falcon/SequenceManager.cpp' --- a/storage/falcon/SequenceManager.cpp 2008-03-03 18:40:17 +0000 +++ b/storage/falcon/SequenceManager.cpp 2008-07-24 08:45:03 +0000 @@ -54,6 +54,7 @@ SequenceManager::SequenceManager(Databas { database = db; memset (sequences, 0, sizeof (sequences)); + syncObject.setName("SequenceManager::syncObject"); } SequenceManager::~SequenceManager() === modified file 'storage/falcon/SerialLog.cpp' --- a/storage/falcon/SerialLog.cpp 2008-07-09 19:23:23 +0000 +++ b/storage/falcon/SerialLog.cpp 2008-07-24 08:45:03 +0000 @@ -125,7 +125,9 @@ SerialLog::SerialLog(Database *db, JStri syncIndexes.setName("SerialLog::syncIndexes"); syncGopher.setName("SerialLog::syncGopher"); syncUpdateStall.setName("SerialLog::syncUpdateStall"); - pending.syncObject.setName("SerialLog::pending transactions"); + pending.syncObject.setName("SerialLog::pending.syncObject"); + inactions.syncObject.setName("SerialLog::inactions.syncObject"); + running.syncObject.setName("SerialLog::running.syncObject"); gophers = NULL; wantToSerializeGophers = 0; serializeGophers = 0; @@ -1292,11 +1294,12 @@ bool SerialLog::indexInUse(int indexId, TableSpaceInfo *info = getTableSpaceInfo(tableSpaceId); return info->indexUseVector.get(indexId) > 0; } - +/* int SerialLog::getPageState(int32 pageNumber, int tableSpaceId) { return recoveryPages->getCurrentState(pageNumber, tableSpaceId); } +*/ void SerialLog::redoFreePage(int32 pageNumber, int tableSpaceId) { @@ -1366,7 +1369,7 @@ void SerialLog::reportStatistics(void) void SerialLog::getSerialLogInfo(InfoTable* tableInfo) { - Sync sync(&pending.syncObject, "SerialLog::getSerialLogInfo"); + Sync sync(&pending.syncObject, "SerialLog::getSerialLogInfo(1)"); sync.lock(Shared); int numberTransactions = 0; uint64 minBlockNumber = writeBlock->blockNumber; @@ -1382,7 +1385,7 @@ void SerialLog::getSerialLogInfo(InfoTab int64 delta = writeBlock->blockNumber - minBlockNumber; sync.unlock(); - Sync syncWindows(&syncWrite, "SerialLog::getSerialLogInfo"); + Sync syncWindows(&syncWrite, "SerialLog::getSerialLogInfo(1)"); syncWindows.lock(Shared); int windows = 0; int buffers = 0; @@ -1439,13 +1442,13 @@ void SerialLog::preCommit(Transaction* t if (!serialLogTransaction) { - Sync writeSync(&syncWrite, "SerialLog::preCommit"); + Sync writeSync(&syncWrite, "SerialLog::preCommit(1)"); writeSync.lock(Exclusive); startRecord(); serialLogTransaction = getTransaction(transaction->transactionId); } - Sync sync (&pending.syncObject, "SerialLog::activate"); + Sync sync (&pending.syncObject, "SerialLog::preCommit(2)"); sync.lock(Exclusive); running.remove(serialLogTransaction); pending.append(serialLogTransaction); === modified file 'storage/falcon/SerialLog.h' --- a/storage/falcon/SerialLog.h 2008-07-09 19:23:23 +0000 +++ b/storage/falcon/SerialLog.h 2008-07-24 08:45:03 +0000 @@ -132,7 +132,7 @@ public: bool bumpSectionIncarnation (int sectionId, int tableSpaceId, int state); bool bumpPageIncarnation (int32 pageNumber, int tableSpaceId, int state); - int getPageState(int32 pageNumber, int tableSpaceId); +// int getPageState(int32 pageNumber, int tableSpaceId); void redoFreePage(int32 pageNumber, int tableSpaceId); bool indexInUse(int indexId, int tableSpaceId); === modified file 'storage/falcon/SerialLogFile.cpp' --- a/storage/falcon/SerialLogFile.cpp 2008-07-08 21:36:34 +0000 +++ b/storage/falcon/SerialLogFile.cpp 2008-07-15 18:57:27 +0000 @@ -169,7 +169,7 @@ void SerialLogFile::close() void SerialLogFile::write(int64 position, uint32 length, const SerialLogBlock *data) { uint32 effectiveLength = ROUNDUP(length, sectorSize); - time_t start = database->timestamp; + time_t start = database->timestamp; Priority priority(database->ioScheduler); if (!(position == writePoint || position == 0 || writePoint == 0)) @@ -202,7 +202,7 @@ void SerialLogFile::write(int64 position #if defined(HAVE_PREAD) && !defined(HAVE_BROKEN_PREAD) uint32 n = ::pwrite (handle, data, effectiveLength, position); #else - Sync sync (&syncObject, "IO::pwrite"); + Sync sync (&syncObject, "SerialLogFile::write"); sync.lock (Exclusive); if (position != offset) @@ -244,7 +244,7 @@ void SerialLogFile::write(int64 position uint32 SerialLogFile::read(int64 position, uint32 length, UCHAR *data) { uint32 effectiveLength = ROUNDUP(length, sectorSize); - //Sync syncIO(&database->syncSerialLogIO, "SerialLogFile::read"); + //Sync syncIO(&database->syncSerialLogIO, "SerialLogFile::read(1)"); Priority priority(database->ioScheduler); if (falcon_serial_log_priority) @@ -274,7 +274,7 @@ uint32 SerialLogFile::read(int64 positio #if defined(HAVE_PREAD) && !defined(HAVE_BROKEN_PREAD) int n = ::pread (handle, data, effectiveLength, position); #else - Sync sync(&syncObject, "SerialLogFile::read"); + Sync sync(&syncObject, "SerialLogFile::read(2)"); sync.lock(Exclusive); ASSERT(position < writePoint || writePoint == 0); off_t loc = lseek(handle, position, SEEK_SET); === modified file 'storage/falcon/Server.cpp' --- a/storage/falcon/Server.cpp 2007-09-20 15:44:25 +0000 +++ b/storage/falcon/Server.cpp 2008-07-24 08:45:03 +0000 @@ -72,6 +72,7 @@ Server::Server(Server *server, Protocol protocol = proto; threads = NULL; + syncObject.setName("Server::syncObject"); } Server::Server(int requestedPort, const char *configFileName) === modified file 'storage/falcon/SessionManager.cpp' --- a/storage/falcon/SessionManager.cpp 2007-09-20 15:44:25 +0000 +++ b/storage/falcon/SessionManager.cpp 2008-07-15 18:57:27 +0000 @@ -454,7 +454,7 @@ void SessionManager::purged(Session *ses void SessionManager::removeSession(Session *session) { - Sync sync (&syncObject, "SessionManager::close"); + Sync sync (&syncObject, "SessionManager::removeSession"); sync.lock (Exclusive); // If it's in a queue, take it out now @@ -485,7 +485,7 @@ LicenseToken* SessionManager::waitForLic // If somebody else if waiting, and we're unwilling to // wait, just say no. - Sync sync (&syncObject, "SessionManager::getLicenseToken"); + Sync sync (&syncObject, "SessionManager::waitForLicense"); sync.lock (Exclusive); if (waiting.first && !target) @@ -495,7 +495,7 @@ LicenseToken* SessionManager::waitForLic if (target) { - target->thread = Thread::getThread("SessionManager::getLicenseToken"); + target->thread = Thread::getThread("SessionManager::waitForLicense"); waiting.insert (target); } === modified file 'storage/falcon/Statement.cpp' --- a/storage/falcon/Statement.cpp 2008-07-09 04:38:02 +0000 +++ b/storage/falcon/Statement.cpp 2008-07-24 08:45:03 +0000 @@ -144,6 +144,7 @@ Statement::Statement(Connection *pConnec special = false; active = false; memset (&stats, 0, sizeof (stats)); + syncObject.setName("Statement::syncObject"); } Statement::~Statement() @@ -1959,7 +1960,7 @@ const char* Statement::getName(Syntax * void Statement::connectionClosed() { addRef(); - Sync sync (&syncObject, "Statement::close"); + Sync sync (&syncObject, "Statement::connectionClosed"); sync.lock (Exclusive); /*** @@ -2965,26 +2966,6 @@ void Statement::createTableSpace(Syntax switch (child->type) { - /*** - case nod_initial_size: - tsInit.initial_size = child->getChild(0)->getQuad(); - break; - case nod_extent_size: - tsInit.extent_size = child->getChild(0)->getQuad(); - break; - case nod_autoextend_size: - tsInit.autoextend_size = child->getChild(0)->getQuad(); - break; - case nod_max_size: - tsInit.maxSize = child->getChild(0)->getQuad(); - break; - case nod_nodegroup: - tsInit.nodegroup = child->getChild(0)->getNumber(); - break; - case nod_wait: - tsInit.wait = child->getChild(0)->getNumber(); - break; - ***/ case nod_comment: tsInit.comment = child->getChild(0)->getString(); break; === modified file 'storage/falcon/StorageDatabase.cpp' --- a/storage/falcon/StorageDatabase.cpp 2008-07-09 04:38:02 +0000 +++ b/storage/falcon/StorageDatabase.cpp 2008-07-24 08:45:03 +0000 @@ -100,6 +100,8 @@ StorageDatabase::StorageDatabase(Storage //SyncTest syncTest; //syncTest.test(); } + syncObject.setName("StorageDatabase::syncObject"); + syncTrace.setName("StorageDatabase::syncTrace"); } StorageDatabase::~StorageDatabase(void) @@ -756,10 +758,10 @@ int StorageDatabase::renameTable(Storage ++numberIndexes; } - Sync syncDDL(&database->syncSysDDL, "StorageDatabase::renameTable"); + Sync syncDDL(&database->syncSysDDL, "StorageDatabase::renameTable(1)"); syncDDL.lock(Exclusive); - Sync syncTables(&database->syncTables, "StorageDatabase::renameTable"); + Sync syncTables(&database->syncTables, "StorageDatabase::renameTable(2)"); syncTables.lock(Exclusive); for (int n = firstIndex; n < numberIndexes; ++n) @@ -1206,7 +1208,7 @@ void StorageDatabase::clearTransactions( { #ifdef TRACE_TRANSACTIONS - Sync sync(&traceSyncObject, "StorageDatabase::clearTransactions"); + Sync sync(&syncTrace, "StorageDatabase::clearTransactions"); sync.lock(Exclusive); Statement *statement = masterConnection->createStatement(); statement->execute(traceTable); @@ -1224,7 +1226,7 @@ void StorageDatabase::traceTransaction(i { try { - Sync sync(&traceSyncObject, "StorageDatabase::traceTransaction"); + Sync sync(&syncTrace, "StorageDatabase::traceTransaction"); sync.lock(Exclusive); char buffer [10000]; int length = stream->getSegment(0, sizeof(buffer) - 1, buffer); === modified file 'storage/falcon/StorageDatabase.h' --- a/storage/falcon/StorageDatabase.h 2008-07-09 04:38:02 +0000 +++ b/storage/falcon/StorageDatabase.h 2008-07-24 08:45:03 +0000 @@ -111,7 +111,7 @@ public: StorageDatabase *next; StorageHandler *storageHandler; SyncObject syncObject; - SyncObject traceSyncObject; + SyncObject syncTrace; User *user; PreparedStatement *lookupIndexAlias; PreparedStatement *insertTrace; === modified file 'storage/falcon/StorageHandler.cpp' --- a/storage/falcon/StorageHandler.cpp 2008-07-10 19:00:14 +0000 +++ b/storage/falcon/StorageHandler.cpp 2008-07-31 08:52:32 +0000 @@ -35,6 +35,8 @@ #include "InfoTable.h" #include "CmdGen.h" #include "Dbb.h" +#include "Database.h" +#include "TableSpaceManager.h" #define DICTIONARY_ACCOUNT "mysql" #define DICTIONARY_PW "mysql" @@ -51,7 +53,6 @@ struct StorageSavepoint { int savepoint; }; -extern uint64 falcon_initial_allocation; static const char *createTempSpace = "upgrade tablespace " TEMPORARY_TABLESPACE " filename '" FALCON_TEMPORARY "'"; //static const char *dropTempSpace = "drop tablespace " TEMPORARY_TABLESPACE; @@ -122,6 +123,9 @@ StorageHandler::StorageHandler(int lockS databaseList = NULL; defaultDatabase = NULL; initialized = false; + syncObject.setName("StorageHandler::syncObject"); + hashSyncObject.setName("StorageHandler::hashSyncObject"); + dictionarySyncObject.setName("StorageHandler::dictionarySyncObject"); } StorageHandler::~StorageHandler(void) @@ -191,7 +195,7 @@ void StorageHandler::databaseDropped(Sto if (storageDatabase) { - Sync syncHash(&hashSyncObject, "StorageHandler::dropDatabase"); + Sync syncHash(&hashSyncObject, "StorageHandler::databaseDropped(1)"); int slot = JString::hash(storageDatabase->name, databaseHashSize); syncHash.lock(Exclusive); StorageDatabase **ptr; @@ -214,7 +218,7 @@ void StorageHandler::databaseDropped(Sto storageDatabase->release(); } - Sync sync(&syncObject, "StorageHandler::~dropDatabase"); + Sync sync(&syncObject, "StorageHandler::databaseDropped(2)"); sync.lock(Exclusive); for (int n = 0; n < connectionHashSize; ++n) @@ -424,7 +428,7 @@ StorageDatabase* StorageHandler::getStor void StorageHandler::closeDatabase(const char* path) { - Sync sync(&hashSyncObject, "StorageHandler::getStorageDatabase"); + Sync sync(&hashSyncObject, "StorageHandler::closeDatabase"); int slot = JString::hash(path, databaseHashSize); sync.lock(Exclusive); @@ -464,43 +468,33 @@ Connection* StorageHandler::getDictionar return dictionaryConnection; } -JString StorageHandler::genCreateTableSpace(const char* tableSpaceName, const char* filename, - unsigned long long initialSize, - unsigned long long extentSize, - unsigned long long autoextendSize, - unsigned long long maxSize, - int nodegroup, bool wait, const char* comment) +JString StorageHandler::genCreateTableSpace(const char* tableSpaceName, const char* filename, const char* comment) { CmdGen gen; - /*** - gen.gen("create tablespace \"%s\" filename '%s' initial_size " I64FORMAT " extent_size " I64FORMAT - " autoextend_size " I64FORMAT " max_size " I64FORMAT " nodegroup %d wait %d comment '%s'", - tableSpaceName, filename, initialSize, extentSize, autoextendSize, maxSize, nodegroup, (int)wait, comment ? comment : ""); - ***/ gen.gen("create tablespace \"%s\" filename '%s' comment '%s'", tableSpaceName, filename, comment ? comment : ""); return (gen.getString()); } -int StorageHandler::createTablespace(const char* tableSpaceName, const char* filename, - unsigned long long initialSize, - unsigned long long extentSize, - unsigned long long autoextendSize, - unsigned long long maxSize, - int nodegroup, bool wait, const char* comment) +int StorageHandler::createTablespace(const char* tableSpaceName, const char* filename, const char* comment) { if (!defaultDatabase) initialize(); if (!dictionaryConnection) return StorageErrorTablesSpaceOperationFailed; - - //StorageDatabase *storageDatabase = NULL; + JString tableSpace = JString::upcase(tableSpaceName); - + + TableSpaceManager *tableSpaceManager = + dictionaryConnection->database->tableSpaceManager; + + if (!tableSpaceManager->waitForPendingDrop(tableSpaceName, 10)) + // file still exists after waiting for 10 seconds + return StorageErrorTableSpaceExist; + try { - JString cmd = genCreateTableSpace(tableSpaceName, filename, initialSize, extentSize, - autoextendSize, maxSize, nodegroup, wait, comment); + JString cmd = genCreateTableSpace(tableSpaceName, filename, comment); Sync sync(&dictionarySyncObject, "StorageHandler::createTablespace"); sync.lock(Exclusive); Statement *statement = dictionaryConnection->createStatement(); @@ -543,7 +537,7 @@ int StorageHandler::deleteTablespace(con { CmdGen gen; gen.gen("drop tablespace \"%s\"", tableSpaceName); - Sync sync(&dictionarySyncObject, "StorageHandler::createTablespace"); + Sync sync(&dictionarySyncObject, "StorageHandler::deleteTablespace"); sync.lock(Exclusive); Statement *statement = dictionaryConnection->createStatement(); statement->executeUpdate(gen.getString()); @@ -664,7 +658,7 @@ StorageTableShare* StorageHandler::creat void StorageHandler::addTable(StorageTableShare* table) { int slot = JString::hash(table->pathName, tableHashSize); - Sync sync(&hashSyncObject, "StorageHandler::add"); + Sync sync(&hashSyncObject, "StorageHandler::addTable"); sync.lock(Exclusive); table->collision = tables[slot]; tables[slot] = table; @@ -674,7 +668,7 @@ void StorageHandler::addTable(StorageTab void StorageHandler::removeTable(StorageTableShare* table) { - Sync sync(&hashSyncObject, "StorageHandler::deleteTable"); + Sync sync(&hashSyncObject, "StorageHandler::removeTable"); sync.lock(Exclusive); int slot = JString::hash(table->pathName, tableHashSize); @@ -688,7 +682,7 @@ void StorageHandler::removeTable(Storage StorageConnection* StorageHandler::getStorageConnection(StorageTableShare* tableShare, THD* mySqlThread, int mySqlThdId, OpenOption createFlag) { - Sync sync(&syncObject, "StorageConnection::getStorageConnection"); + Sync sync(&syncObject, "StorageHandler::getStorageConnection"); if (!defaultDatabase) initialize(); @@ -921,7 +915,7 @@ void StorageHandler::getTransactionInfo( void StorageHandler::getSerialLogInfo(InfoTable* infoTable) { - Sync sync(&hashSyncObject, "StorageHandler::getTransactionInfo"); + Sync sync(&hashSyncObject, "StorageHandler::getSerialLogInfo"); sync.lock(Shared); for (StorageDatabase *storageDatabase = databaseList; storageDatabase; storageDatabase = storageDatabase->next) @@ -965,7 +959,7 @@ void StorageHandler::initialize(void) if (initialized) return; - Sync sync(&syncObject, "StorageConnection::initialize"); + Sync sync(&syncObject, "StorageHandler::initialize"); sync.lock(Exclusive); if (initialized) @@ -998,7 +992,7 @@ void StorageHandler::initialize(void) IO::deleteFile(FALCON_TEMPORARY); dictionaryConnection = defaultDatabase->getOpenConnection(); Statement *statement = dictionaryConnection->createStatement(); - JString createTableSpace = genCreateTableSpace(DEFAULT_TABLESPACE, FALCON_USER, falcon_initial_allocation); + JString createTableSpace = genCreateTableSpace(DEFAULT_TABLESPACE, FALCON_USER); statement->executeUpdate(createTableSpace); for (const char **ddl = falconSchema; *ddl; ++ddl) @@ -1047,67 +1041,6 @@ void StorageHandler::dropTempTables(void statement->close(); } -void StorageHandler::getTablesInfo(InfoTable* infoTable) -{ - if (!defaultDatabase) - initialize(); - - if (!dictionaryConnection) - return; - - try - { - PStatement statement = dictionaryConnection->prepareStatement( - "select schema,tablename,tablespace from system.tables where tablespace <> ''"); - RSet resultSet = statement->executeQuery(); - - while (resultSet->next()) - { - - // Parse table and partition name - - const char *pStr = resultSet->getString(2); - char *pTable = NULL; - char *pPart = NULL; - - if (pStr) - { - const int max_buf = 1024; - char buffer[max_buf+1]; - - pTable = buffer; - *pTable = 0; - strncpy(buffer, pStr, (size_t)max_buf); - - char *pBuf = strchr(buffer, '#'); - - if (pBuf) - { - *pBuf = 0; - if ((pPart = strrchr(++pBuf, '#')) != NULL) - pPart++; - } - } - - infoTable->putString(0, resultSet->getString(1)); // database - infoTable->putString(1, (pTable ? pTable : pStr)); // table - infoTable->putString(2, (pPart ? pPart : "")); // partition - infoTable->putString(3, resultSet->getString(3)); // tablespace - infoTable->putString(4, resultSet->getString(2)); // internal name - - //for (int n = 0; n < 3; ++n) - // infoTable->putString(n, resultSet->getString(n + 1)); - - infoTable->putRecord(); - } - - dictionaryConnection->commit(); - } - catch(...) - { - } -} - void StorageHandler::setRecordMemoryMax(uint64 value) { if (dictionaryConnection) === modified file 'storage/falcon/StorageHandler.h' --- a/storage/falcon/StorageHandler.h 2008-04-05 22:09:17 +0000 +++ b/storage/falcon/StorageHandler.h 2008-07-29 10:45:39 +0000 @@ -85,12 +85,7 @@ public: virtual int rollbackByXid(int xidLength, const unsigned char* xis); virtual Connection* getDictionaryConnection(void); - virtual int createTablespace(const char* tableSpaceName, const char* filename, - unsigned long long initialSize = 0, - unsigned long long extentSize = 0, - unsigned long long autoextendSize = 0, - unsigned long long maxSize = 0, - int nodegroup = 0, bool wait = false, const char* comment = NULL); + virtual int createTablespace(const char* tableSpaceName, const char* filename, const char* comment = NULL); virtual int deleteTablespace(const char* tableSpaceName); virtual StorageTableShare* findTable(const char* pathname); @@ -108,7 +103,6 @@ public: virtual void getTransactionSummaryInfo(InfoTable* infoTable); virtual void getTableSpaceInfo(InfoTable* infoTable); virtual void getTableSpaceFilesInfo(InfoTable* infoTable); - virtual void getTablesInfo(InfoTable* infoTable); virtual void setIndexChillThreshold(uint value); virtual void setRecordChillThreshold(uint value); @@ -134,12 +128,7 @@ public: void initialize(void); void dropTempTables(void); void cleanFileName(const char* pathname, char* filename, int filenameLength); - JString genCreateTableSpace(const char* tableSpaceName, const char* filename, - unsigned long long initialSize = 0, - unsigned long long extentSize = 0, - unsigned long long autoextendSize = 0, - unsigned long long maxSize = 0, - int nodegroup = 0, bool wait = false, const char* comment = NULL); + JString genCreateTableSpace(const char* tableSpaceName, const char* filename, const char* comment = NULL); StorageConnection *connections[connectionHashSize]; StorageDatabase *defaultDatabase; === modified file 'storage/falcon/StorageTableShare.cpp' --- a/storage/falcon/StorageTableShare.cpp 2008-07-14 05:27:57 +0000 +++ b/storage/falcon/StorageTableShare.cpp 2008-07-15 18:57:27 +0000 @@ -463,7 +463,7 @@ void StorageTableShare::registerTable(vo try { - Sync sync(&storageHandler->dictionarySyncObject, "StorageTableShare::save"); + Sync sync(&storageHandler->dictionarySyncObject, "StorageTableShare::registerTable"); sync.lock(Exclusive); connection = storageHandler->getDictionaryConnection(); statement = connection->prepareStatement( @@ -494,7 +494,7 @@ void StorageTableShare::registerTable(vo void StorageTableShare::unRegisterTable(void) { - Sync sync(&storageHandler->dictionarySyncObject, "StorageTableShare::unsave"); + Sync sync(&storageHandler->dictionarySyncObject, "StorageTableShare::unRegisterTable"); sync.lock(Exclusive); Connection *connection = storageHandler->getDictionaryConnection(); PreparedStatement *statement = connection->prepareStatement( === modified file 'storage/falcon/SymbolManager.cpp' --- a/storage/falcon/SymbolManager.cpp 2008-06-06 12:34:19 +0000 +++ b/storage/falcon/SymbolManager.cpp 2008-07-24 08:45:03 +0000 @@ -55,6 +55,7 @@ SymbolManager::SymbolManager() sections->next = NULL; next = sections->space; memset (hashTable, 0, sizeof (hashTable)); + syncObject.setName("SymbolManager::syncObject"); } SymbolManager::~SymbolManager() @@ -98,7 +99,7 @@ const char* SymbolManager::getSymbol(con if (section->space <= string && string < section->space + sizeof (section->space)) return string; - Sync sync (&syncObject, "SymbolManager::getSymbol"); + Sync sync (&syncObject, "SymbolManager::getSymbol(1)"); sync.lock (Shared); int value = 0, c; const char *p; @@ -156,7 +157,7 @@ const char* SymbolManager::getString(con if (section->space <= string && string < section->space + sizeof (section->space)) return string; - Sync sync (&syncObject, "SymbolManager::getSymbol"); + Sync sync (&syncObject, "SymbolManager::getString"); sync.lock (Shared); int value = 0, c; const char *p; @@ -218,7 +219,7 @@ bool SymbolManager::isSymbol(const char const char* SymbolManager::getSymbol(const WCString *string) { - Sync sync (&syncObject, "SymbolManager::getSymbol(WC)"); + Sync sync (&syncObject, "SymbolManager::getSymbol(2)"); sync.lock (Shared); int value = 0, c; //int length = Unicode::getUtf8Length(string->count, (UCHAR*) string->string); === modified file 'storage/falcon/Sync.cpp' --- a/storage/falcon/Sync.cpp 2007-10-31 20:06:07 +0000 +++ b/storage/falcon/Sync.cpp 2008-07-24 08:45:03 +0000 @@ -37,7 +37,7 @@ Sync::Sync(SynchronizationObject *obj, c ASSERT (obj); state = None; syncObject = obj; - where = fromWhere; + location = fromWhere; prior = NULL; marked = NULL; } @@ -70,7 +70,7 @@ void Sync::lock(LockType type, int timeo /*** void Sync::lock(LockType type, const char *fromWhere) { - where = fromWhere; + location = fromWhere; lock(type); } ***/ @@ -110,7 +110,7 @@ void Sync::findLocks(LinkedList &threads void Sync::print(const char *label) { LOG_DEBUG ("%s %s state %d (%d) syncObject %p\n", - label, where, state, request, syncObject); + label, location, state, request, syncObject); } void Sync::mark(const char* text) === modified file 'storage/falcon/Sync.h' --- a/storage/falcon/Sync.h 2007-10-31 20:06:07 +0000 +++ b/storage/falcon/Sync.h 2008-07-24 08:45:03 +0000 @@ -28,10 +28,10 @@ class LinkedList; -class Sync +class Sync { public: - Sync(SynchronizationObject *obj, const char *where); + Sync(SynchronizationObject *obj, const char *location); virtual ~Sync(); void print (const char* label); @@ -40,14 +40,14 @@ public: //void print(int level); void setObject (SynchronizationObject *obj); void unlock(); - void lock (LockType type); + void lock(LockType type); void lock(LockType type, int timeout); SynchronizationObject *syncObject; LockType state; LockType request; Sync *prior; - const char *where; + const char *location; const char *marked; void mark(const char* text); }; === modified file 'storage/falcon/SyncObject.cpp' --- a/storage/falcon/SyncObject.cpp 2008-07-08 16:01:41 +0000 +++ b/storage/falcon/SyncObject.cpp 2008-08-01 17:56:28 +0000 @@ -117,7 +117,7 @@ SyncObject::SyncObject() exclusiveCount = 0; waitCount = 0; queueLength = 0; - where = NULL; + location = NULL; name = NULL; objectId = INTERLOCKED_INCREMENT(nextSyncObjectId); @@ -133,9 +133,6 @@ SyncObject::~SyncObject() #ifdef TRACE_SYNC_OBJECTS if (objectId < MAX_SYNC_OBJECTS) syncObjects[objectId] = NULL; - - if (name) - delete [] name; #endif } @@ -146,7 +143,7 @@ void SyncObject::lock(Sync *sync, LockTy #ifdef TRACE_SYNC_OBJECTS if (sync) - where = sync->where; + location = sync->location; #endif // Shared case @@ -313,7 +310,7 @@ void SyncObject::lock(Sync *sync, LockTy #ifdef TRACE_SYNC_OBJECTS if (sync) - where = sync->where; + location = sync->location; #endif if (type == Shared) @@ -979,7 +976,7 @@ void SyncObject::frequentStaller(Thread Sync *lockPending = thread->lockPending; if (sync) - LOG_DEBUG("Frequent stall from %s\n", sync->where); + LOG_DEBUG("Frequent stall from %s\n", sync->location); else LOG_DEBUG("Frequent stall from unknown\n"); @@ -995,9 +992,9 @@ void SyncObject::analyze(Stream* stream) stream->format("Where\tShares\tExclusives\tWaits\tAverage Queue\n"); for (int n = 1; n < MAX_SYNC_OBJECTS; ++n) - if ( (syncObject = syncObjects[n]) && syncObject->where) + if ( (syncObject = syncObjects[n]) && syncObject->location) stream->format("%s\t%d\t%d\t%d\t%d\t\n", - syncObject->where, + syncObject->location, syncObject->sharedCount, syncObject->exclusiveCount, syncObject->waitCount, @@ -1019,7 +1016,7 @@ void SyncObject::dump(void) for (int n = 1; n < MAX_SYNC_OBJECTS; ++n) if ( (syncObject = syncObjects[n]) ) { - const char *name = (syncObject->name) ? syncObject->name : syncObject->where; + const char *name = (syncObject->name) ? syncObject->name : syncObject->location; if (name) fprintf(out, "%s\t%d\t%d\t%d\t%d\t\n", @@ -1044,10 +1041,10 @@ void SyncObject::getSyncInfo(InfoTable* SyncObject *syncObject; for (int index = 1; index < MAX_SYNC_OBJECTS; ++index) - if ( (syncObject = syncObjects[index]) && syncObject->where) + if ( (syncObject = syncObjects[index]) && syncObject->location) { int n = 0; - infoTable->putString(n++, syncObject->where); + infoTable->putString(n++, syncObject->location); infoTable->putInt(n++, syncObject->sharedCount); infoTable->putInt(n++, syncObject->exclusiveCount); infoTable->putInt(n++, syncObject->waitCount); @@ -1060,19 +1057,7 @@ void SyncObject::getSyncInfo(InfoTable* void SyncObject::setName(const char* string) { #ifdef TRACE_SYNC_OBJECTS - if (name) - { - delete [] name; - name = NULL; - } - - if (string) - { - name = new char[strlen(string)+1]; - strcpy(name, string); - } - - //name = string; + name = string; #endif } === modified file 'storage/falcon/SyncObject.h' --- a/storage/falcon/SyncObject.h 2008-06-19 15:09:45 +0000 +++ b/storage/falcon/SyncObject.h 2008-08-01 17:56:28 +0000 @@ -108,8 +108,8 @@ protected: int exclusiveCount; int waitCount; int queueLength; - const char* where; - char* name; + const char* location; + const char* name; #endif }; === modified file 'storage/falcon/SyncTest.cpp' --- a/storage/falcon/SyncTest.cpp 2008-06-30 16:58:45 +0000 +++ b/storage/falcon/SyncTest.cpp 2008-07-15 18:57:27 +0000 @@ -115,10 +115,10 @@ void SyncTest::testThread(void* paramete void SyncTest::testThread(void) { count = 0; - Sync syncStart(&starter, "SyncTest::thread"); + Sync syncStart(&starter, "SyncTest::testThread(1)"); ready = true; syncStart.lock(Shared); - Sync sync(&parent->syncObject, "SyncTest::thread"); + Sync sync(&parent->syncObject, "SyncTest::testThread(2)"); while (!parent->stop) { === modified file 'storage/falcon/Table.cpp' --- a/storage/falcon/Table.cpp 2008-05-21 15:21:46 +0000 +++ b/storage/falcon/Table.cpp 2008-08-01 17:56:28 +0000 @@ -396,10 +396,10 @@ Format* Table::getFormat(int version) if (format->version == version) return format; - Sync syncObj(&syncObject, "Table::getFormat"); + Sync syncObj(&syncObject, "Table::getFormat(1)"); syncObj.lock(Exclusive); - Sync syncDDL(&database->syncSysDDL, "Table::getFormat"); + Sync syncDDL(&database->syncSysDDL, "Table::getFormat(2)"); syncDDL.lock(Shared); PStatement statement = database->prepareStatement( @@ -814,11 +814,11 @@ void Table::init(int id, const char *sch primaryKey = NULL; formats = NEW Format* [FORMAT_HASH_SIZE]; + static char name[SYNC_VERSIONS_SIZE][64]; for (int n = 0; n < SYNC_VERSIONS_SIZE; n++) { - char name[64]; - sprintf(name, "syncPriorVersions[%02d]", n); - syncPriorVersions[n].setName(name); + sprintf(name[n], "syncPriorVersions[%02d]", n); + syncPriorVersions[n].setName(name[n]); } triggers = NULL; @@ -836,6 +836,8 @@ void Table::init(int id, const char *sch syncTriggers.setName("Table::syncTriggers"); syncScavenge.setName("Table::syncScavenge"); syncAlter.setName("Table::syncAlter"); + for (int n = 0; n < SYNC_VERSIONS_SIZE; n++) + syncPriorVersions[n].setName("Table::syncPriorVersions"); } Record* Table::fetch(int32 recordNumber) @@ -1227,7 +1229,7 @@ void Table::update(Transaction * transac RecordVersion *record = NULL; bool updated = false; int recordNumber = oldRecord->recordNumber; - Sync scavenge(&syncScavenge, "Table::update(2)"); + Sync scavenge(&syncScavenge, "Table::update(1)"); //scavenge.lock(Shared); try @@ -3064,7 +3066,7 @@ void Table::update(Transaction * transac RecordVersion *record = NULL; bool updated = false; - Sync scavenge(&syncScavenge, "Table::update"); + Sync scavenge(&syncScavenge, "Table::update(2)"); //scavenge.lock(Shared); if (candidate->state == recLock && candidate->getTransaction() == transaction) === modified file 'storage/falcon/TableSpace.cpp' --- a/storage/falcon/TableSpace.cpp 2008-04-05 22:09:17 +0000 +++ b/storage/falcon/TableSpace.cpp 2008-07-17 13:52:17 +0000 @@ -50,15 +50,7 @@ TableSpace::TableSpace(Database *db, con TableSpaceInit spaceInit; TableSpaceInit *init = (tsInit ? tsInit : &spaceInit); - initialSize = init->initialSize; comment = init->comment; - /*** - extentSize = init->extentSize; - autoExtendSize = init->autoExtendSize; - maxSize = init->maxSize; - nodegroup = init->nodegroup; - wait = init->wait; - ***/ } TableSpace::~TableSpace() @@ -132,7 +124,7 @@ void TableSpace::open() void TableSpace::create() { dbb->createPath(filename); - dbb->create(filename, dbb->pageSize, 0, HdrTableSpace, 0, NULL, initialSize); + dbb->create(filename, dbb->pageSize, 0, HdrTableSpace, 0, NULL); active = true; dbb->flush(); } @@ -169,14 +161,6 @@ void TableSpace::save(void) statement->setInt(n++, tableSpaceId); statement->setString(n++, filename); statement->setInt(n++, type); - /*** - statement->setLong(n++, initialSize); - statement->setLong(n++, extentSize); - statement->setLong(n++, autoExtendSize); - statement->setLong(n++, maxSize); - statement->setInt(n++, nodegroup); - statement->setInt(n++, wait); - ***/ statement->setString(n++, comment); statement->executeUpdate(); needSave = false; === modified file 'storage/falcon/TableSpace.h' --- a/storage/falcon/TableSpace.h 2008-04-05 22:09:17 +0000 +++ b/storage/falcon/TableSpace.h 2008-07-17 13:52:17 +0000 @@ -29,17 +29,8 @@ static const int TABLESPACE_TYPE_REPOSIT struct TableSpaceInit { - int64 initialSize; JString comment; - TableSpaceInit(): initialSize(0), comment("") {} - /*** - int64 extentSize; - int64 autoExtendSize; - int64 maxSize; - int nodegroup; - int wait; - TableSpaceInit(): initialSize(0), extentSize(0), autoExtendSize(0), maxSize(0), nodegroup(0), wait(0), comment("") {} - ***/ + TableSpaceInit(): comment("") {} }; class Dbb; @@ -75,14 +66,6 @@ public: bool active; bool needSave; - int64 initialSize; - /*** - int64 extentSize; - int64 autoExtendSize; - int64 maxSize; - int nodegroup; - int wait; - ***/ JString comment; }; === modified file 'storage/falcon/TableSpaceManager.cpp' --- a/storage/falcon/TableSpaceManager.cpp 2008-07-09 19:23:23 +0000 +++ b/storage/falcon/TableSpaceManager.cpp 2008-07-24 08:45:03 +0000 @@ -59,6 +59,7 @@ TableSpaceManager::TableSpaceManager(Dat memset(idHash, 0, sizeof(nameHash)); tableSpaces = NULL; pendingDrops = 0; + syncObject.setName("TableSpaceManager::syncObject"); } TableSpaceManager::~TableSpaceManager() @@ -86,7 +87,7 @@ void TableSpaceManager::add(TableSpace * TableSpace* TableSpaceManager::findTableSpace(const char *name) { - Sync syncObj(&syncObject, "TableSpaceManager::findTableSpace"); + Sync syncObj(&syncObject, "TableSpaceManager::findTableSpace(1)"); syncObj.lock(Shared); TableSpace *tableSpace; @@ -101,7 +102,7 @@ TableSpace* TableSpaceManager::findTable if (tableSpace->name == name) return tableSpace; - Sync syncDDL(&database->syncSysDDL, "TableSpaceManager::findTableSpace"); + Sync syncDDL(&database->syncSysDDL, "TableSpaceManager::findTableSpace(2)"); syncDDL.lock(Shared); PStatement statement = database->prepareStatement( @@ -117,14 +118,6 @@ TableSpace* TableSpaceManager::findTable int type = TABLESPACE_TYPE_TABLESPACE; // type (forced) TableSpaceInit tsInit; - /*** - tsInit.initialSize = resultSet->getLong(n++); - tsInit.extentSize = resultSet->getLong(n++); - tsInit.autoExtendSize = resultSet->getLong(n++); - tsInit.maxSize = resultSet->getLong(n++); - tsInit.nodegroup = resultSet->getInt(n++); - tsInit.wait = resultSet->getInt(n++); - ***/ tsInit.comment = resultSet->getString(n++); // comment tableSpace = new TableSpace(database, name, id, fileName, type, &tsInit); @@ -170,32 +163,10 @@ TableSpace* TableSpaceManager::createTab TableSpace *tableSpace = new TableSpace(database, name, id, fileName, type, tsInit); - if (!repository) + if (!repository && IO::doesFileExist(fileName)) { - bool fileExists; - - // Check if table space file already exists. - // Take into account, that tablespace might have been already dropped - // by another transaction, yet file can still be present on the disk, - // if log record is not yet fully committed by the gopher thread). - // So we'll wait for a few seconds if there are pending drops and - // tablespace file exists. - - for (int i=0; i < 10; i++) - { - fileExists = tableSpace->dbb->doesFileExist(fileName); - - if (fileExists && pendingDrops > 0) - Thread::getThread("TableSpaceManager::createTableSpace")->sleep(1000); - else - break; - } - - if (fileExists) - { - delete tableSpace; - throw SQLError(TABLESPACE_DATAFILE_EXIST_ERROR, "table space file name \"%s\" already exists\n", fileName); - } + delete tableSpace; + throw SQLError(TABLESPACE_DATAFILE_EXIST_ERROR, "table space file name \"%s\" already exists\n", fileName); } try @@ -239,21 +210,9 @@ void TableSpaceManager::bootstrap(int se p = EncodedDataStream::decode(p, &fileName, true); p = EncodedDataStream::decode(p, &type, true); /*** - p = EncodedDataStream::decode(p, &initialSize, true); - p = EncodedDataStream::decode(p, &extentSsize, true); - p = EncodedDataStream::decode(p, &autoExtendSize, true); - p = EncodedDataStream::decode(p, &maxSize, true); - p = EncodedDataStream::decode(p, &nodegroup, true); - p = EncodedDataStream::decode(p, &wait, true); p = EncodedDataStream::decode(p, &comment, true); TableSpaceInit tsInit; - tsInit.initialSize = initialSize.getQuad(); - tsInit.extentSize = extentSize.getQuad(); - tsInit.autoExtendSize = autoExtendSize.getQuad(); - tsInit.maxSize = maxSize.getQuad(); - tsInit.nodegroup = nodegroup.getInt(); - tsInit.wait = wait.getInt(); tsInit.comment = comment.getString(); ***/ @@ -314,10 +273,10 @@ void TableSpaceManager::dropDatabase(voi void TableSpaceManager::dropTableSpace(TableSpace* tableSpace) { - Sync syncObj(&syncObject, "TableSpaceManager::dropTableSpace"); + Sync syncObj(&syncObject, "TableSpaceManager::dropTableSpace(1)"); syncObj.lock(Exclusive); - Sync syncDDL(&database->syncSysDDL, "TableSpaceManager::dropTableSpace"); + Sync syncDDL(&database->syncSysDDL, "TableSpaceManager::dropTableSpace(2)"); syncDDL.lock(Shared); PStatement statement = database->prepareStatement( @@ -542,3 +501,25 @@ void TableSpaceManager::getTableSpaceFil } +// Wait for specified amount of time for a file to be deleted. +// Don't wait if pendingDrops count is 0. +// +// The function returns true, if wait was successfull, i.e file does not exist +//(anymore) +bool TableSpaceManager::waitForPendingDrop(const char *filename, int seconds) +{ + bool fileExists; + + do + { + fileExists = IO::doesFileExist(filename); + if (fileExists && pendingDrops > 0 && seconds-- > 0) + Thread::getThread("TransactionManager::waitForPendingDrop")->sleep(1000); + else + break; + } + while(true); + + return !fileExists; +} + === modified file 'storage/falcon/TableSpaceManager.h' --- a/storage/falcon/TableSpaceManager.h 2008-06-08 22:12:35 +0000 +++ b/storage/falcon/TableSpaceManager.h 2008-07-17 20:38:45 +0000 @@ -62,6 +62,7 @@ public: void reportWrites(void); void redoCreateTableSpace(int id, int nameLength, const char* name, int fileNameLength, const char* fileName, int type, TableSpaceInit* tsInit); void initialize(void); + bool waitForPendingDrop(const char *filename, int seconds); Database *database; TableSpace *tableSpaces; === modified file 'storage/falcon/Thread.cpp' --- a/storage/falcon/Thread.cpp 2008-06-19 15:09:45 +0000 +++ b/storage/falcon/Thread.cpp 2008-07-24 08:45:03 +0000 @@ -310,7 +310,7 @@ void Thread::validateLocks() { LOG_DEBUG ("thread %d has active locks:\n", thread->threadId); for (Sync *sync = thread->locks; sync; sync = sync->prior) - LOG_DEBUG (" %s\n", sync->where); + LOG_DEBUG (" %s\n", sync->location); } } @@ -381,7 +381,7 @@ void Thread::setLock(Sync *sync) ASSERT (sync->request == Shared || sync->request == Exclusive); sync->prior = locks; locks = sync; - where = locks->where; + where = locks->location; } void Thread::clearLock(Sync *sync) @@ -396,7 +396,7 @@ void Thread::clearLock(Sync *sync) if ( (locks = sync->prior) ) { ASSERT (locks->state == Shared || locks->state == Exclusive); - where = locks->where; + where = locks->location; } } @@ -467,8 +467,8 @@ void Thread::print(const char *label) const char* Thread::getWhere() { - if (lockPending && lockPending->where) - return lockPending->where; + if (lockPending && lockPending->location) + return lockPending->location; return ""; } === modified file 'storage/falcon/Threads.cpp' --- a/storage/falcon/Threads.cpp 2007-09-20 15:44:25 +0000 +++ b/storage/falcon/Threads.cpp 2008-07-24 08:45:03 +0000 @@ -46,6 +46,7 @@ Threads::Threads(Threads *parentThreads, threadsActive = 0; firstPending = NULL; lastPending = NULL; + syncObject.setName("Threads::syncObject"); } Threads::~Threads() === modified file 'storage/falcon/Transaction.cpp' --- a/storage/falcon/Transaction.cpp 2008-07-11 10:23:03 +0000 +++ b/storage/falcon/Transaction.cpp 2008-07-31 10:04:30 +0000 @@ -95,7 +95,7 @@ Transaction::Transaction(Connection *cnc void Transaction::initialize(Connection* cnct, TransId seq) { - Sync sync(&syncObject, "Transaction::initialize"); + Sync sync(&syncObject, "Transaction::initialize(1)"); sync.lock(Exclusive); ASSERT(savePoints == NULL); ASSERT(freeSavePoints == NULL); @@ -155,7 +155,7 @@ void Transaction::initialize(Connection* startTime = database->deltaTime; blockingRecord = NULL; - thread = Thread::getThread("Transaction::init"); + thread = Thread::getThread("Transaction::initialize"); syncActive.lock(NULL, Exclusive); Transaction *oldest = transactionManager->findOldest(); oldestActive = (oldest) ? oldest->transactionId : transactionId; @@ -174,7 +174,7 @@ void Transaction::initialize(Connection* !transaction->systemTransaction && transaction->transactionId < transactionId) { - Sync syncDependency(&transaction->syncObject, "Transaction::initialize"); + Sync syncDependency(&transaction->syncObject, "Transaction::initialize(2)"); syncDependency.lock(Shared); if (transaction->isActive() && @@ -254,7 +254,7 @@ void Transaction::commit() if (state == Active) { - Sync sync(&syncIndexes, "Transaction::commit"); + Sync sync(&syncIndexes, "Transaction::commit(1)"); sync.lock(Shared); for (DeferredIndex *deferredIndex= deferredIndexes; deferredIndex; @@ -290,19 +290,21 @@ void Transaction::commit() releaseDependencies(); database->flushInversion(this); - Sync syncActiveTransactions(&transactionManager->activeTransactions.syncObject, "Transaction::commit"); - syncActiveTransactions.lock(Exclusive); - Sync syncCommitted(&transactionManager->committedTransactions.syncObject, "Transaction::commit"); + Sync syncCommitted(&transactionManager->committedTransactions.syncObject, "Transaction::commit(2)"); syncCommitted.lock(Exclusive); + Sync syncActiveTransactions(&transactionManager->activeTransactions.syncObject, "Transaction::commit(3)"); + syncActiveTransactions.lock(Exclusive); transactionManager->activeTransactions.remove(this); syncActiveTransactions.unlock(); for (RecordVersion *record = firstRecord; record; record = record->nextInTrans) + { if (!record->getPriorVersion()) ++record->format->table->cardinality; - else if (record->state == recDeleted && record->format->table->cardinality > 0) + if (record->state == recDeleted && record->format->table->cardinality > 0) --record->format->table->cardinality; + } transactionManager->committedTransactions.append(this); syncCommitted.unlock(); database->commit(this); @@ -333,7 +335,7 @@ void Transaction::commitNoUpdates(void) if (deferredIndexes) { - Sync sync(&syncIndexes, "Transaction::commitNoUpdates"); + Sync sync(&syncIndexes, "Transaction::commitNoUpdates(1)"); sync.lock(Exclusive); releaseDeferredIndexes(); } @@ -341,7 +343,7 @@ void Transaction::commitNoUpdates(void) if (hasLocks) releaseRecordLocks(); - Sync syncActiveTransactions(&transactionManager->activeTransactions.syncObject, "Transaction::commitNoUpdates"); + Sync syncActiveTransactions(&transactionManager->activeTransactions.syncObject, "Transaction::commitNoUpdates(2)"); syncActiveTransactions.lock(Shared); releaseDependencies(); @@ -352,7 +354,7 @@ void Transaction::commitNoUpdates(void) xidLength = 0; } - Sync sync(&syncObject, "Transaction::commitNoUpdates"); + Sync sync(&syncObject, "Transaction::commitNoUpdates(3)"); sync.lock(Exclusive); if (dependencies) @@ -379,7 +381,7 @@ void Transaction::rollback() if (deferredIndexes) { - Sync sync(&syncIndexes, "Transaction::rollback"); + Sync sync(&syncIndexes, "Transaction::rollback(1)"); sync.lock(Exclusive); releaseDeferredIndexes(); } @@ -445,7 +447,7 @@ void Transaction::rollback() xidLength = 0; } - Sync syncActiveTransactions (&transactionManager->activeTransactions.syncObject, "Transaction::rollback"); + Sync syncActiveTransactions (&transactionManager->activeTransactions.syncObject, "Transaction::rollback(2)"); syncActiveTransactions.lock (Exclusive); ++transactionManager->rolledBack; @@ -982,7 +984,7 @@ State Transaction::waitForTransaction(Tr TransactionManager *transactionManager = database->transactionManager; Sync syncActiveTransactions(&transactionManager->activeTransactions.syncObject, - "Transaction::waitForTransaction"); + "Transaction::waitForTransaction(1)"); syncActiveTransactions.lock(Shared); if (!transaction) @@ -1058,7 +1060,7 @@ void Transaction::waitForTransaction() } ***/ - Sync sync(&syncActive, "Transaction::waitForTransaction"); + Sync sync(&syncActive, "Transaction::waitForTransaction(2)"); sync.lock(Shared, falcon_lock_wait_timeout * 1000); } === modified file 'storage/falcon/Transaction.h' --- a/storage/falcon/Transaction.h 2008-06-16 15:39:33 +0000 +++ b/storage/falcon/Transaction.h 2008-07-24 08:45:03 +0000 @@ -168,9 +168,9 @@ public: bool writePending; bool pendingPageWrites; bool hasLocks; + SyncObject syncObject; SyncObject syncActive; SyncObject syncIndexes; - SyncObject syncObject; SyncObject syncSavepoints; uint64 totalRecordData; // total bytes of record data for this transaction (unchilled + thawed) uint32 totalRecords; // total record count === modified file 'storage/falcon/TransactionManager.cpp' --- a/storage/falcon/TransactionManager.cpp 2008-06-17 18:34:46 +0000 +++ b/storage/falcon/TransactionManager.cpp 2008-07-24 08:45:03 +0000 @@ -52,6 +52,8 @@ TransactionManager::TransactionManager(D rolledBackTransaction->state = RolledBack; rolledBackTransaction->inList = false; syncObject.setName("TransactionManager::syncObject"); + activeTransactions.syncObject.setName("TransactionManager::activeTransactions"); + committedTransactions.syncObject.setName("TransactionManager::committedTransactions"); } TransactionManager::~TransactionManager(void) @@ -69,7 +71,7 @@ TransactionManager::~TransactionManager( TransId TransactionManager::findOldestActive() { - Sync syncCommitted(&committedTransactions.syncObject, "TransactionManager::findOldestActive"); + Sync syncCommitted(&committedTransactions.syncObject, "TransactionManager::findOldestActive(1)"); syncCommitted.lock(Shared); TransId oldestActive = transactionSequence; @@ -77,7 +79,7 @@ TransId TransactionManager::findOldestAc oldestActive = MIN(trans->transactionId, oldestActive); syncCommitted.unlock(); - Sync sync(&activeTransactions.syncObject, "TransactionManager::findOldestActive"); + Sync sync(&activeTransactions.syncObject, "TransactionManager::findOldestActive(2)"); sync.lock(Shared); Transaction *oldest = findOldest(); @@ -216,9 +218,9 @@ void TransactionManager::rollbackByXid(i void TransactionManager::print(void) { - Sync sync (&activeTransactions.syncObject, "TransactionManager::print"); + Sync sync (&activeTransactions.syncObject, "TransactionManager::print(1)"); sync.lock (Exclusive); - Sync committedTrans (&committedTransactions.syncObject, "TransactionManager::print"); + Sync committedTrans (&committedTransactions.syncObject, "TransactionManager::print(2)"); committedTrans.lock (Exclusive); Transaction *transaction; Log::debug("Active Transaction:\n"); @@ -235,9 +237,9 @@ void TransactionManager::print(void) void TransactionManager::getTransactionInfo(InfoTable* infoTable) { - Sync sync (&activeTransactions.syncObject, "TransactionManager::getTransactionInfo"); + Sync sync (&activeTransactions.syncObject, "TransactionManager::getTransactionInfo(1)"); sync.lock (Exclusive); - Sync committedTrans (&committedTransactions.syncObject, "TransactionManager::getTransactionInfo"); + Sync committedTrans (&committedTransactions.syncObject, "TransactionManager::getTransactionInfo(2)"); committedTrans.lock (Exclusive); Transaction *transaction; @@ -250,7 +252,7 @@ void TransactionManager::getTransactionI void TransactionManager::purgeTransactions() { - Sync syncCommitted(&committedTransactions.syncObject, "Transaction::commit"); + Sync syncCommitted(&committedTransactions.syncObject, "Transaction::purgeTransactions"); syncCommitted.lock(Exclusive); // And, while we're at it, check for any fully mature transactions to ditch @@ -276,9 +278,9 @@ void TransactionManager::purgeTransactio void TransactionManager::getSummaryInfo(InfoTable* infoTable) { - Sync sync (&activeTransactions.syncObject, "TransactionManager::getSummaryInfo"); + Sync sync (&activeTransactions.syncObject, "TransactionManager::getSummaryInfo(1)"); sync.lock (Exclusive); - Sync committedTrans (&committedTransactions.syncObject, "TransactionManager::getSummaryInfo"); + Sync committedTrans (&committedTransactions.syncObject, "TransactionManager::getSummaryInfo(2)"); committedTrans.lock (Exclusive); int numberCommitted = committed; int numberRolledBack = rolledBack; @@ -371,7 +373,7 @@ void TransactionManager::expungeTransact Transaction* TransactionManager::findTransaction(TransId transactionId) { - Sync syncActiveTrans(&activeTransactions.syncObject, "TransactionManager::findTransaction"); + Sync syncActiveTrans(&activeTransactions.syncObject, "TransactionManager::findTransaction(1)"); syncActiveTrans.lock(Shared); Transaction *transaction; @@ -392,7 +394,7 @@ Transaction* TransactionManager::findTra void TransactionManager::validateDependencies(void) { - Sync sync(&committedTransactions.syncObject, "TransactionManager::validateDepedendencies"); + Sync sync(&committedTransactions.syncObject, "TransactionManager::validateDepedendencies(1)"); sync.lock(Shared); Transaction *transaction; @@ -401,7 +403,7 @@ void TransactionManager::validateDepende transaction->validateDependencies(false); sync.unlock(); - Sync syncCommitted(&committedTransactions.syncObject, "TransactionManager::validateDepedendencies"); + Sync syncCommitted(&committedTransactions.syncObject, "TransactionManager::validateDepedendencies(2)"); syncCommitted.lock(Shared); for (transaction = committedTransactions.first; transaction; transaction = transaction->next) @@ -412,7 +414,7 @@ void TransactionManager::removeTransacti { if (transaction->state == Committed) { - Sync sync(&committedTransactions.syncObject, "TransactionManager::removeTransaction"); + Sync sync(&committedTransactions.syncObject, "TransactionManager::removeTransaction(1)"); sync.lock(Exclusive); for (Transaction *trans = committedTransactions.first; trans; trans = trans->next) @@ -424,7 +426,7 @@ void TransactionManager::removeTransacti } else { - Sync sync(&activeTransactions.syncObject, "TransactionManager::removeTransaction"); + Sync sync(&activeTransactions.syncObject, "TransactionManager::removeTransaction(2)"); sync.lock(Exclusive); for (Transaction *trans = activeTransactions.first; trans; trans = trans->next) === modified file 'storage/falcon/WalkDeferred.cpp' --- a/storage/falcon/WalkDeferred.cpp 2008-07-14 16:53:51 +0000 +++ b/storage/falcon/WalkDeferred.cpp 2008-07-25 18:07:24 +0000 @@ -16,15 +16,17 @@ #include "Engine.h" #include "WalkDeferred.h" -WalkDeferred::WalkDeferred(DeferredIndex *deferredIndex, Transaction *transaction, int flags, IndexKey *lower, IndexKey *upper) - : IndexWalker(deferredIndex->index, transaction, flags) +WalkDeferred::WalkDeferred(DeferredIndex *deferredIdx, Transaction *transaction, int flags, IndexKey *lower, IndexKey *upper) + : IndexWalker(deferredIdx->index, transaction, flags) { + deferredIndex = deferredIdx; walker.initialize(deferredIndex, lower, flags); node = NULL; } WalkDeferred::~WalkDeferred(void) { + deferredIndex->releaseRef(); } Record* WalkDeferred::getNext(bool lockForUpdate) === modified file 'storage/falcon/WalkDeferred.h' --- a/storage/falcon/WalkDeferred.h 2008-05-07 22:37:18 +0000 +++ b/storage/falcon/WalkDeferred.h 2008-07-25 18:07:24 +0000 @@ -22,13 +22,14 @@ class WalkDeferred : public IndexWalker { public: - WalkDeferred(DeferredIndex *deferredIndex, Transaction *transaction, int flags, IndexKey *lower, IndexKey *upper); + WalkDeferred(DeferredIndex *deferredIdx, Transaction *transaction, int flags, IndexKey *lower, IndexKey *upper); virtual ~WalkDeferred(void); virtual Record* getNext(bool lockForUpdate); DeferredIndexWalker walker; DINode *node; + DeferredIndex *deferredIndex; }; #endif === modified file 'storage/falcon/WalkIndex.cpp' --- a/storage/falcon/WalkIndex.cpp 2008-07-09 21:37:50 +0000 +++ b/storage/falcon/WalkIndex.cpp 2008-07-15 18:57:27 +0000 @@ -88,9 +88,9 @@ int32 WalkIndex::getNextNode(void) recordNumber = node.getNumber(); if (recordNumber >= 0) - return recordNumber; - else if (recordNumber == END_LEVEL) - return -1; + return recordNumber; + else if (recordNumber == END_LEVEL) + return -1; } node.getNext(endNodes); === modified file 'storage/falcon/ha_falcon.cpp' --- a/storage/falcon/ha_falcon.cpp 2008-07-19 03:03:39 +0000 +++ b/storage/falcon/ha_falcon.cpp 2008-08-07 14:19:54 +0000 @@ -83,7 +83,6 @@ static StorageHandler *storageHandler; #undef PARAMETER_BOOL ulonglong falcon_record_memory_max; -ulonglong falcon_initial_allocation; ulonglong falcon_serial_log_file_size; uint falcon_allocation_extent; ulonglong falcon_page_cache_size; @@ -2041,16 +2040,22 @@ int StorageInterface::alter_tablespace(h /* CREATE TABLESPACE tablespace ADD DATAFILE 'file' - USE LOGFILE GROUP logfile_group - [EXTENT_SIZE [=] extent_size] - [INITIAL_SIZE [=] initial_size] - [AUTOEXTEND_SIZE [=] autoextend_size] - [MAX_SIZE [=] max_size] - [NODEGROUP [=] nodegroup_id] - [WAIT] + USE LOGFILE GROUP logfile_group // NDB only + [EXTENT_SIZE [=] extent_size] // Not supported + [INITIAL_SIZE [=] initial_size] // Not supported + [AUTOEXTEND_SIZE [=] autoextend_size] // Not supported + [MAX_SIZE [=] max_size] // Not supported + [NODEGROUP [=] nodegroup_id] // NDB only + [WAIT] // NDB only [COMMENT [=] comment_text] ENGINE [=] engine + + + Parameters EXTENT_SIZE, INITIAL,SIZE, AUTOEXTEND_SIZE and MAX_SIZE are + currently not supported by Falcon. LOGFILE GROUP, NODEGROUP and WAIT are + for NDB only. */ + if (ts_info->data_file_name) { char buff[FN_REFLEN]; @@ -2068,15 +2073,7 @@ int StorageInterface::alter_tablespace(h switch (ts_info->ts_cmd_type) { case CREATE_TABLESPACE: - ret = storageHandler->createTablespace( ts_info->tablespace_name, - ts_info->data_file_name, - ts_info->initial_size, - ts_info->extent_size, - ts_info->autoextend_size, - ts_info->max_size, - ts_info->nodegroup_id, - ts_info->wait_until_completed, - ts_info->ts_comment); + ret = storageHandler->createTablespace( ts_info->tablespace_name, ts_info->data_file_name, ts_info->ts_comment); break; case DROP_TABLESPACE: @@ -3246,48 +3243,6 @@ int NfsPluginHandler::deinitTableSpaceFi //***************************************************************************** // -// FALCON_TABLES -// -//***************************************************************************** - -int NfsPluginHandler::getTablesInfo(THD *thd, TABLE_LIST *tables, COND *cond) -{ - InfoTableImpl infoTable(thd, tables, system_charset_info); - - if (storageHandler) - storageHandler->getTablesInfo(&infoTable); - - return infoTable.error; -} - -ST_FIELD_INFO tablesFieldInfo[]= -{ - {"SCHEMA_NAME", 127, MYSQL_TYPE_STRING, 0, 0, "Schema Name", SKIP_OPEN_TABLE}, - {"TABLE_NAME", 127, MYSQL_TYPE_STRING, 0, 0, "Table Name", SKIP_OPEN_TABLE}, - {"PARTITION", 127, MYSQL_TYPE_STRING, 0, 0, "Partition Name", SKIP_OPEN_TABLE}, - {"TABLESPACE", 127, MYSQL_TYPE_STRING, 0, 0, "Tablespace", SKIP_OPEN_TABLE}, - {"INTERNAL_NAME", 127, MYSQL_TYPE_STRING, 0, 0, "Internal Name", SKIP_OPEN_TABLE}, - {0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE} -}; - -int NfsPluginHandler::initTablesInfo(void *p) -{ - DBUG_ENTER("initTablesInfo"); - ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *)p; - schema->fields_info = tablesFieldInfo; - schema->fill_table = NfsPluginHandler::getTablesInfo; - - DBUG_RETURN(0); -} - -int NfsPluginHandler::deinitTablesInfo(void *p) -{ - DBUG_ENTER("deinitTablesInfo"); - DBUG_RETURN(0); -} - -//***************************************************************************** -// // FALCON_TRANSACTIONS // //***************************************************************************** @@ -3627,11 +3582,6 @@ static MYSQL_SYSVAR_ULONGLONG(record_mem "The maximum size of the record memory cache.", NULL, StorageInterface::updateRecordMemoryMax, LL(250)<<20, 0, (ulonglong) max_memory_address, LL(1)<<20); -static MYSQL_SYSVAR_ULONGLONG(initial_allocation, falcon_initial_allocation, - PLUGIN_VAR_RQCMDARG, // | PLUGIN_VAR_READONLY, - "Initial allocation (in bytes) of falcon user tablespace.", - NULL, NULL, 0, 0, LL(4000000000), LL(1)<<20); - static MYSQL_SYSVAR_ULONGLONG(serial_log_file_size, falcon_serial_log_file_size, PLUGIN_VAR_RQCMDARG, "If serial log file grows larger than this value, it will be truncated when it is reused", @@ -3680,7 +3630,6 @@ static struct st_mysql_sys_var* falconVa MYSQL_SYSVAR(scavenge_schedule), //MYSQL_SYSVAR(debug_mask), MYSQL_SYSVAR(record_memory_max), - MYSQL_SYSVAR(initial_allocation), //MYSQL_SYSVAR(allocation_extent), MYSQL_SYSVAR(page_cache_size), MYSQL_SYSVAR(consistent_read), @@ -3700,7 +3649,6 @@ static st_mysql_information_schema falco static st_mysql_information_schema falcon_serial_log_info = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION}; static st_mysql_information_schema falcon_tablespaces = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION}; static st_mysql_information_schema falcon_tablespace_files = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION}; -static st_mysql_information_schema falcon_tables = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION}; static st_mysql_information_schema falcon_version = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION}; mysql_declare_plugin(falcon) @@ -3897,21 +3845,6 @@ mysql_declare_plugin(falcon) NULL, /* status variables */ NULL, /* system variables */ NULL /* config options */ - }, - - { - MYSQL_INFORMATION_SCHEMA_PLUGIN, - &falcon_tables, - "FALCON_TABLES", - "MySQL AB", - "Falcon Tables.", - PLUGIN_LICENSE_GPL, - NfsPluginHandler::initTablesInfo, /* plugin init */ - NfsPluginHandler::deinitTablesInfo, /* plugin deinit */ - 0x0005, - NULL, /* status variables */ - NULL, /* system variables */ - NULL /* config options */ } mysql_declare_plugin_end; === modified file 'storage/falcon/ha_falcon.h' --- a/storage/falcon/ha_falcon.h 2008-07-09 04:38:02 +0000 +++ b/storage/falcon/ha_falcon.h 2008-07-29 10:45:39 +0000 @@ -253,8 +253,4 @@ public: static int getTableSpaceFilesInfo(THD *thd, TABLE_LIST *tables, COND *cond); static int initTableSpaceFilesInfo(void *p); static int deinitTableSpaceFilesInfo(void *p); - - static int getTablesInfo(THD *thd, TABLE_LIST *tables, COND *cond); - static int initTablesInfo(void *p); - static int deinitTablesInfo(void *p); };