List:Commits« Previous MessageNext Message »
From:klewis Date:January 31 2008 11:57pm
Subject:bk commit into 6.0 tree (klewis:1.2787)
View as plain text  
Below is the list of changes that have just been committed into a local
6.0 repository of . When  does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2008-01-31 16:56:39-06:00, klewis@klewis-mysql. +20 -0
  Changes and a new test case for 34164, Changes for 34086,
  Get test cases current with Falcon

  mysql-test/suite/falcon/r/falcon_bug_22845.result@stripped, 2008-01-31 16:55:49-06:00,
klewis@klewis-mysql. +9 -4
    Get test cases current with Falcon

  mysql-test/suite/falcon/r/falcon_bug_28076.result@stripped, 2008-01-31 16:55:52-06:00,
klewis@klewis-mysql. +20 -14
    Get test cases current with Falcon

  mysql-test/suite/falcon/r/falcon_bug_30878.result@stripped, 2008-01-31 16:55:54-06:00,
klewis@klewis-mysql. +24 -11
    Get test cases current with Falcon

  mysql-test/suite/falcon/r/falcon_bug_34164.result@stripped, 2008-01-31 16:56:29-06:00,
klewis@klewis-mysql. +106 -0
    New test case for 34164

  mysql-test/suite/falcon/r/falcon_bug_34164.result@stripped, 2008-01-31 16:56:29-06:00,
klewis@klewis-mysql. +0 -0

  mysql-test/suite/falcon/r/falcon_deadlock.result@stripped, 2008-01-31 16:55:57-06:00,
klewis@klewis-mysql. +67 -51
    Get test cases current with Falcon

  mysql-test/suite/falcon/r/falcon_options.result@stripped, 2008-01-31 16:55:59-06:00,
klewis@klewis-mysql. +3 -3
    Get test cases current with Falcon

  mysql-test/suite/falcon/t/disabled.def@stripped, 2008-01-31 16:56:01-06:00,
klewis@klewis-mysql. +11 -25
    Get test cases current with Falcon

  mysql-test/suite/falcon/t/falcon_bug_22845.test@stripped, 2008-01-31 16:56:02-06:00,
klewis@klewis-mysql. +27 -9
    Get test cases current with Falcon

  mysql-test/suite/falcon/t/falcon_bug_28076.test@stripped, 2008-01-31 16:56:04-06:00,
klewis@klewis-mysql. +30 -10
    Get test cases current with Falcon

  mysql-test/suite/falcon/t/falcon_bug_30878.test@stripped, 2008-01-31 16:56:06-06:00,
klewis@klewis-mysql. +44 -17
    Get test cases current with Falcon

  mysql-test/suite/falcon/t/falcon_bug_34164.test@stripped, 2008-01-31 16:56:26-06:00,
klewis@klewis-mysql. +89 -0
    New test case for 34164

  mysql-test/suite/falcon/t/falcon_bug_34164.test@stripped, 2008-01-31 16:56:26-06:00,
klewis@klewis-mysql. +0 -0

  mysql-test/suite/falcon/t/falcon_deadlock.test@stripped, 2008-01-31 16:56:08-06:00,
klewis@klewis-mysql. +165 -6
    Get test cases current with Falcon

  mysql-test/suite/falcon/t/falcon_options.test@stripped, 2008-01-31 16:56:10-06:00,
klewis@klewis-mysql. +2 -4
    Get test cases current with Falcon

  storage/falcon/Dbb.cpp@stripped, 2008-01-31 16:56:12-06:00, klewis@klewis-mysql. +15 -5
    Changes for 34086

  storage/falcon/IO.cpp@stripped, 2008-01-31 16:56:14-06:00, klewis@klewis-mysql. +5 -4
    Changes for 34086

  storage/falcon/SQLException.h@stripped, 2008-01-31 16:56:16-06:00, klewis@klewis-mysql. +2
-1
    Changes for 34086

  storage/falcon/StorageHandler.cpp@stripped, 2008-01-31 16:56:18-06:00, klewis@klewis-mysql.
+16 -3
    Changes for 34086

  storage/falcon/StorageHandler.h@stripped, 2008-01-31 16:56:20-06:00, klewis@klewis-mysql. +1
-0
    Changes for 34086

  storage/falcon/StorageTableShare.cpp@stripped, 2008-01-31 16:56:23-06:00,
klewis@klewis-mysql. +2 -0
    Changes for 34086

  storage/falcon/ha_falcon.cpp@stripped, 2008-01-31 16:56:24-06:00, klewis@klewis-mysql. +12
-6
    Changes for 34164

diff -Nrup a/mysql-test/suite/falcon/r/falcon_bug_22845.result
b/mysql-test/suite/falcon/r/falcon_bug_22845.result
--- a/mysql-test/suite/falcon/r/falcon_bug_22845.result	2007-09-20 10:43:04 -05:00
+++ b/mysql-test/suite/falcon/r/falcon_bug_22845.result	2008-01-31 16:55:49 -06:00
@@ -1,16 +1,15 @@
-SET storage_engine = Falcon;
 *** Bug #22845 ***
+SET @@storage_engine = 'Falcon';
 DROP DATABASE IF EXISTS db1;
 CREATE DATABASE db1;
 USE db1;
 # Establish connection conn1
 USE db1;
-SET storage_engine = Falcon;
+SET @@storage_engine = 'Falcon';
 SET @@autocommit = 0;
 # Switch to connection default
 SET @@autocommit = 0;
-CREATE TABLE t1 (a int)
-PARTITION BY LIST (a) (
+CREATE TABLE t1 (a int) PARTITION BY LIST (a) (
 PARTITION p1 VALUES IN (1),
 PARTITION p2 VALUES IN (2),
 PARTITION p3 VALUES IN (null)
@@ -21,8 +20,14 @@ START TRANSACTION;
 INSERT INTO t1 VALUES (2);
 # Switch to connection default
 ALTER TABLE t1 DROP PARTITION p2;
+ERROR HY000: Can't lock file (errno: 212)
 # Switch to connection conn1
 COMMIT;
 # Switch to connection default
+ALTER TABLE t1 DROP PARTITION p2;
+COMMIT;
+SELECT count(*) FROM t1;
+count(*)
+0
 COMMIT;
 DROP DATABASE db1;
diff -Nrup a/mysql-test/suite/falcon/r/falcon_bug_28076.result
b/mysql-test/suite/falcon/r/falcon_bug_28076.result
--- a/mysql-test/suite/falcon/r/falcon_bug_28076.result	2007-09-20 10:43:15 -05:00
+++ b/mysql-test/suite/falcon/r/falcon_bug_28076.result	2008-01-31 16:55:52 -06:00
@@ -1,19 +1,25 @@
-SET storage_engine = Falcon;
 *** Bug #28076 ***
+SET @@storage_engine = 'Falcon';
 DROP TABLE IF EXISTS t1;
-CREATE TABLE t1 (s1 binary(5), s2 varbinary(5));
+CREATE TABLE t1 (
+a binary(5),
+b varbinary(5)
+);
 INSERT INTO t1 VALUES (0x41, 0x41);
-SELECT hex(s1),hex(s2) FROM t1;
-hex(s1)	hex(s2)
+SELECT hex(a),hex(b) FROM t1;
+hex(a)	hex(b)
 4100000000	41
-SELECT hex(s1),hex(s2) FROM t1 WHERE s1 IN (SELECT s2 FROM t1);
-hex(s1)	hex(s2)
-SELECT hex(s1),hex(s2) FROM t1 WHERE s2 IN (SELECT s1 FROM t1);
-hex(s1)	hex(s2)
-CREATE INDEX i1 on t1 (s1);
-CREATE INDEX i2 on t1 (s2);
-SELECT hex(s1),hex(s2) FROM t1 WHERE s1 IN (SELECT s2 FROM t1);
-hex(s1)	hex(s2)
-SELECT hex(s1),hex(s2) FROM t1 WHERE s2 IN (SELECT s1 FROM t1);
-hex(s1)	hex(s2)
+SELECT hex(a),hex(b) FROM t1 WHERE a IN (SELECT b FROM t1);
+hex(a)	hex(b)
+SELECT hex(a),hex(b) FROM t1 WHERE b IN (SELECT a FROM t1);
+hex(a)	hex(b)
+CREATE INDEX i1 on t1 (a);
+CREATE INDEX i2 on t1 (b);
+SELECT hex(a),hex(b) FROM t1 WHERE a IN (SELECT b FROM t1);
+hex(a)	hex(b)
+SELECT hex(a),hex(b) FROM t1 WHERE b IN (SELECT a FROM t1);
+hex(a)	hex(b)
+SELECT count(*) FROM t1;
+count(*)
+1
 DROP TABLE t1;
diff -Nrup a/mysql-test/suite/falcon/r/falcon_bug_30878.result
b/mysql-test/suite/falcon/r/falcon_bug_30878.result
--- a/mysql-test/suite/falcon/r/falcon_bug_30878.result	2007-09-20 10:43:17 -05:00
+++ b/mysql-test/suite/falcon/r/falcon_bug_30878.result	2008-01-31 16:55:54 -06:00
@@ -1,17 +1,30 @@
-drop table if exists t1;
-create table t1 (id int auto_increment, s1 int, primary key (id)) engine=falcon;
-insert into t1 values (null,1);
-insert into t1 values (null,2);
-insert into t1 values (null,3);
-insert into t1 values (null,4);
-insert into t1 values (null,5);
-insert into t1 values (null,6);
-select * from t1;
-id	s1
+*** Bug #30878 ***
+SET @@storage_engine = 'Falcon';
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (
+a int auto_increment,
+b int,
+PRIMARY KEY (a)
+);
+INSERT INTO t1 VALUES (NULL, 1);
+INSERT INTO t1 VALUES (NULL, 2);
+INSERT INTO t1 VALUES (NULL, 3);
+INSERT INTO t1 VALUES (NULL, 4);
+INSERT INTO t1 VALUES (NULL, 5);
+INSERT INTO t1 VALUES (NULL, 6);
+ALTER TABLE t1 PARTITION BY RANGE (a) (
+PARTITION p1 VALUES LESS THAN (3),
+PARTITION p2 VALUES LESS THAN MAXVALUE
+);
+SELECT * FROM t1 ORDER BY b;
+a	b
 1	1
 2	2
 3	3
 4	4
 5	5
 6	6
-alter table t1 partition by range (id) (partition p1 values less than (3), partition p2
values less than maxvalue);
+SELECT count(*) FROM t1;
+count(*)
+6
+DROP TABLE t1;
diff -Nrup a/mysql-test/suite/falcon/r/falcon_bug_34164.result
b/mysql-test/suite/falcon/r/falcon_bug_34164.result
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/falcon/r/falcon_bug_34164.result	2008-01-31 16:56:29 -06:00
@@ -0,0 +1,106 @@
+SET storage_engine = Falcon;
+*** Bug #34164 ***
+DROP DATABASE IF EXISTS test2;
+SET GLOBAL FALCON_CONSISTENT_READ=OFF;
+CREATE DATABASE test2;
+USE test2;
+CREATE TABLE t1 (a int primary key, b int) engine=falcon;
+# Establish connection conn1 (user = root)
+USE test2;
+SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
+SHOW VARIABLES LIKE 'tx_isolation';
+Variable_name	Value
+tx_isolation	SERIALIZABLE
+SHOW VARIABLES LIKE 'falcon_consistent_read';
+Variable_name	Value
+falcon_consistent_read	OFF
+START TRANSACTION;
+SELECT * FROM t1;
+a	b
+Warnings:
+Warning	1568	Falcon does not support SERIALIZABLE ISOLATION, using REPEATABLE READ
instead.
+INSERT INTO t1 VALUES (1,1);
+Warnings:
+Warning	1568	Falcon does not support SERIALIZABLE ISOLATION, using REPEATABLE READ
instead.
+UPDATE t1 SET b = 11 WHERE a = 1;
+COMMIT;
+SELECT * FROM t1;
+a	b
+1	11
+SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+SHOW VARIABLES LIKE 'tx_isolation';
+Variable_name	Value
+tx_isolation	READ-UNCOMMITTED
+SHOW VARIABLES LIKE 'falcon_consistent_read';
+Variable_name	Value
+falcon_consistent_read	OFF
+START TRANSACTION;
+SELECT * FROM t1;
+a	b
+1	11
+Warnings:
+Warning	1568	Falcon does not support READ UNCOMMITTED ISOLATION, using REPEATABLE READ
instead.
+INSERT INTO t1 VALUES (2,2);
+Warnings:
+Warning	1568	Falcon does not support READ UNCOMMITTED ISOLATION, using REPEATABLE READ
instead.
+UPDATE t1 SET b = 22 WHERE a = 2;
+COMMIT;
+SELECT * FROM t1;
+a	b
+1	11
+2	22
+SET GLOBAL FALCON_CONSISTENT_READ=ON;
+# Establish connection conn2 (user = root)
+USE test2;
+SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
+SHOW VARIABLES LIKE 'tx_isolation';
+Variable_name	Value
+tx_isolation	SERIALIZABLE
+SHOW VARIABLES LIKE 'falcon_consistent_read';
+Variable_name	Value
+falcon_consistent_read	ON
+START TRANSACTION;
+SELECT * FROM t1;
+a	b
+1	11
+2	22
+Warnings:
+Warning	1568	Falcon does not support SERIALIZABLE ISOLATION, using REPEATABLE READ
instead.
+INSERT INTO t1 VALUES (3,3);
+Warnings:
+Warning	1568	Falcon does not support SERIALIZABLE ISOLATION, using REPEATABLE READ
instead.
+UPDATE t1 SET b = 33 WHERE a = 3;
+COMMIT;
+SELECT * FROM t1;
+a	b
+1	11
+2	22
+3	3
+SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+SHOW VARIABLES LIKE 'tx_isolation';
+Variable_name	Value
+tx_isolation	READ-UNCOMMITTED
+SHOW VARIABLES LIKE 'falcon_consistent_read';
+Variable_name	Value
+falcon_consistent_read	ON
+START TRANSACTION;
+SELECT * FROM t1;
+a	b
+1	11
+2	22
+3	3
+Warnings:
+Warning	1568	Falcon does not support READ UNCOMMITTED ISOLATION, using REPEATABLE READ
instead.
+INSERT INTO t1 VALUES (4,4);
+Warnings:
+Warning	1568	Falcon does not support READ UNCOMMITTED ISOLATION, using REPEATABLE READ
instead.
+UPDATE t1 SET b = 44 WHERE a = 4;
+COMMIT;
+SELECT * FROM t1;
+a	b
+1	11
+2	22
+3	3
+4	4
+DROP DATABASE test2;
+USE test;
diff -Nrup a/mysql-test/suite/falcon/r/falcon_deadlock.result
b/mysql-test/suite/falcon/r/falcon_deadlock.result
--- a/mysql-test/suite/falcon/r/falcon_deadlock.result	2007-09-20 10:43:18 -05:00
+++ b/mysql-test/suite/falcon/r/falcon_deadlock.result	2008-01-31 16:55:57 -06:00
@@ -1,114 +1,130 @@
 # Establish connection con1 (user=root)
 # Establish connection con2 (user=root)
-drop table if exists t1,t2;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
 # Switch to connection con1
-create table t1 (id integer, x integer) engine=Falcon;
-insert into t1 values(0, 0);
-set autocommit=0;
-SELECT * from t1 where id = 0 FOR UPDATE;
+CREATE TABLE t1 (
+id integer,
+x integer
+);
+INSERT INTO t1 VALUES (0, 0);
+SET @@autocommit = 0;
+SELECT * FROM t1 WHERE id = 0 FOR UPDATE;
 id	x
 0	0
 # Switch to connection con2
-set autocommit=0;
-update t1 set x=2 where id = 0;
+SET @@autocommit = 0;
+UPDATE t1 SET x = 2 WHERE id = 0;
 # Switch to connection con1
-update t1 set x=1 where id = 0;
-select * from t1;
+UPDATE t1 SET x = 1 WHERE id = 0;
+SELECT * FROM t1;
 id	x
 0	1
-commit;
+COMMIT;
 # Switch to connection con2
-commit;
+COMMIT;
 # Switch to connection con1
-select * from t1;
+SELECT * FROM t1;
 id	x
 0	2
-commit;
-drop table t1;
+COMMIT;
+DROP TABLE t1;
 # Switch to connection con1
-create table t1 (id integer, x integer) engine=Falcon;
-create table t2 (b integer, a integer) engine=Falcon;
-insert into t1 values(0, 0), (300, 300);
-insert into t2 values(0, 10), (1, 20), (2, 30);
-commit;
-set autocommit=0;
-select * from t2;
+CREATE TABLE t1 (
+id integer,
+x integer
+);
+CREATE TABLE t2 (
+b integer,
+a integer
+);
+INSERT INTO t1 VALUES (0, 0), (300, 300);
+INSERT INTO t2 VALUES (0, 10), (1, 20), (2, 30);
+COMMIT;
+SELECT * FROM t2;
 b	a
 0	10
 1	20
 2	30
-update t2 set a=100 where b=(SELECT x from t1 where id = b FOR UPDATE);
-select * from t2;
+UPDATE t2 SET a = 100 WHERE b = (SELECT x FROM t1 WHERE id = b FOR UPDATE);
+SELECT * FROM t2;
 b	a
 0	100
 1	20
 2	30
-select * from t1;
+SELECT * FROM t1;
 id	x
 0	0
 300	300
 # Switch to connection con2
-set autocommit=0;
-update t1 set x=2 where id = 0;
+UPDATE t1 SET x = 2 WHERE id = 0;
 # Switch to connection con1
-update t1 set x=1 where id = 0;
-select * from t1;
+UPDATE t1 SET x = 1 WHERE id = 0;
+SELECT * FROM t1;
 id	x
 0	1
 300	300
-commit;
+COMMIT;
 # Switch to connection con2
-commit;
+COMMIT;
 # Switch to connection con1
-select * from t1;
+SELECT * FROM t1;
 id	x
 0	2
 300	300
-commit;
-drop table t1, t2;
-create table t1 (id integer, x integer) engine=Falcon;
-create table t2 (b integer, a integer) engine=Falcon;
-insert into t1 values(0, 0), (300, 300);
-insert into t2 values(0, 0), (1, 20), (2, 30);
-commit;
+COMMIT;
+DROP TABLE t1;
+DROP TABLE t2;
+CREATE TABLE t1 (
+id integer,
+x integer
+);
+CREATE TABLE t2 (
+b integer,
+a integer
+);
+INSERT INTO t1 VALUES (0, 0), (300, 300);
+INSERT INTO t2 VALUES (0, 0), (1, 20), (2, 30);
+COMMIT;
 # Switch to connection con1
-select a,b from t2 UNION SELECT id, x from t1 FOR UPDATE;
+SELECT a, b FROM t2 UNION SELECT id, x FROM t1 FOR UPDATE;
 a	b
 0	0
 20	1
 30	2
 300	300
-select * from t2;
+SELECT * FROM t2;
 b	a
 0	0
 1	20
 2	30
-select * from t1;
+SELECT * FROM t1;
 id	x
 0	0
 300	300
 # Switch to connection con2
-update t2 set a=2 where b = 0;
-select * from t2;
+UPDATE t2 SET a = 2 WHERE b = 0;
+SELECT * FROM t2;
 b	a
 0	2
 1	20
 2	30
-update t1 set x=2 where id = 0;
+UPDATE t1 SET x = 2 WHERE id = 0;
 # Switch to connection con1
-update t1 set x=1 where id = 0;
-select * from t1;
+UPDATE t1 SET x = 1 WHERE id = 0;
+SELECT * FROM t1;
 id	x
 0	1
 300	300
-commit;
+COMMIT;
 # Switch to connection con2
-commit;
+COMMIT;
 # Switch to connection con1
-select * from t1;
+SELECT * FROM t1;
 id	x
 0	2
 300	300
-commit;
+COMMIT;
 # Switch to connection default + disconnect con1 and con2
-drop table t1, t2;
+DROP TABLE t1;
+DROP TABLE t2;
diff -Nrup a/mysql-test/suite/falcon/r/falcon_options.result
b/mysql-test/suite/falcon/r/falcon_options.result
--- a/mysql-test/suite/falcon/r/falcon_options.result	2008-01-04 23:47:26 -06:00
+++ b/mysql-test/suite/falcon/r/falcon_options.result	2008-01-31 16:55:59 -06:00
@@ -68,10 +68,10 @@ SELECT @@GLOBAL.falcon_max_transaction_b
 SELECT @@GLOBAL.falcon_record_memory_max;
 @@GLOBAL.falcon_record_memory_max
 262144000
-SET GLOBAL falcon_record_memory_max = 1073741824;
+SET GLOBAL falcon_record_memory_max = 536870912;
 SELECT @@GLOBAL.falcon_record_memory_max;
 @@GLOBAL.falcon_record_memory_max
-1073741824
+536870912
 SELECT * FROM INFORMATION_SCHEMA.global_variables
 WHERE variable_name LIKE 'falcon%';
 VARIABLE_NAME	VARIABLE_VALUE
@@ -91,7 +91,7 @@ FALCON_MAX_TRANSACTION_BACKLOG	10001
 FALCON_PAGE_CACHE_SIZE	4194304
 FALCON_PAGE_SIZE	4096
 FALCON_RECORD_CHILL_THRESHOLD	5
-FALCON_RECORD_MEMORY_MAX	1073741824
+FALCON_RECORD_MEMORY_MAX	536870912
 FALCON_RECORD_SCAVENGE_FLOOR	50
 FALCON_RECORD_SCAVENGE_THRESHOLD	67
 FALCON_SCAVENGE_SCHEDULE	15,45 * * * * *
diff -Nrup a/mysql-test/suite/falcon/t/disabled.def
b/mysql-test/suite/falcon/t/disabled.def
--- a/mysql-test/suite/falcon/t/disabled.def	2008-01-30 01:57:33 -06:00
+++ b/mysql-test/suite/falcon/t/disabled.def	2008-01-31 16:56:01 -06:00
@@ -10,43 +10,29 @@
 #
 ##############################################################################
 
-handler_falcon      : Bug#28096 2007-01-23 hakank Currently fails
-falcon_deadlock     : Bug#28097 2007-04-25 hakank Currently hangs
 falcon_bug_22144    : Bug#22144 2006-08-24 hakank Get pushbuild green
-falcon_bug_22151    : Bug#22151 2006-08-24 hakank (Get pushbuild green)
+falcon_bug_22151    : Bug#22151 2006-08-24 hakank Get pushbuild green
 falcon_bug_22154    : Bug#22154 2006-11-04 hakank Too long run time for PB
 falcon_bug_22156    : Bug#22156 2006-11-04 hakank Case sensitivity problem
-falcon_bug_22165    : Bug#22165 2006-08-24 hakank (Get pushbuild green)
-falcon_bug_22166    : Bug#22166 2006-08-24 hakank (Get pushbuild green)
+falcon_bug_22165    : Bug#22165 2006-08-24 hakank Get pushbuild green
+falcon_bug_22166    : Bug#22166 2006-08-24 hakank Get pushbuild green
 falcon_bug_22169    : Bug#22169 2006-08-24 hakank Too long run time for PB
 falcon_bug_22182    : Disabled until runtime team provides RENAME DATABASE replacement.
See WL#4030
-falcon_bug_22187    : Bug#22187 2006-08-24 hakank (Get pushbuild green)
-falcon_bug_22189    : Bug#22189 2006-08-24 hakank (Get pushbuild green)
-falcon_bug_22845    : Bug#22845 2006-10-07 hakank Currently hangs
+falcon_bug_22187    : Bug#22187 2006-08-24 hakank Get pushbuild green
+falcon_bug_22189    : Bug#22189 2006-08-24 hakank Get pushbuild green
 falcon_bug_23692    : Bug#23692 2006-10-27 hakank Currently failing
-falcon_bug_24024    : Bug#24024 2006-12-05 ML (Get pushbuild green)
+falcon_bug_24024    : Bug#24024 2006-12-05 ML Get pushbuild green
 falcon_bug_26058    : Bug#26058 2007-05-03 hakank Currently failing
+falcon_bug_26433    : Bug#32697 falcon_bug_26433.test fails randomly
+falcon_bug_27951    : Bug#32731 falcon_bug_27951 fails randomly
 falcon_bug_27997    : Bug#27997 2007-04-21 hakank Currently failing
 falcon_bug_28006    : Bug#28006 2007-08-22 hakank Won't fix, see also Bug#15491
-falcon_bug_28076    : Bug#28076 2007-04-25 klewis Currently failing
-#falcon_bug_28095_I  : Bug#32992 2007-12-19 hakank Currently failing
-#falcon_bug_28095_II : Bug#32992 2007-12-19 hakank Currently failing
 falcon_bug_29246    : Bug#29246 2007-06-21 hakank Currently failing
 falcon_bug_30282    : Bug#30282 2007-08-21 hakank Currently failing
-falcon_bug_30878    : Bug#30878 2007-09-06 cpowers Currently failing (server bug)
 falcon_bug_30480_A  : Bug#30282 2007-09-07 klewis Currently failing
 falcon_bug_30480_B  : Bug#30282 2007-09-07 klewis Currently failing
 falcon_bug_32413    : Bug#32413 2007-11-15 cpowers Does not play nicely with other tests
-falcon_page_size_1  : Bug#32992 2007-12-03 hakank Currently failing
-#falcon_page_size_2  : Bug#32992 2007-12-03 hakank Currently failing
-#falcon_page_size_4  : Bug#32992 2007-12-03 hakank Currently failing
-#falcon_page_size_8  : Bug#32992 2007-12-03 hakank Currently failing
-#falcon_page_size_16  : Bug#32992 2007-12-03 hakank Currently failing
-#falcon_page_size_32  : Bug#32992 2007-12-03 hakank Currently failing
+falcon_deadlock     : Bug#28097 2007-04-25 hakank Currently hangs
+index_merge_falcon  : Bug#32696 index_merge_falcon.test fails
+ps_8falcon          : Bug#32683  Test ps_8falcon fails in 6.0
 read_many_rows_falcon : Bug#23783 2006-10-30 ML Get pushbuild green
-index_merge_falcon    : Bug#32696 index_merge_falcon.test fails
-falcon_bug_26433      : Bug#32697 falcon_bug_26433.test fails randomly
-falcon_bug_27951      : Bug#32731 falcon_bug_27951 fails randomly
-ps_8falcon	    : Bug #32683  	Test ps_8falcon fails in 6.0
-#falcon_read-committed: Bug#32992: falcon_read-committed.test causes a server crash
occasionally
-falcon_ts            : Bug#32993: falcon_ts.test fails sporadically
diff -Nrup a/mysql-test/suite/falcon/t/falcon_bug_22845.test
b/mysql-test/suite/falcon/t/falcon_bug_22845.test
--- a/mysql-test/suite/falcon/t/falcon_bug_22845.test	2007-10-05 07:21:27 -05:00
+++ b/mysql-test/suite/falcon/t/falcon_bug_22845.test	2008-01-31 16:56:02 -06:00
@@ -1,9 +1,15 @@
 --source include/have_falcon.inc
-SET storage_engine = Falcon;
 #
 # Bug #22845: Falcon: hang on partition drop
 #
 --echo *** Bug #22845 ***
+
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
 --disable_warnings
 DROP DATABASE IF EXISTS db1;
 --enable_warnings
@@ -13,21 +19,23 @@ USE db1;
 --echo # Establish connection conn1
 connect (conn1,localhost,root,,);
 USE db1;
-SET storage_engine = Falcon;
+eval SET @@storage_engine = $engine;
 SET @@autocommit = 0;
 
 --echo # Switch to connection default
 connection default;
 SET @@autocommit = 0;
 
-CREATE TABLE t1 (a int)
-  PARTITION BY LIST (a) (
-    PARTITION p1 VALUES IN (1),
-    PARTITION p2 VALUES IN (2),
-    PARTITION p3 VALUES IN (null)
+CREATE TABLE t1 (a int) PARTITION BY LIST (a) (
+  PARTITION p1 VALUES IN (1),
+  PARTITION p2 VALUES IN (2),
+  PARTITION p3 VALUES IN (null)
 );
 START TRANSACTION;
 
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
 --echo # Switch to connection conn1
 connection conn1;
 START TRANSACTION;
@@ -35,7 +43,9 @@ INSERT INTO t1 VALUES (2);
 
 --echo # Switch to connection default
 connection default;
---error ER_GET_ERRMSG 
+# With Falcon we cannot do DDL on objects with
+# pending transactions.
+--error ER_CANT_LOCK
 ALTER TABLE t1 DROP PARTITION p2;
 
 --echo # Switch to connection conn1
@@ -47,7 +57,15 @@ connection default;
 ALTER TABLE t1 DROP PARTITION p2;
 COMMIT;
 
-# Final cleanup.
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+SELECT count(*) FROM t1;
+COMMIT;
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
 connection default;
 disconnect conn1;
 DROP DATABASE db1;
diff -Nrup a/mysql-test/suite/falcon/t/falcon_bug_28076.test
b/mysql-test/suite/falcon/t/falcon_bug_28076.test
--- a/mysql-test/suite/falcon/t/falcon_bug_28076.test	2007-09-28 23:30:37 -05:00
+++ b/mysql-test/suite/falcon/t/falcon_bug_28076.test	2008-01-31 16:56:04 -06:00
@@ -1,23 +1,43 @@
 --source include/have_falcon.inc
-SET storage_engine = Falcon;
 #
 # Bug #28076: Falcon: inconsistent binary/varbinary comparison
 #
 --echo *** Bug #28076 ***
+
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
 --disable_warnings
 DROP TABLE IF EXISTS t1;
 --enable_warnings
 
-CREATE TABLE t1 (s1 binary(5), s2 varbinary(5));
+CREATE TABLE t1 (
+  a binary(5),
+  b varbinary(5)
+);
 INSERT INTO t1 VALUES (0x41, 0x41);
-SELECT hex(s1),hex(s2) FROM t1;
-SELECT hex(s1),hex(s2) FROM t1 WHERE s1 IN (SELECT s2 FROM t1);
-SELECT hex(s1),hex(s2) FROM t1 WHERE s2 IN (SELECT s1 FROM t1);
-CREATE INDEX i1 on t1 (s1);
-CREATE INDEX i2 on t1 (s2);
-SELECT hex(s1),hex(s2) FROM t1 WHERE s1 IN (SELECT s2 FROM t1);
-SELECT hex(s1),hex(s2) FROM t1 WHERE s2 IN (SELECT s1 FROM t1);
 
-# Final cleanup.
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
+SELECT hex(a),hex(b) FROM t1;
+SELECT hex(a),hex(b) FROM t1 WHERE a IN (SELECT b FROM t1);
+SELECT hex(a),hex(b) FROM t1 WHERE b IN (SELECT a FROM t1);
+CREATE INDEX i1 on t1 (a);
+CREATE INDEX i2 on t1 (b);
+SELECT hex(a),hex(b) FROM t1 WHERE a IN (SELECT b FROM t1);
+SELECT hex(a),hex(b) FROM t1 WHERE b IN (SELECT a FROM t1);
+
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+SELECT count(*) FROM t1;
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
 DROP TABLE t1;
 
diff -Nrup a/mysql-test/suite/falcon/t/falcon_bug_30878.test
b/mysql-test/suite/falcon/t/falcon_bug_30878.test
--- a/mysql-test/suite/falcon/t/falcon_bug_30878.test	2007-09-28 23:30:38 -05:00
+++ b/mysql-test/suite/falcon/t/falcon_bug_30878.test	2008-01-31 16:56:06 -06:00
@@ -1,21 +1,48 @@
 --source include/have_falcon.inc
+--source include/have_partition.inc
+#
+# Bug #30878: Partitioning: Crash when alter an auto_increment table to partitioned
+#
+--echo *** Bug #30878 ***
+
+# ----------------------------------------------------- #
+# --- Initialisation                                --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
 --disable_warnings
-drop table if exists t1;
+DROP TABLE IF EXISTS t1;
 --enable_warnings
 
-create table t1 (id int auto_increment, s1 int, primary key (id)) engine=falcon;
-
-insert into t1 values (null,1);
-insert into t1 values (null,2);
-insert into t1 values (null,3);
-insert into t1 values (null,4);
-insert into t1 values (null,5);
-insert into t1 values (null,6);
-
-select * from t1;
-
-alter table t1 partition by range (id) (partition p1 values less than (3), partition p2
values less than maxvalue);
-
-
-
-
+CREATE TABLE t1 (
+  a int auto_increment,
+  b int,
+  PRIMARY KEY (a)
+);
+
+INSERT INTO t1 VALUES (NULL, 1);
+INSERT INTO t1 VALUES (NULL, 2);
+INSERT INTO t1 VALUES (NULL, 3);
+INSERT INTO t1 VALUES (NULL, 4);
+INSERT INTO t1 VALUES (NULL, 5);
+INSERT INTO t1 VALUES (NULL, 6);
+
+# ----------------------------------------------------- #
+# --- Test                                          --- #
+# ----------------------------------------------------- #
+ALTER TABLE t1 PARTITION BY RANGE (a) (
+  PARTITION p1 VALUES LESS THAN (3),
+  PARTITION p2 VALUES LESS THAN MAXVALUE
+);
+
+# ----------------------------------------------------- #
+# --- Check                                         --- #
+# ----------------------------------------------------- #
+SELECT * FROM t1 ORDER BY b;
+SELECT count(*) FROM t1;
+
+# ----------------------------------------------------- #
+# --- Final cleanup                                 --- #
+# ----------------------------------------------------- #
+DROP TABLE t1;
diff -Nrup a/mysql-test/suite/falcon/t/falcon_bug_34164.test
b/mysql-test/suite/falcon/t/falcon_bug_34164.test
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/falcon/t/falcon_bug_34164.test	2008-01-31 16:56:26 -06:00
@@ -0,0 +1,89 @@
+--disable_abort_on_error
+--source include/have_falcon.inc
+
+SET storage_engine = Falcon;
+#
+# Bug #34164: Serializable Transaction asserts
+#
+--echo *** Bug #34164 ***
+--disable_warnings
+DROP DATABASE IF EXISTS test2;
+--enable_warnings
+
+SET GLOBAL FALCON_CONSISTENT_READ=OFF;
+CREATE DATABASE test2;
+USE test2;
+CREATE TABLE t1 (a int primary key, b int) engine=falcon;
+
+--echo # Establish connection conn1 (user = root)
+connect (conn1,localhost,root,,);
+connection conn1;
+USE test2;
+SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
+SHOW VARIABLES LIKE 'tx_isolation';
+SHOW VARIABLES LIKE 'falcon_consistent_read';
+START TRANSACTION;
+SELECT * FROM t1;
+INSERT INTO t1 VALUES (1,1);
+connection default;
+--send UPDATE t1 SET b = 11 WHERE a = 1
+connection conn1;
+COMMIT;
+connection default;
+--reap
+SELECT * FROM t1;
+
+
+connection conn1;
+SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+SHOW VARIABLES LIKE 'tx_isolation';
+SHOW VARIABLES LIKE 'falcon_consistent_read';
+START TRANSACTION;
+SELECT * FROM t1;
+INSERT INTO t1 VALUES (2,2);
+connection default;
+--send UPDATE t1 SET b = 22 WHERE a = 2
+connection conn1;
+COMMIT;
+connection default;
+--reap
+SELECT * FROM t1;
+
+
+SET GLOBAL FALCON_CONSISTENT_READ=ON;
+--echo # Establish connection conn2 (user = root)
+connect (conn2,localhost,root,,);
+connection conn2;
+USE test2;
+SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
+SHOW VARIABLES LIKE 'tx_isolation';
+SHOW VARIABLES LIKE 'falcon_consistent_read';
+START TRANSACTION;
+SELECT * FROM t1;
+INSERT INTO t1 VALUES (3,3);
+connection default;
+UPDATE t1 SET b = 33 WHERE a = 3;
+connection conn2;
+COMMIT;
+SELECT * FROM t1;
+
+connection conn2;
+SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+SHOW VARIABLES LIKE 'tx_isolation';
+SHOW VARIABLES LIKE 'falcon_consistent_read';
+START TRANSACTION;
+SELECT * FROM t1;
+INSERT INTO t1 VALUES (4,4);
+connection default;
+UPDATE t1 SET b = 44 WHERE a = 4;
+connection conn2;
+COMMIT;
+SELECT * FROM t1;
+
+
+# Final cleanup
+connection default;
+disconnect conn1;
+disconnect conn2;
+DROP DATABASE test2;
+USE test;
diff -Nrup a/mysql-test/suite/falcon/t/falcon_deadlock.test
b/mysql-test/suite/falcon/t/falcon_deadlock.test
--- a/mysql-test/suite/falcon/t/falcon_deadlock.test	2007-09-20 10:43:43 -05:00
+++ b/mysql-test/suite/falcon/t/falcon_deadlock.test	2008-01-31 16:56:08 -06:00
@@ -1,9 +1,168 @@
-# This test was derived from innodb_deadlock.test.
-
 -- source include/have_falcon.inc
-let $engine_type = Falcon;
-
-# Can't test this with embedded server
 -- source include/not_embedded.inc
+#
+# This test was derived from innodb_deadlock.test,
+# which sources in include/deadlock.inc.
+#
+# As Falcon has different behavior than InnoDB,
+# we rewrote the parts in question.
+#
+let $engine = Falcon;
+eval SET @@storage_engine = $engine;
+
+--echo # Establish connection con1 (user=root)
+connect (con1,localhost,root,,);
+eval SET @@storage_engine = $engine;
+
+--echo # Establish connection con2 (user=root)
+connect (con2,localhost,root,,);
+eval SET @@storage_engine = $engine;
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
+--enable_warnings
+
+#
+# Testing of FOR UPDATE, first take.
+#
+--echo # Switch to connection con1
+connection con1;
+CREATE TABLE t1 (
+  id integer,
+  x integer
+);
+
+INSERT INTO t1 VALUES (0, 0);
+SET @@autocommit = 0;
+SELECT * FROM t1 WHERE id = 0 FOR UPDATE;
+
+--echo # Switch to connection con2
+connection con2;
+SET @@autocommit = 0;
+
+# The following query should hang because con1 is locking the record
+--send UPDATE t1 SET x = 2 WHERE id = 0;
+--real_sleep 2
+
+--echo # Switch to connection con1
+connection con1;
+UPDATE t1 SET x = 1 WHERE id = 0;
+SELECT * FROM t1;
+COMMIT;
+
+--echo # Switch to connection con2
+connection con2;
+# With Falcon we should get a
+# Record has changed since last read in table 't1' here.
+--error ER_CHECKREAD
+--reap
+ROLLBACK;
+
+--echo # Switch to connection con1
+connection con1;
+SELECT * FROM t1;
+COMMIT;
+
+DROP TABLE t1;
+
+#
+# Testing of FOR UPDATE, second take.
+#
+--echo # Switch to connection con1
+connection con1;
+CREATE TABLE t1 (
+  id integer,
+  x integer
+);
+
+CREATE TABLE t2 (
+  b integer,
+  a integer
+);
+
+INSERT INTO t1 VALUES (0, 0), (300, 300);
+INSERT INTO t2 VALUES (0, 10), (1, 20), (2, 30);
+COMMIT;
+
+SELECT * FROM t2;
+UPDATE t2 SET a = 100 WHERE b = (SELECT x FROM t1 WHERE id = b FOR UPDATE);
+SELECT * FROM t2;
+SELECT * FROM t1;
+
+--echo # Switch to connection con2
+connection con2;
+
+# The following query should hang because con1 is locking the record
+--send UPDATE t1 SET x = 2 WHERE id = 0;
+--real_sleep 2
+
+--echo # Switch to connection con1
+connection con1;
+UPDATE t1 SET x = 1 WHERE id = 0;
+SELECT * FROM t1;
+COMMIT;
+
+--echo # Switch to connection con2
+connection con2;
+--reap
+COMMIT;
+
+--echo # Switch to connection con1
+connection con1;
+SELECT * FROM t1;
+COMMIT;
+
+DROP TABLE t1;
+DROP TABLE t2;
+
+CREATE TABLE t1 (
+  id integer,
+  x integer
+);
+
+CREATE TABLE t2 (
+  b integer,
+  a integer
+);
+
+INSERT INTO t1 VALUES (0, 0), (300, 300);
+INSERT INTO t2 VALUES (0, 0), (1, 20), (2, 30);
+COMMIT;
+
+SELECT a, b FROM t2 UNION SELECT id, x FROM t1 FOR UPDATE;
+SELECT * FROM t2;
+SELECT * FROM t1;
+
+--echo # Switch to connection con2
+connection con2;
+
+# The following query should hang because con1 is locking the record
+UPDATE t2 SET a = 2 WHERE b = 0;
+SELECT * FROM t2;
+--send UPDATE t1 SET x = 2 WHERE id = 0;
+--real_sleep 2
+
+--echo # Switch to connection con1
+connection con1;
+UPDATE t1 SET x = 1 WHERE id = 0;
+SELECT * FROM t1;
+COMMIT;
+
+--echo # Switch to connection con2
+connection con2;
+--reap
+COMMIT;
+
+--echo # Switch to connection con1
+connection con1;
+SELECT * FROM t1;
+COMMIT;
 
---source include/deadlock.inc
+# Cleanup
+--echo # Switch to connection default + disconnect con1 and con2
+connection default;
+disconnect con1;
+disconnect con2;
+DROP TABLE t1,
+DROP TABLE t2;
diff -Nrup a/mysql-test/suite/falcon/t/falcon_options.test
b/mysql-test/suite/falcon/t/falcon_options.test
--- a/mysql-test/suite/falcon/t/falcon_options.test	2008-01-30 01:57:38 -06:00
+++ b/mysql-test/suite/falcon/t/falcon_options.test	2008-01-31 16:56:10 -06:00
@@ -2,7 +2,7 @@
 
 SHOW VARIABLES LIKE 'falcon_%';
 
---real_sleep=10
+--real_sleep 3
 
 # Test that these server variables are READ ONLY.
 
@@ -36,7 +36,7 @@ SET GLOBAL falcon_max_transaction_backlo
 SELECT @@GLOBAL.falcon_max_transaction_backlog;
 
 SELECT @@GLOBAL.falcon_record_memory_max;
-SET GLOBAL falcon_record_memory_max = 1073741824;
+SET GLOBAL falcon_record_memory_max = 536870912;
 SELECT @@GLOBAL.falcon_record_memory_max;
 
 
@@ -44,5 +44,3 @@ SELECT @@GLOBAL.falcon_record_memory_max
 --sorted_result
 SELECT * FROM INFORMATION_SCHEMA.global_variables
   WHERE variable_name LIKE 'falcon%';
-
---real_sleep=10
diff -Nrup a/storage/falcon/Dbb.cpp b/storage/falcon/Dbb.cpp
--- a/storage/falcon/Dbb.cpp	2008-01-30 01:34:12 -06:00
+++ b/storage/falcon/Dbb.cpp	2008-01-31 16:56:12 -06:00
@@ -153,12 +153,22 @@ Cache* Dbb::create(const char * fileName
 	odsVersion = ODS_VERSION;
 	odsMinorVersion = ODS_MINOR_VERSION;
 	sequence = 1;
-	createFile(fileName, initialAllocation);
+
 	init (pageSz, (int) ((cacheSize + pageSz - 1) / pageSz));
-	Hdr::create (this, fileType, transId, logRoot);
-	PageInventoryPage::create (this, transId);
-	SectionRootPage::create (this, transId);
-	IndexRootPage::create (this, transId);
+	createFile(fileName, initialAllocation);
+	try
+		{
+		Hdr::create (this, fileType, transId, logRoot);
+		PageInventoryPage::create (this, transId);
+		SectionRootPage::create (this, transId);
+		IndexRootPage::create (this, transId);
+		}
+	catch(...)
+		{
+		closeFile();
+		deleteFile();
+		throw;
+		}
 
 	return cache;
 }
diff -Nrup a/storage/falcon/IO.cpp b/storage/falcon/IO.cpp
--- a/storage/falcon/IO.cpp	2008-01-30 01:34:26 -06:00
+++ b/storage/falcon/IO.cpp	2008-01-31 16:56:14 -06:00
@@ -142,8 +142,10 @@ bool IO::openFile(const char * name, boo
 		}
 
 	if (fileId < 0)
-		throw SQLEXCEPTION (CONNECTION_ERROR, "can't open file \"%s\": %s (%d)", 
-							name, strerror (errno), errno);
+		{
+			int sqlError = (errno == EACCES )? FILE_ACCESS_ERROR :CONNECTION_ERROR;
+			throw SQLEXCEPTION (sqlError, "can't open file \"%s\": %s (%d)", name, strerror
(errno), errno);
+		}
 
 	isReadOnly = readOnly;
 	
@@ -184,8 +186,7 @@ bool IO::createFile(const char *name, ui
 		}
 
 	if (fileId < 0)
-		throw SQLEXCEPTION (CONNECTION_ERROR, "can't create file \"%s\", %s (%d)", 
-								name, strerror (errno), errno);
+		throw SQLEXCEPTION (CONNECTION_ERROR,"can't create file \"%s\", %s (%d)", name,
strerror (errno), errno);
 
 	isReadOnly = false;
 #ifndef _WIN32
diff -Nrup a/storage/falcon/SQLException.h b/storage/falcon/SQLException.h
--- a/storage/falcon/SQLException.h	2007-11-28 11:20:53 -06:00
+++ b/storage/falcon/SQLException.h	2008-01-31 16:56:16 -06:00
@@ -67,7 +67,8 @@ enum SqlCode {
 	TABLESPACE_EXIST_ERROR		= -33,
 	TABLESPACE_NOT_EMPTY		= -34,
 	TABLESPACE_NOT_EXIST_ERROR	= -35,
-	DEVICE_FULL					= -36
+	DEVICE_FULL					= -36,
+	FILE_ACCESS_ERROR			= -37
 	};
 
 class DllExport SQLException {
diff -Nrup a/storage/falcon/StorageHandler.cpp b/storage/falcon/StorageHandler.cpp
--- a/storage/falcon/StorageHandler.cpp	2008-01-30 01:36:01 -06:00
+++ b/storage/falcon/StorageHandler.cpp	2008-01-31 16:56:18 -06:00
@@ -102,6 +102,7 @@ StorageHandler::StorageHandler(int lockS
 	dictionaryConnection = NULL;
 	databaseList = NULL;
 	defaultDatabase = NULL;
+	initialized = false;
 }
 
 StorageHandler::~StorageHandler(void)
@@ -642,6 +643,9 @@ StorageConnection* StorageHandler::getSt
 	if (!defaultDatabase)
 		initialize();
 
+	if (!dictionaryConnection)
+		return NULL;
+
 	if (!tableShare->storageDatabase)
 		tableShare->findDatabase();
 
@@ -890,14 +894,16 @@ void StorageHandler::getTransactionSumma
 
 void StorageHandler::initialize(void)
 {
-	if (defaultDatabase)
+
+	if (initialized)
 		return;
 	
 	Sync sync(&syncObject, "StorageConnection::initialize");
 	sync.lock(Exclusive);
 	
-	if (defaultDatabase)
+	if (initialized)
 		return;
+	initialized = true;
 		
 	defaultDatabase = getStorageDatabase(MASTER_NAME, MASTER_PATH);
 	
@@ -907,8 +913,15 @@ void StorageHandler::initialize(void)
 		dictionaryConnection = defaultDatabase->getOpenConnection();
 		dropTempTables();
 		}
-	catch (...)
+	catch (SQLException &e)
 		{
+		// No point in creating a database if we got memory error.
+		// On FILE_ACCESS_ERROR, an external application can temporarily lock the file.
+		// In this both cases, trying to create database in this case could eventually
+		// lead to "recreate" and data loss.
+		int err = e.getSqlcode();
+		if(err == OUT_OF_MEMORY_ERROR || err == FILE_ACCESS_ERROR)
+			return;
 		try
 			{
 			defaultDatabase->createDatabase();
diff -Nrup a/storage/falcon/StorageHandler.h b/storage/falcon/StorageHandler.h
--- a/storage/falcon/StorageHandler.h	2007-12-02 14:17:12 -06:00
+++ b/storage/falcon/StorageHandler.h	2008-01-31 16:56:20 -06:00
@@ -134,6 +134,7 @@ public:
 	StorageTableShare	*tables[tableHashSize];
 	Connection			*dictionaryConnection;
 	int					mySqlLockSize;
+	bool				initialized;
 	virtual void getFalconVersionInfo(InfoTable* infoTable);
 };
 
diff -Nrup a/storage/falcon/StorageTableShare.cpp b/storage/falcon/StorageTableShare.cpp
--- a/storage/falcon/StorageTableShare.cpp	2008-01-30 01:36:04 -06:00
+++ b/storage/falcon/StorageTableShare.cpp	2008-01-31 16:56:23 -06:00
@@ -358,6 +358,8 @@ void StorageTableShare::load(void)
 	Sync sync(&storageHandler->dictionarySyncObject, "StorageTableShare::load");
 	sync.lock(Exclusive);
 	Connection *connection = storageHandler->getDictionaryConnection();
+	if (!connection)
+		return;
 	PreparedStatement *statement = connection->prepareStatement(
 		"select
given_schema_name,given_table_name,effective_schema_name,effective_table_name,tablespace_name
"
 		"from falcon.tables where pathname=?");
diff -Nrup a/storage/falcon/ha_falcon.cpp b/storage/falcon/ha_falcon.cpp
--- a/storage/falcon/ha_falcon.cpp	2008-01-31 11:23:34 -06:00
+++ b/storage/falcon/ha_falcon.cpp	2008-01-31 16:56:24 -06:00
@@ -189,12 +189,15 @@ int StorageInterface::falcon_init(void *
 	falcon_hton->flags = HTON_NO_FLAGS;
 	storageHandler->addNfsLogger(falcon_debug_mask, StorageInterface::logger, NULL);
 
-	int repeatableRead = (falcon_consistent_read ? 
+	int newRepeatableRead = (falcon_consistent_read ? 
 		TRANSACTION_CONSISTENT_READ : TRANSACTION_WRITE_COMMITTED);
-	if (isolation_levels[2] != repeatableRead)
+	if (isolation_levels[ISO_REPEATABLE_READ] != newRepeatableRead)
+		{
+		int oldRepeatableRead = isolation_levels[ISO_REPEATABLE_READ];
 		for (int i = 0; i < 4; i++)
-			if ((i == 2) || (isolation_levels[i] == isolation_levels[2]))
-				isolation_levels[i] = repeatableRead;
+			if (isolation_levels[i] == oldRepeatableRead)
+				isolation_levels[i] = newRepeatableRead;
+		}
 
 	if (falcon_debug_server)
 		storageHandler->startNfsServer();
@@ -3036,10 +3039,13 @@ void StorageInterface::updateConsistentR
 	int newRepeatableRead = (falcon_consistent_read ? 
 		TRANSACTION_CONSISTENT_READ : TRANSACTION_WRITE_COMMITTED);
 
-	if (isolation_levels[2] != newRepeatableRead)
+	if (isolation_levels[ISO_REPEATABLE_READ] != newRepeatableRead)
+		{
+		int oldRepeatableRead = isolation_levels[ISO_REPEATABLE_READ];
 		for (int i = 0; i < 4; i++)
-			if ((i == 2) || (isolation_levels[i] == isolation_levels[2]))
+			if (isolation_levels[i] == oldRepeatableRead)
 				isolation_levels[i] = newRepeatableRead;
+		}
 }
 
 void StorageInterface::updateRecordMemoryMax(MYSQL_THD thd, struct st_mysql_sys_var*
variable, void* var_ptr, void* save)
Thread
bk commit into 6.0 tree (klewis:1.2787)klewis31 Jan 2008