#At file:///net/fimafeng09/export/home/tmp/oleja/mysql/mysql-5.1-telco-7.0-spj-scan-scan/ based on revid:ole.john.aske@stripped
3447 Ole John Aske 2011-03-17 [merge]
Merge from telco mainline -> SPJ-scan-scan
removed:
mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_d_d.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_d_u.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_i_i.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_init.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_u_d.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_u_u.inc
storage/ndb/test/sql/
storage/ndb/test/sql/BANK.sql
storage/ndb/test/sql/T1.sql
storage/ndb/test/sql/test_create_drop.pl
storage/ndb/test/sql/test_range_bounds.pl
storage/ndb/tools/clean-links.sh
storage/ndb/tools/make-errors.pl
storage/ndb/tools/make-links.sh
added:
mysql-test/suite/binlog/r/binlog_incident_ignore.result
mysql-test/suite/binlog/t/binlog_incident_ignore-master.opt
mysql-test/suite/binlog/t/binlog_incident_ignore.test
mysql-test/suite/rpl/r/rpl_skip_incident.result
mysql-test/suite/rpl/t/rpl_skip_incident-master.opt
mysql-test/suite/rpl/t/rpl_skip_incident-slave.opt
mysql-test/suite/rpl/t/rpl_skip_incident.test
mysql-test/suite/rpl_ndb/r/rpl_ndb_ignore_db.result
mysql-test/suite/rpl_ndb/r/rpl_ndb_skip_gap_event.result
mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db-master.opt
mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db.test
mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event-slave.opt
mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event.test
renamed:
mysql-test/include/ndb_conflict_info.inc => mysql-test/suite/rpl_ndb/t/ndb_conflict_info.inc
mysql-test/include/ndb_conflict_info_init.inc => mysql-test/suite/rpl_ndb/t/ndb_conflict_info_init.inc
modified:
mysql-test/suite/ndb/r/ndb_basic.result
mysql-test/suite/ndb_binlog/r/ndb_binlog_ignore_db.result
mysql-test/suite/ndb_binlog/t/ndb_binlog_ignore_db-master.opt
mysql-test/suite/ndb_binlog/t/ndb_binlog_ignore_db.test
mysql-test/suite/rpl_ndb/ndb_master-slave.inc
mysql-test/suite/rpl_ndb/r/rpl_ndb_gap_event.result
mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_gap_event.test
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.h
sql/log.cc
sql/log_event.cc
sql/log_event.h
sql/rpl_injector.h
storage/ndb/docs/doxygen/Doxyfile.mgmapi
storage/ndb/docs/doxygen/Doxyfile.ndbapi
storage/ndb/include/ndb_config.h.in
storage/ndb/ndb_configure.cmake
storage/ndb/src/common/portlib/NdbCondition.c
storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
storage/ndb/src/kernel/blocks/pgman.cpp
storage/ndb/src/kernel/blocks/tsman.cpp
=== added file 'mysql-test/suite/binlog/r/binlog_incident_ignore.result'
--- a/mysql-test/suite/binlog/r/binlog_incident_ignore.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/binlog/r/binlog_incident_ignore.result 2011-03-14 22:52:14 +0000
@@ -0,0 +1,13 @@
+RESET MASTER;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1),(2),(3);
+SELECT * FROM t1;
+a
+1
+2
+3
+REPLACE INTO t1 VALUES (4);
+DROP TABLE t1;
+FLUSH LOGS;
+Contain RELOAD DATABASE
+1
=== added file 'mysql-test/suite/binlog/t/binlog_incident_ignore-master.opt'
--- a/mysql-test/suite/binlog/t/binlog_incident_ignore-master.opt 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/binlog/t/binlog_incident_ignore-master.opt 2011-03-14 22:52:14 +0000
@@ -0,0 +1,2 @@
+--loose-debug=+d,incident_database_resync_on_replace
+--binlog-ignore-db=test
\ No newline at end of file
=== added file 'mysql-test/suite/binlog/t/binlog_incident_ignore.test'
--- a/mysql-test/suite/binlog/t/binlog_incident_ignore.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/binlog/t/binlog_incident_ignore.test 2011-03-14 22:52:14 +0000
@@ -0,0 +1,4 @@
+# The purpose of this test is to verify that incident log events
+# ignore database level binlog filters
+
+--source suite/binlog/t/binlog_incident.test
=== modified file 'mysql-test/suite/ndb/r/ndb_basic.result'
--- a/mysql-test/suite/ndb/r/ndb_basic.result 2011-02-09 14:59:39 +0000
+++ b/mysql-test/suite/ndb/r/ndb_basic.result 2011-03-17 08:17:18 +0000
@@ -62,7 +62,6 @@ Ndb_api_wait_nanos_count_slave #
Ndb_api_wait_scan_result_count #
Ndb_api_wait_scan_result_count_session #
Ndb_api_wait_scan_result_count_slave #
-Ndb_cluster_connection_pool #
Ndb_cluster_node_id #
Ndb_config_from_host #
Ndb_config_from_port #
=== modified file 'mysql-test/suite/ndb_binlog/r/ndb_binlog_ignore_db.result'
--- a/mysql-test/suite/ndb_binlog/r/ndb_binlog_ignore_db.result 2009-02-01 21:05:19 +0000
+++ b/mysql-test/suite/ndb_binlog/r/ndb_binlog_ignore_db.result 2011-03-15 10:49:09 +0000
@@ -9,3 +9,47 @@ show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
mysqld-bin.000001 # Query 1 # use `test`; drop table if exists t1
drop database mysqltest;
+--bug58698 Epoch not in ndb_apply_status
+reset master;
+use mysql;
+-- MyISAM table in mysql db
+create table invisible(a int primary key) engine=myisam;
+insert into invisible values (1);
+insert into invisible values (2);
+delete from invisible;
+drop table invisible;
+-- Should be nothing in binlog
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+-- Ndb table in mysql db
+create table invisible(a int primary key) engine=ndb;
+insert into invisible values (1);
+insert into invisible values (2);
+delete from invisible;
+drop table invisible;
+-- Should be nothing in binlog
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+-- ndb_binlog_index table (MyISAM) in mysql db
+insert into ndb_binlog_index values (12, 'F', 23, 0, 0, 0, 0, 3, 44, 55);
+insert into ndb_binlog_index values (20, 'G', 23, 0, 0, 0, 0, 5, 44, 55);
+delete from ndb_binlog_index;
+-- Should be nothing in binlog
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+-- Non-ignored db (test2)
+create database test2;
+use test2;
+create table t1 (a int primary key) engine=ndb;
+insert into t1 values (1);
+insert into t1 values (2);
+delete from t1;
+drop table t1;
+drop database test2;
+-- Should have events in Binlog, *including ndb_apply_status*
+use test;
+create table raw_binlog_rows (txt varchar(1000));
+select count(1) > 0 from raw_binlog_rows where txt like '%ndb_apply_status%';
+count(1) > 0
+1
+drop table raw_binlog_rows;
=== modified file 'mysql-test/suite/ndb_binlog/t/ndb_binlog_ignore_db-master.opt'
--- a/mysql-test/suite/ndb_binlog/t/ndb_binlog_ignore_db-master.opt 2008-02-25 13:50:20 +0000
+++ b/mysql-test/suite/ndb_binlog/t/ndb_binlog_ignore_db-master.opt 2011-03-14 23:28:51 +0000
@@ -1 +1,2 @@
--binlog-ignore-db=mysqltest
+--binlog-ignore-db=mysql
\ No newline at end of file
=== modified file 'mysql-test/suite/ndb_binlog/t/ndb_binlog_ignore_db.test'
--- a/mysql-test/suite/ndb_binlog/t/ndb_binlog_ignore_db.test 2008-02-25 13:50:20 +0000
+++ b/mysql-test/suite/ndb_binlog/t/ndb_binlog_ignore_db.test 2011-03-15 10:49:09 +0000
@@ -14,3 +14,66 @@ insert into t1 values (1, 1);
-- source include/show_binlog_events2.inc
drop database mysqltest;
+
+--echo --bug58698 Epoch not in ndb_apply_status
+reset master;
+use mysql;
+
+--echo -- MyISAM table in mysql db
+create table invisible(a int primary key) engine=myisam;
+insert into invisible values (1);
+insert into invisible values (2);
+delete from invisible;
+drop table invisible;
+
+--echo -- Should be nothing in binlog
+-- source include/show_binlog_events2.inc
+
+--echo -- Ndb table in mysql db
+create table invisible(a int primary key) engine=ndb;
+insert into invisible values (1);
+insert into invisible values (2);
+delete from invisible;
+drop table invisible;
+
+--echo -- Should be nothing in binlog
+-- source include/show_binlog_events2.inc
+
+--echo -- ndb_binlog_index table (MyISAM) in mysql db
+
+insert into ndb_binlog_index values (12, 'F', 23, 0, 0, 0, 0, 3, 44, 55);
+insert into ndb_binlog_index values (20, 'G', 23, 0, 0, 0, 0, 5, 44, 55);
+
+delete from ndb_binlog_index;
+
+--echo -- Should be nothing in binlog
+-- source include/show_binlog_events2.inc
+
+--echo -- Non-ignored db (test2)
+create database test2;
+use test2;
+
+create table t1 (a int primary key) engine=ndb;
+
+insert into t1 values (1);
+insert into t1 values (2);
+
+delete from t1;
+
+drop table t1;
+
+drop database test2;
+
+--echo -- Should have events in Binlog, *including ndb_apply_status*
+use test;
+create table raw_binlog_rows (txt varchar(1000));
+--disable_query_log
+let $MYSQLD_DATADIR= `select @@datadir;`;
+--exec $MYSQL_BINLOG --verbose $MYSQLD_DATADIR/mysqld-bin.000001 > $MYSQLTEST_VARDIR/tmp/ndb_binlog_mysqlbinlog.sql
+
+--eval load data local infile '$MYSQLTEST_VARDIR/tmp/ndb_binlog_mysqlbinlog.sql' into table raw_binlog_rows columns terminated by '\n';
+--enable_query_log
+
+select count(1) > 0 from raw_binlog_rows where txt like '%ndb_apply_status%';
+
+drop table raw_binlog_rows;
\ No newline at end of file
=== added file 'mysql-test/suite/rpl/r/rpl_skip_incident.result'
--- a/mysql-test/suite/rpl/r/rpl_skip_incident.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/r/rpl_skip_incident.result 2011-03-14 21:34:06 +0000
@@ -0,0 +1,28 @@
+stop slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+reset master;
+reset slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+start slave;
+**** On Master ****
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1),(2),(3);
+SELECT * FROM t1;
+a
+1
+2
+3
+REPLACE INTO t1 VALUES (4);
+SELECT * FROM t1;
+a
+1
+2
+3
+4
+Checking that both slave threads are running.
+Should have two binary logs here
+show binary logs;
+Log_name File_size
+master-bin.000001 #
+master-bin.000002 #
+DROP TABLE t1;
=== added file 'mysql-test/suite/rpl/t/rpl_skip_incident-master.opt'
--- a/mysql-test/suite/rpl/t/rpl_skip_incident-master.opt 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_skip_incident-master.opt 2011-03-14 21:34:06 +0000
@@ -0,0 +1 @@
+--loose-debug=+d,incident_database_resync_on_replace
=== added file 'mysql-test/suite/rpl/t/rpl_skip_incident-slave.opt'
--- a/mysql-test/suite/rpl/t/rpl_skip_incident-slave.opt 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_skip_incident-slave.opt 2011-03-14 21:34:06 +0000
@@ -0,0 +1 @@
+--slave-skip-error=1590
=== added file 'mysql-test/suite/rpl/t/rpl_skip_incident.test'
--- a/mysql-test/suite/rpl/t/rpl_skip_incident.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_skip_incident.test 2011-03-14 21:34:06 +0000
@@ -0,0 +1,28 @@
+--source include/master-slave.inc
+--source include/have_debug.inc
+
+--echo **** On Master ****
+CREATE TABLE t1 (a INT);
+
+INSERT INTO t1 VALUES (1),(2),(3);
+SELECT * FROM t1;
+
+# This will generate an incident log event and store it in the binary
+# log before the replace statement.
+REPLACE INTO t1 VALUES (4);
+
+--sync_slave_with_master
+
+# Now, we should have inserted the row into the table and the slave
+# should be running. We should also have rotated to a new binary log.
+
+SELECT * FROM t1;
+source include/check_slave_is_running.inc;
+
+connection master;
+
+--echo Should have two binary logs here
+--replace_column 2 #
+show binary logs;
+DROP TABLE t1;
+--sync_slave_with_master
=== modified file 'mysql-test/suite/rpl_ndb/ndb_master-slave.inc'
--- a/mysql-test/suite/rpl_ndb/ndb_master-slave.inc 2010-10-22 15:16:26 +0000
+++ b/mysql-test/suite/rpl_ndb/ndb_master-slave.inc 2011-03-16 10:52:36 +0000
@@ -7,7 +7,6 @@ connect (master1,127.0.0.1,root,,test,$M
connect (slave,127.0.0.1,root,,test,$SLAVE_MYPORT,);
-- connection slave
-- source suite/rpl_ndb/have_one_ndb.inc
--- source include/ndb_conflict_info_init.inc
connect (slave1,127.0.0.1,root,,test,$SLAVE_MYPORT,);
@@ -15,4 +14,3 @@ connect (slave1,127.0.0.1,root,,test,$SL
# Set the default connection to 'master'
connection master;
-source include/ndb_conflict_info_init.inc;
=== modified file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_gap_event.result'
--- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_gap_event.result 2010-03-24 16:01:31 +0000
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_gap_event.result 2011-03-14 21:42:25 +0000
@@ -13,4 +13,10 @@ show binlog events in 'master-bin.000002
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000002 # Incident 1 <end_pos> #1 (LOST_EVENTS)
drop table if exists t1;
+Get IO thread to reconnect to Master
+start slave;
+Slave_IO_Running Yes
+Slave_SQL_Running No
+Last_Errno 1590
+Last_Error The incident LOST_EVENTS occured on the master. Message: mysqld startup
drop table if exists t1;
=== added file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_ignore_db.result'
--- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_ignore_db.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_ignore_db.result 2011-03-14 23:28:51 +0000
@@ -0,0 +1,33 @@
+stop slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+reset master;
+reset slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+start slave;
+delete from mysql.ndb_apply_status;
+use mysql;
+create table t1 (a int primary key, b int) engine=myisam;
+create table t2 (a int primary key, b int) engine=ndb;
+insert into t1 values (1,1), (2,2);
+insert into t2 values (1,1), (2,2);
+delete from t1;
+delete from t2;
+use test;
+create table t3 (a int primary key, b int) engine=ndb;
+insert into t3 values (1,1), (2,2);
+select count(1) from information_schema.tables where table_schema="mysql" and (table_name = "t1" or table_name="t2");
+count(1)
+0
+use test;
+select * from t3 order by a;
+a b
+1 1
+2 2
+select count(1) from mysql.ndb_apply_status;
+count(1)
+1
+use mysql;
+drop table t1;
+drop table t2;
+use test;
+drop table t3;
=== added file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_skip_gap_event.result'
--- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_skip_gap_event.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_skip_gap_event.result 2011-03-15 00:43:19 +0000
@@ -0,0 +1,28 @@
+stop slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+reset master;
+reset slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+start slave;
+create table t1(pk int not null primary key, i int) engine = ndb;
+select count(*) from t1;
+count(*)
+1000
+Restarting mysqld
+show binlog events in 'master-bin.000002' from <start_pos> limit 0,1;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000002 # Incident 1 <end_pos> #1 (LOST_EVENTS)
+start slave;
+Sync Slave with master
+Show that Slave has not stopped (has skipped GAP)
+Slave_IO_Running Yes
+Slave_SQL_Running Yes
+Last_Errno 0
+Last_Error
+Show that replication can continue
+insert into t1 values (1001, 1001);
+select count(*) from t1;
+count(*)
+1001
+drop table if exists t1;
+drop table t1;
=== renamed file 'mysql-test/include/ndb_conflict_info.inc' => 'mysql-test/suite/rpl_ndb/t/ndb_conflict_info.inc'
=== renamed file 'mysql-test/include/ndb_conflict_info_init.inc' => 'mysql-test/suite/rpl_ndb/t/ndb_conflict_info_init.inc'
=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_1.inc'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_1.inc 2010-01-27 09:29:10 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_1.inc 2011-03-16 11:07:13 +0000
@@ -1,5 +1,5 @@
--connection slave
---source include/ndb_conflict_info_init.inc
+--source suite/rpl_ndb/t/ndb_conflict_info_init.inc
--connection master
@@ -32,7 +32,7 @@ commit;
--connection slave
select * from t1 order by a, d;
select * from t2 order by a, d;
---source include/ndb_conflict_info.inc
+--source suite/rpl_ndb/t/ndb_conflict_info.inc
--echo *** master - update 2 rows in different tables
--connection master
@@ -43,7 +43,7 @@ update t2 set b="Master t2 a=3 at c=3",
--connection slave
select * from t1 order by a, d;
select * from t2 order by a, d;
---source include/ndb_conflict_info.inc
+--source suite/rpl_ndb/t/ndb_conflict_info.inc
--echo *** master - delete all
--connection master
@@ -54,8 +54,8 @@ delete from t2;
--connection slave
select * from t1 order by a, d;
select * from t2 order by a, d;
---source include/ndb_conflict_info.inc
---source include/ndb_conflict_info_init.inc
+--source suite/rpl_ndb/t/ndb_conflict_info.inc
+--source suite/rpl_ndb/t/ndb_conflict_info_init.inc
--echo ************************
--echo * start conflict testing
@@ -76,7 +76,7 @@ commit;
--echo *** slave - check conflict info, no conflicts yet
--sync_slave_with_master
--connection slave
---source include/ndb_conflict_info.inc
+--source suite/rpl_ndb/t/ndb_conflict_info.inc
--echo *** slave - check insert some data
select * from t1 order by a, d;
@@ -110,7 +110,7 @@ commit;
--echo *** slave - check conflict info, there should be some
--sync_slave_with_master
--connection slave
---source include/ndb_conflict_info.inc
+--source suite/rpl_ndb/t/ndb_conflict_info.inc
--echo *** slave - check update some data that causes conflicts
select * from t1 order by a, d;
@@ -133,7 +133,7 @@ commit;
--echo *** slave - check conflict info, change depends on calling test
--sync_slave_with_master
--connection slave
---source include/ndb_conflict_info.inc
+--source suite/rpl_ndb/t/ndb_conflict_info.inc
--echo *** slave - check higer timestamp
select * from t1 order by a, d;
=== removed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_d_d.inc'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_d_d.inc 2009-02-16 15:54:40 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_d_d.inc 1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
---echo ***
---echo *** conflicting timestamps on delete-delete
---echo ***
-
---echo *** slave - cause conflict
---connection slave
---source include/ndb_conflict_info_init.inc
-update t1 set b="slave X=3", X=3 where a=1;
-delete from t1 where a=1;
-
---echo *** master - cause conflict
---connection master
-delete from t1 where a=1;
-delete from t1 where a=2;
-
---echo *** slave - check data
---sync_slave_with_master
---connection slave
---source include/ndb_conflict_info.inc
-select * from t1 order by a;
=== removed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_d_u.inc'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_d_u.inc 2009-02-16 15:54:40 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_d_u.inc 1970-01-01 00:00:00 +0000
@@ -1,19 +0,0 @@
---echo ***
---echo *** conflicting timestamps on delete-update
---echo ***
-
---echo *** slave - cause conflict
---connection slave
---source include/ndb_conflict_info_init.inc
-update t1 set b="slave X=3", X=3 where a=1;
-
---echo *** master - cause conflict
---connection master
-delete from t1 where a=1;
-delete from t1 where a=2;
-
---echo *** slave - check data
---sync_slave_with_master
---connection slave
---source include/ndb_conflict_info.inc
-select * from t1 order by a;
=== removed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_i_i.inc'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_i_i.inc 2009-02-16 15:54:40 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_i_i.inc 1970-01-01 00:00:00 +0000
@@ -1,22 +0,0 @@
---echo ***
---echo *** conflicting timestamps on insert
---echo ***
-
---connection master
-delete from t1 where a=1;
---sync_slave_with_master
-
---echo *** slave - cause conflict
---connection slave
---source include/ndb_conflict_info_init.inc
-insert into t1 values(1, "slave X=3", 3, "1");
-
---echo *** master - cause conflict
---connection master
-insert into t1 values(1, "master X=2", 2, "1");
-
---echo *** slave - check data
---sync_slave_with_master
---connection slave
---source include/ndb_conflict_info.inc
-select * from t1 order by a;
=== removed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_init.inc'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_init.inc 2009-02-16 15:54:40 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_init.inc 1970-01-01 00:00:00 +0000
@@ -1,28 +0,0 @@
---echo *** reset and init
---disable_query_log
---disable_result_log
---connection slave
-stop slave;
-delete from t1;
---error 0,1146
-delete from `test`.`t1$EX`;
-
---connection master
-delete from t1;
-reset master;
-
---connection slave
-reset slave;
-start slave;
---source include/ndb_conflict_info_init.inc
---disable_query_log
---disable_result_log
-
---connection master
-insert into t1 values (1, "master X=1", 1, "1");
-insert into t1 values (2, "master X=1", 1, "2");
-insert into t1 values (3, "master X=1", 1, "3");
-
---sync_slave_with_master
---enable_query_log
---enable_result_log
=== removed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_u_d.inc'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_u_d.inc 2009-02-16 15:54:40 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_u_d.inc 1970-01-01 00:00:00 +0000
@@ -1,19 +0,0 @@
---echo ***
---echo *** conflicting timestamps on update-delete
---echo ***
-
---echo *** slave - cause conflict
---connection slave
---source include/ndb_conflict_info_init.inc
-delete from t1 where a=1;
-
---echo *** master - cause conflict
---connection master
-update t1 set b="master X=2", X=2 where a=1;
-update t1 set b="master X=2", X=2 where a=2;
-
---echo *** slave - check data
---sync_slave_with_master
---connection slave
---source include/ndb_conflict_info.inc
-select * from t1 order by a;
=== removed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_u_u.inc'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_u_u.inc 2009-02-16 15:54:40 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_u_u.inc 1970-01-01 00:00:00 +0000
@@ -1,19 +0,0 @@
---echo ***
---echo *** conflicting timestamps on update
---echo ***
-
---echo *** slave - cause conflict
---connection slave
---source include/ndb_conflict_info_init.inc
-update t1 set b="slave X=3", X=3 where a=1;
-
---echo *** master - cause conflict
---connection master
-update t1 set b="master X=2", X=2 where a=1;
-update t1 set b="master X=2", X=2 where a=2;
-
---echo *** slave - check data
---sync_slave_with_master
---connection slave
---source include/ndb_conflict_info.inc
-select * from t1 order by a;
=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_gap_event.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_gap_event.test 2010-10-22 15:16:26 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_gap_event.test 2011-03-15 17:29:28 +0000
@@ -36,7 +36,17 @@ let $off_set=0;
drop table if exists t1;
+--echo Get IO thread to reconnect to Master
--connection slave
+--disable_result_log
+start slave;
+--enable_result_log
+
+-- source include/wait_for_slave_sql_to_stop.inc
+
+let $status_items= Slave_IO_Running, Slave_SQL_Running, Last_Errno, Last_Error;
+-- source include/show_slave_status.inc
+
drop table if exists t1;
=== added file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db-master.opt'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db-master.opt 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db-master.opt 2011-03-14 23:28:51 +0000
@@ -0,0 +1 @@
+--binlog-ignore-db=mysql
=== added file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db.test 2011-03-14 23:47:26 +0000
@@ -0,0 +1,45 @@
+--source include/have_ndb.inc
+--source include/have_binlog_format_mixed_or_row.inc
+--source suite/rpl_ndb/ndb_master-slave.inc
+
+# We are not binlogging changes to the mysql db. Check
+# that changes to tables in the mysql db are not replicated
+# but ndb_apply_status events are
+
+--connection slave
+delete from mysql.ndb_apply_status;
+
+--connection master
+use mysql;
+create table t1 (a int primary key, b int) engine=myisam;
+create table t2 (a int primary key, b int) engine=ndb;
+
+insert into t1 values (1,1), (2,2);
+insert into t2 values (1,1), (2,2);
+
+delete from t1;
+delete from t2;
+
+use test;
+create table t3 (a int primary key, b int) engine=ndb;
+insert into t3 values (1,1), (2,2);
+
+--sync_slave_with_master slave
+--connection slave
+
+select count(1) from information_schema.tables where table_schema="mysql" and (table_name = "t1" or table_name="t2");
+
+use test;
+select * from t3 order by a;
+
+select count(1) from mysql.ndb_apply_status;
+
+--connection master
+use mysql;
+drop table t1;
+drop table t2;
+
+use test;
+drop table t3;
+
+--sync_slave_with_master slave
=== added file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event-slave.opt'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event-slave.opt 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event-slave.opt 2011-03-14 21:42:25 +0000
@@ -0,0 +1 @@
+--slave-skip-errors=1590
\ No newline at end of file
=== added file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event.test 2011-03-15 00:46:48 +0000
@@ -0,0 +1,69 @@
+--source include/have_ndb.inc
+--source include/have_binlog_format_mixed_or_row.inc
+--source suite/rpl_ndb/ndb_master-slave.inc
+
+--connection master
+create table t1(pk int not null primary key, i int) engine = ndb;
+
+#
+# insert more records into tables
+#
+let $1=1000;
+disable_query_log;
+while ($1)
+{
+ eval insert into t1 values($1, $1);
+ dec $1;
+}
+enable_query_log;
+
+--sync_slave_with_master
+# connect to slave and ensure data is there.
+--connection slave
+select count(*) from t1;
+
+--connection master
+
+--echo Restarting mysqld
+let $mysqld_name=mysqld.1.1;
+--source include/restart_mysqld.inc
+#show binlog events in 'master-bin.000002';
+let $log_name=master-bin.000002;
+let $start_pos=107;
+let $end_pos=143;
+let $off_set=0;
+-- source include/show_binlog_using_logname.inc
+
+--disable_result_log
+--connection slave
+# Get slave to try reconnection now. Ignore errors if already started.
+start slave;
+--connection master
+--enable_result_log
+
+--echo Sync Slave with master
+--sync_slave_with_master
+
+--connection slave
+
+--echo Show that Slave has not stopped (has skipped GAP)
+
+let $status_items= Slave_IO_Running, Slave_SQL_Running, Last_Errno, Last_Error;
+-- source include/show_slave_status.inc
+
+--echo Show that replication can continue
+--connection master
+insert into t1 values (1001, 1001);
+
+--sync_slave_with_master
+
+--connection slave
+
+select count(*) from t1;
+
+drop table if exists t1;
+
+--connection master
+drop table t1;
+
+
=== modified file 'sql/ha_ndbcluster.cc'
--- a/sql/ha_ndbcluster.cc 2011-03-17 08:02:01 +0000
+++ b/sql/ha_ndbcluster.cc 2011-03-17 08:17:18 +0000
@@ -1320,11 +1320,6 @@ SHOW_VAR ndb_status_variables_dynamic[]=
{NullS, NullS, SHOW_LONG}
};
-SHOW_VAR ndb_status_variables_fixed[]= {
- {"cluster_connection_pool",(char*) &opt_ndb_cluster_connection_pool, SHOW_LONG},
- {NullS, NullS, SHOW_LONG}
-};
-
SHOW_VAR ndb_status_conflict_variables[]= {
{"fn_max", (char*) &g_ndb_status_conflict_fn_max, SHOW_LONG},
{"fn_old", (char*) &g_ndb_status_conflict_fn_old, SHOW_LONG},
@@ -1802,7 +1797,6 @@ Thd_ndb::Thd_ndb()
m_handler= NULL;
m_error= FALSE;
m_error_code= 0;
- query_state&= NDB_QUERY_NORMAL;
options= 0;
(void) my_hash_init(&open_tables, table_alias_charset, 5, 0, 0,
(my_hash_get_key)thd_ndb_share_get_key, 0, 0);
@@ -7859,7 +7853,6 @@ int ha_ndbcluster::start_statement(THD *
DBUG_RETURN(error);
thd_ndb->init_open_tables();
- thd_ndb->query_state&= NDB_QUERY_NORMAL;
thd_ndb->m_slow_path= FALSE;
if (!(thd_options(thd) & OPTION_BIN_LOG) ||
thd->variables.binlog_format == BINLOG_FORMAT_STMT)
@@ -13784,7 +13777,6 @@ ha_ndbcluster::read_multi_range_first(KE
KEY* key_info= table->key_info + active_index;
NDB_INDEX_TYPE cur_index_type= get_index_type(active_index);
ulong reclength= table_share->reclength;
- Thd_ndb *thd_ndb= m_thd_ndb;
NdbTransaction *trans= m_thd_ndb->trans;
int error;
@@ -13819,7 +13811,6 @@ ha_ndbcluster::read_multi_range_first(KE
if (unlikely((error= close_scan())))
DBUG_RETURN(error);
- thd_ndb->query_state|= NDB_QUERY_MULTI_READ_RANGE;
m_disable_multi_read= FALSE;
/*
@@ -14369,7 +14360,6 @@ ha_ndbcluster::read_multi_range_next(KEY
if (multi_range_curr == multi_range_end)
{
- m_thd_ndb->query_state&= NDB_QUERY_NORMAL;
DBUG_RETURN(HA_ERR_END_OF_FILE);
}
@@ -16669,7 +16659,6 @@ static int show_ndb_vars(THD *thd, SHOW_
SHOW_VAR ndb_status_variables_export[]= {
{"Ndb", (char*) &show_ndb_vars, SHOW_FUNC},
- {"Ndb", (char*) &ndb_status_variables_fixed, SHOW_ARRAY},
{"Ndb_conflict", (char*) &ndb_status_conflict_variables, SHOW_ARRAY},
{"Ndb", (char*) &ndb_status_injector_variables, SHOW_ARRAY},
{"Ndb", (char*) &ndb_status_slave_variables, SHOW_ARRAY},
=== modified file 'sql/ha_ndbcluster.h'
--- a/sql/ha_ndbcluster.h 2011-02-23 13:09:10 +0000
+++ b/sql/ha_ndbcluster.h 2011-03-17 08:17:18 +0000
@@ -283,11 +283,6 @@ inline void set_binlog_use_update(NDB_SH
inline my_bool get_binlog_use_update(NDB_SHARE *share)
{ return (share->flags & NSF_BINLOG_USE_UPDATE) != 0; }
-typedef enum ndb_query_state_bits {
- NDB_QUERY_NORMAL = 0,
- NDB_QUERY_MULTI_READ_RANGE = 1
-} NDB_QUERY_STATE_BITS;
-
/*
Place holder for ha_ndbcluster thread specific data
*/
@@ -348,7 +343,6 @@ class Thd_ndb
uint32 options;
uint32 trans_options;
List<NDB_SHARE> changed_tables;
- uint query_state;
HASH open_tables;
/*
This is a memroot used to buffer rows for batched execution.
=== modified file 'sql/log.cc'
--- a/sql/log.cc 2010-10-12 11:54:35 +0000
+++ b/sql/log.cc 2011-03-15 11:14:43 +0000
@@ -4135,6 +4135,10 @@ int THD::binlog_write_table_map(TABLE *t
Table_map_log_event
the_event(this, table, table->s->table_map_id, is_trans);
+#ifndef MCP_BUG11799583
+ the_event.flags |= LOG_EVENT_NO_FILTER_F;
+#endif
+
if (is_trans && binlog_table_maps == 0)
binlog_start_trans_and_stmt();
=== modified file 'sql/log_event.cc'
--- a/sql/log_event.cc 2010-10-20 15:21:27 +0000
+++ b/sql/log_event.cc 2011-03-14 21:58:28 +0000
@@ -9659,6 +9659,15 @@ int
Incident_log_event::do_apply_event(Relay_log_info const *rli)
{
DBUG_ENTER("Incident_log_event::do_apply_event");
+
+#ifndef MCP_BUG59889
+ if (ignored_error_code(ER_SLAVE_INCIDENT))
+ {
+ DBUG_PRINT("info", ("Ignoring Incident"));
+ DBUG_RETURN(0);
+ }
+#endif
+
rli->report(ERROR_LEVEL, ER_SLAVE_INCIDENT,
ER(ER_SLAVE_INCIDENT),
description(),
=== modified file 'sql/log_event.h'
--- a/sql/log_event.h 2010-10-20 11:10:46 +0000
+++ b/sql/log_event.h 2011-03-15 11:59:15 +0000
@@ -501,6 +501,14 @@ struct sql_ex_info
*/
#define LOG_EVENT_NO_DB_CHECK_F 0x80
+#ifndef MCP_BUG11799583
+/*
+ Define LOG_EVENT_NO_FILTER_F as alias for LOG_EVENT_NO_DB_CHECK
+ to make it possible to write code that is forward compatible with 5.5
+*/
+#define LOG_EVENT_NO_FILTER_F LOG_EVENT_NO_DB_CHECK_F
+#endif
+
/**
@def OPTIONS_WRITTEN_TO_BIN_LOG
=== modified file 'sql/rpl_injector.h'
--- a/sql/rpl_injector.h 2011-02-01 14:58:55 +0000
+++ b/sql/rpl_injector.h 2011-03-14 23:47:26 +0000
@@ -175,6 +175,9 @@ public:
use_table() is called after any *_row() function has been
called for the transaction.
+ The caller is responsible for filtering out table map events
+ which shouldn't be included due to binlog_do/ignore db.
+
RETURN VALUE
0 All OK
=== modified file 'storage/ndb/docs/doxygen/Doxyfile.mgmapi'
--- a/storage/ndb/docs/doxygen/Doxyfile.mgmapi 2011-01-30 20:42:21 +0000
+++ b/storage/ndb/docs/doxygen/Doxyfile.mgmapi 2011-03-14 13:48:33 +0000
@@ -552,7 +552,7 @@ EXTRA_PACKAGES =
# the first chapter. If it is left blank doxygen will generate a
# standard header. Notice: only use this tag if you know what you are doing!
-LATEX_HEADER = ../doxygen/header.mgmapi.tex
+LATEX_HEADER =
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
# is prepared for conversion to pdf (using ps2pdf). The pdf file will
=== modified file 'storage/ndb/docs/doxygen/Doxyfile.ndbapi'
--- a/storage/ndb/docs/doxygen/Doxyfile.ndbapi 2011-01-30 20:42:21 +0000
+++ b/storage/ndb/docs/doxygen/Doxyfile.ndbapi 2011-03-14 13:48:33 +0000
@@ -552,7 +552,7 @@ EXTRA_PACKAGES =
# the first chapter. If it is left blank doxygen will generate a
# standard header. Notice: only use this tag if you know what you are doing!
-LATEX_HEADER = ../doxygen/header.ndbapi.tex
+LATEX_HEADER =
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
# is prepared for conversion to pdf (using ps2pdf). The pdf file will
=== modified file 'storage/ndb/include/ndb_config.h.in'
--- a/storage/ndb/include/ndb_config.h.in 2011-02-02 00:40:07 +0000
+++ b/storage/ndb/include/ndb_config.h.in 2011-03-15 15:50:34 +0000
@@ -41,3 +41,5 @@
#cmakedefine HAVE__BITSCANFORWARD 1
#cmakedefine HAVE_PTHREAD_MUTEXATTR_INIT 1
#cmakedefine HAVE_PTHREAD_MUTEXATTR_SETTYPE 1
+#cmakedefine HAVE_PTHREAD_SETSCHEDPARAM 1
+
=== modified file 'storage/ndb/ndb_configure.cmake'
--- a/storage/ndb/ndb_configure.cmake 2011-02-02 00:40:07 +0000
+++ b/storage/ndb/ndb_configure.cmake 2011-03-15 15:50:34 +0000
@@ -43,6 +43,7 @@ CHECK_FUNCTION_EXISTS(mlock HAVE_MLOCK)
CHECK_FUNCTION_EXISTS(ffs HAVE_FFS)
CHECK_FUNCTION_EXISTS(pthread_mutexattr_init HAVE_PTHREAD_MUTEXATTR_INIT)
CHECK_FUNCTION_EXISTS(pthread_mutexattr_settype HAVE_PTHREAD_MUTEXATTR_SETTYPE)
+cHECK_FUNCTION_EXISTS(pthread_setschedparam HAVE_PTHREAD_SETSCHEDPARAM)
CHECK_INCLUDE_FILES(sun_prefetch.h HAVE_SUN_PREFETCH_H)
=== modified file 'storage/ndb/src/common/portlib/NdbCondition.c'
--- a/storage/ndb/src/common/portlib/NdbCondition.c 2011-02-03 14:20:36 +0000
+++ b/storage/ndb/src/common/portlib/NdbCondition.c 2011-03-15 15:55:03 +0000
@@ -30,11 +30,10 @@ static int clock_id = CLOCK_REALTIME;
void
NdbCondition_initialize(int need_monotonic)
{
- init = 1;
#if defined HAVE_CLOCK_GETTIME && defined HAVE_PTHREAD_CONDATTR_SETCLOCK && \
defined CLOCK_MONOTONIC
- int res, init = 0;
+ int res;
pthread_cond_t tmp;
pthread_condattr_t attr;
@@ -71,6 +70,8 @@ nogo:
res);
fflush(stderr);
return;
+#else
+ init = 1;
#endif
}
=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2011-02-18 08:50:50 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2011-03-17 08:17:18 +0000
@@ -9023,8 +9023,7 @@ Dbdict::alterTable_toLocal(Signal* signa
ndbrequire(blockIndex < AlterTableRec::BlockCount);
const Uint32 blockNo = alterTabPtr.p->m_blockNo[blockIndex];
- const char* const blockName = getBlockName(blockNo);
- D("alterTable_toLocal" << V(blockIndex) << V(blockName));
+ D("alterTable_toLocal" << V(blockIndex) << V(getBlockName(blockNo)));
AlterTabReq* req = (AlterTabReq*)signal->getDataPtrSend();
req->senderRef = reference();
@@ -9613,8 +9612,7 @@ Dbdict::alterTable_abortToLocal(Signal*
const Uint32 blockIndex = blockCount - 1;
const Uint32 blockNo = alterTabPtr.p->m_blockNo[blockIndex];
- const char* const blockName = getBlockName(blockNo);
- D("alterTable_abortToLocal" << V(blockIndex) << V(blockName));
+ D("alterTable_abortToLocal" << V(blockIndex) << V(getBlockName(blockNo)));
Uint32 connectPtr = RNIL;
switch(blockNo){
@@ -18663,11 +18661,10 @@ Dbdict::execDICT_TAKEOVER_REF(Signal* si
Uint32 senderRef = ref->senderRef;
Uint32 nodeId = refToNode(senderRef);
Uint32 masterRef = ref->masterRef;
- Uint32 errorCode = ref->errorCode;
NodeRecordPtr masterNodePtr;
jamEntry();
#ifdef VM_TRACE
- ndbout_c("Dbdict::execDICT_TAKEOVER_REF: error %u, from %u", errorCode, nodeId);
+ ndbout_c("Dbdict::execDICT_TAKEOVER_REF: error %u, from %u", ref->errorCode, nodeId);
#endif
/*
Slave has died (didn't reply) or doesn't not have any transaction
@@ -18698,12 +18695,12 @@ Dbdict::execDICT_TAKEOVER_CONF(Signal* s
Uint32 senderRef = conf->senderRef;
Uint32 nodeId = refToNode(senderRef);
//Uint32 clientRef = conf->clientRef;
- Uint32 op_count = conf->op_count;
- Uint32 trans_key = conf->trans_key;
- Uint32 rollforward_op = conf->rollforward_op;
- Uint32 rollforward_op_state = conf->rollforward_op_state;
- Uint32 rollback_op = conf->rollback_op;
- Uint32 rollback_op_state = conf->rollback_op_state;
+ //Uint32 op_count = conf->op_count;
+ //Uint32 trans_key = conf->trans_key;
+ //Uint32 rollforward_op = conf->rollforward_op;
+ //Uint32 rollforward_op_state = conf->rollforward_op_state;
+ //Uint32 rollback_op = conf->rollback_op;
+ //Uint32 rollback_op_state = conf->rollback_op_state;
NodeRecordPtr masterNodePtr;
/*
@@ -18716,7 +18713,9 @@ Dbdict::execDICT_TAKEOVER_CONF(Signal* s
ndbassert(getOwnNodeId() == c_masterNodeId);
c_nodes.getPtr(masterNodePtr, c_masterNodeId);
#ifdef VM_TRACE
- ndbout_c("execDICT_TAKEOVER_CONF: Node %u, trans %u(%u), count %u, rollf %u/%u, rb %u/%u", nodeId, trans_key, conf->trans_state, op_count, rollforward_op, rollforward_op_state, rollback_op, rollback_op_state);
+ ndbout_c("execDICT_TAKEOVER_CONF: Node %u, trans %u(%u), count %u, rollf %u/%u, rb %u/%u",
+ nodeId, conf->trans_key, conf->trans_state, conf->op_count, conf->rollforward_op,
+ conf->rollforward_op_state, conf->rollback_op, conf->rollback_op_state);
#endif
/*
@@ -23208,11 +23207,7 @@ Dbdict::seizeSchemaOp(SchemaOpPtr& op_pt
jam();
c_schemaOpHash.add(op_ptr);
op_ptr.p->m_magic = SchemaOp::DICT_MAGIC;
- const char* opType = info.m_opType;
- D("seizeSchemaOp" << V(op_key) << V(opType));
-#ifdef MARTIN
- ndbout_c("Dbdict::seizeSchemaOp: op_key %u, op_type %s", op_key, opType);
-#endif
+ D("seizeSchemaOp" << V(op_key) << V(info.m_opType));
return true;
}
c_schemaOpHash.release(op_ptr);
@@ -23240,11 +23235,7 @@ Dbdict::findSchemaOp(SchemaOpPtr& op_ptr
void
Dbdict::releaseSchemaOp(SchemaOpPtr& op_ptr)
{
- Uint32 op_key = op_ptr.p->op_key;
- D("releaseSchemaOp" << V(op_key));
-#ifdef MARTIN
- ndbout_c("Dbdict::releaseSchemaOp: op_key %u", op_key);
-#endif
+ D("releaseSchemaOp" << V(op_ptr.p->op_key));
const OpInfo& info = getOpInfo(op_ptr);
(this->*(info.m_release))(op_ptr);
@@ -23582,11 +23573,7 @@ Dbdict::findSchemaTrans(SchemaTransPtr&
void
Dbdict::releaseSchemaTrans(SchemaTransPtr& trans_ptr)
{
- Uint32 trans_key = trans_ptr.p->trans_key;
- D("releaseSchemaTrans" << V(trans_key));
-#ifdef MARTIN
- ndbout_c("Dbdict::releaseSchemaTrans: Releasing trans %u", trans_key);
-#endif
+ D("releaseSchemaTrans" << V(trans_ptr.p->trans_key));
LocalDLFifoList<SchemaOp> list(c_schemaOpPool, trans_ptr.p->m_op_list);
SchemaOpPtr op_ptr;
@@ -26873,8 +26860,7 @@ Dbdict::findTxHandle(TxHandlePtr& tx_ptr
void
Dbdict::releaseTxHandle(TxHandlePtr& tx_ptr)
{
- Uint32 tx_key = tx_ptr.p->tx_key;
- D("releaseTxHandle" << V(tx_key));
+ D("releaseTxHandle" << V(tx_ptr.p->tx_key));
ndbrequire(tx_ptr.p->m_magic == TxHandle::DICT_MAGIC);
tx_ptr.p->m_magic = 0;
=== modified file 'storage/ndb/src/kernel/blocks/pgman.cpp'
--- a/storage/ndb/src/kernel/blocks/pgman.cpp 2011-02-01 23:27:25 +0000
+++ b/storage/ndb/src/kernel/blocks/pgman.cpp 2011-03-15 16:11:47 +0000
@@ -1670,11 +1670,14 @@ int
Pgman::get_page_no_lirs(Signal* signal, Ptr<Page_entry> ptr, Page_request page_req)
{
jamEntry();
+
+#ifdef VM_TRACE
Ptr<Page_request> tmp = { &page_req, RNIL};
D(">get_page");
D(ptr);
D(tmp);
+#endif
Uint32 req_flags = page_req.m_flags;
@@ -2791,8 +2794,6 @@ void
Pgman::execDBINFO_SCANREQ(Signal *signal)
{
DbinfoScanReq req= *(DbinfoScanReq*)signal->theData;
- const Ndbinfo::ScanCursor* cursor =
- reinterpret_cast<const Ndbinfo::ScanCursor*>(DbinfoScan::getCursorPtr(&req));
Ndbinfo::Ratelimit rl;
jamEntry();
@@ -2800,7 +2801,6 @@ Pgman::execDBINFO_SCANREQ(Signal *signal
case Ndbinfo::DISKPAGEBUFFER_TABLEID:
{
jam();
- BlockNumber bn = blockToMain(number());
Ndbinfo::Row row(signal, req);
row.write_uint32(getOwnNodeId());
row.write_uint32(instance()); // block instance
=== modified file 'storage/ndb/src/kernel/blocks/tsman.cpp'
--- a/storage/ndb/src/kernel/blocks/tsman.cpp 2011-01-30 20:56:00 +0000
+++ b/storage/ndb/src/kernel/blocks/tsman.cpp 2011-03-15 16:11:47 +0000
@@ -1229,9 +1229,8 @@ Tsman::load_extent_page_callback(Signal*
Uint32 senderRef = ptr.p->m_create.m_senderRef;
Uint32 senderData = ptr.p->m_create.m_senderData;
Uint32 extent_pages = ptr.p->m_create.m_extent_pages;
- Uint32 requestInfo = ptr.p->m_create.m_requestInfo;
Uint32 data_pages = ptr.p->m_create.m_data_pages;
- ndbassert(requestInfo == CreateFileImplReq::Commit);
+ ndbassert(ptr.p->m_create.m_requestInfo == CreateFileImplReq::Commit);
Uint32 eh= File_formats::Datafile::extent_header_words(ptr.p->m_extent_size);
Uint32 per_page = File_formats::Datafile::EXTENT_PAGE_WORDS/eh;
=== removed directory 'storage/ndb/test/sql'
=== removed file 'storage/ndb/test/sql/BANK.sql'
--- a/storage/ndb/test/sql/BANK.sql 2011-01-30 20:42:21 +0000
+++ b/storage/ndb/test/sql/BANK.sql 1970-01-01 00:00:00 +0000
@@ -1,59 +0,0 @@
--- Copyright (C) 2005 MySQL AB
---
--- This program is free software; you can redistribute it and/or modify
--- it under the terms of the GNU General Public License as published by
--- the Free Software Foundation; version 2 of the License.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program; if not, write to the Free Software
--- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-CREATE DATABASE IF NOT EXISTS BANK default charset=latin1 default collate=latin1_bin;
-USE BANK;
-DROP TABLE IF EXISTS GL;
-CREATE TABLE GL ( TIME BIGINT UNSIGNED NOT NULL,
- ACCOUNT_TYPE INT UNSIGNED NOT NULL,
- BALANCE INT UNSIGNED NOT NULL,
- DEPOSIT_COUNT INT UNSIGNED NOT NULL,
- DEPOSIT_SUM INT UNSIGNED NOT NULL,
- WITHDRAWAL_COUNT INT UNSIGNED NOT NULL,
- WITHDRAWAL_SUM INT UNSIGNED NOT NULL,
- PURGED INT UNSIGNED NOT NULL,
- PRIMARY KEY USING HASH (TIME,ACCOUNT_TYPE))
- ENGINE = NDB;
-
-DROP TABLE IF EXISTS ACCOUNT;
-CREATE TABLE ACCOUNT ( ACCOUNT_ID INT UNSIGNED NOT NULL,
- OWNER INT UNSIGNED NOT NULL,
- BALANCE INT UNSIGNED NOT NULL,
- ACCOUNT_TYPE INT UNSIGNED NOT NULL,
- PRIMARY KEY USING HASH (ACCOUNT_ID))
- ENGINE = NDB;
-
-DROP TABLE IF EXISTS TRANSACTION;
-CREATE TABLE TRANSACTION ( TRANSACTION_ID BIGINT UNSIGNED NOT NULL,
- ACCOUNT INT UNSIGNED NOT NULL,
- ACCOUNT_TYPE INT UNSIGNED NOT NULL,
- OTHER_ACCOUNT INT UNSIGNED NOT NULL,
- TRANSACTION_TYPE INT UNSIGNED NOT NULL,
- TIME BIGINT UNSIGNED NOT NULL,
- AMOUNT INT UNSIGNED NOT NULL,
- PRIMARY KEY USING HASH (TRANSACTION_ID,ACCOUNT))
- ENGINE = NDB;
-
-DROP TABLE IF EXISTS SYSTEM_VALUES;
-CREATE TABLE SYSTEM_VALUES ( SYSTEM_VALUES_ID INT UNSIGNED NOT NULL,
- VALUE BIGINT UNSIGNED NOT NULL,
- PRIMARY KEY USING HASH (SYSTEM_VALUES_ID))
- ENGINE = NDB;
-
-DROP TABLE IF EXISTS ACCOUNT_TYPE;
-CREATE TABLE ACCOUNT_TYPE ( ACCOUNT_TYPE_ID INT UNSIGNED NOT NULL,
- DESCRIPTION CHAR(64) NOT NULL,
- PRIMARY KEY USING HASH (ACCOUNT_TYPE_ID))
- ENGINE = NDB;
=== removed file 'storage/ndb/test/sql/T1.sql'
--- a/storage/ndb/test/sql/T1.sql 2011-01-30 20:42:21 +0000
+++ b/storage/ndb/test/sql/T1.sql 1970-01-01 00:00:00 +0000
@@ -1,24 +0,0 @@
--- Copyright (C) 2005 MySQL AB
---
--- This program is free software; you can redistribute it and/or modify
--- it under the terms of the GNU General Public License as published by
--- the Free Software Foundation; version 2 of the License.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program; if not, write to the Free Software
--- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-create database if not exists TEST_DB;
-use TEST_DB;
-drop table if exists T1;
-create table T1 (KOL1 int unsigned not null,
- KOL2 int unsigned not null,
- KOL3 int unsigned not null,
- KOL4 int unsigned not null,
- KOL5 int unsigned not null,
- primary key using hash(KOL1)) engine=ndb;
=== removed file 'storage/ndb/test/sql/test_create_drop.pl'
--- a/storage/ndb/test/sql/test_create_drop.pl 2011-01-30 20:42:21 +0000
+++ b/storage/ndb/test/sql/test_create_drop.pl 1970-01-01 00:00:00 +0000
@@ -1,194 +0,0 @@
-# Copyright (C) 2005 MySQL AB
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-use strict;
-use IO::Socket;
-use DBI;
-
-# mgm info
-my $mgmhost = "localhost";
-my $mgmport = 38101;
-
-# location of ndb_x_fs
-my $datadir = "c2";
-my @schemafiles = <$datadir/ndb_*_fs/D[12]/DBDICT/P0.SchemaLog>;
-@schemafiles or die "no schemafiles in $datadir";
-
-my $dsn;
-$dsn = "dbi:mysql:test:localhost;port=38100";
-
-# this works better for me
-my $cnf = $ENV{MYSQL_HOME} . "/var/my.cnf";
-$dsn = "dbi:mysql:database=test;host=localhost;mysql_read_default_file=$cnf";
-
-my $dbh;
-$dbh = DBI->connect($dsn, 'root', undef, { RaiseError => 0, PrintError => 0 });
-$dbh or die $DBI::errstr;
-
-# mgm commands
-
-my $mgm = undef;
-
-sub mgmconnect {
- $mgm = IO::Socket::INET->new(
- Proto => "tcp",
- PeerHost => $mgmhost,
- PeerPort => $mgmport);
- $mgm or die "connect to mgm failed: $!";
- $mgm->autoflush(1);
-};
-
-mgmconnect();
-warn "connected to mgm $mgmhost $mgmport\n";
-
-my $nodeinfo = {};
-
-sub getnodeinfo {
- $nodeinfo = {};
- $mgm->print("get status\n");
- $mgm->print("\n");
- while (defined($_ = $mgm->getline)) {
- /^node\s+status/ && last;
- }
- while (defined($_ = $mgm->getline)) {
- /^\s*$/ && last;
- /^node\.(\d+)\.(\w+):\s*(\S+)/ && ($nodeinfo->{$1}{$2} = $3);
- }
-}
-
-getnodeinfo();
-
-my @dbnode = ();
-for my $n (keys %$nodeinfo) {
- my $p = $nodeinfo->{$n};
- ($p->{type} eq 'NDB') && push(@dbnode, $n);
-}
-@dbnode = sort { $a <=> $b } @dbnode;
-@dbnode or die "mgm error, found no db nodes";
-warn "db nodes: @dbnode\n";
-
-sub restartnode {
- my($n, $initialstart) = @_;
- warn "restart node $n initialstart=$initialstart\n";
- $mgm->print("restart node\n");
- $mgm->print("node: $n\n");
- $mgm->print("initialstart: $initialstart\n");
- $mgm->print("\n");
- while (1) {
- sleep 5;
- getnodeinfo();
- my $status = $nodeinfo->{$n}{status};
- my $sp = $nodeinfo->{$n}{startphase};
- warn "node $n status: $status sp: $sp\n";
- last if $status eq 'STARTED';
- }
-}
-
-sub restartall {
- warn "restart all\n";
- $mgm->print("restart all\n");
- $mgm->print("\n");
- while (1) {
- sleep 5;
- getnodeinfo();
- my $ok = 1;
- for my $n (@dbnode) {
- my $status = $nodeinfo->{$n}{status};
- my $sp = $nodeinfo->{$n}{startphase};
- warn "node $n status: $status sp: $sp\n";
- $ok = 0 if $status ne 'STARTED';
- }
- last if $ok;
- }
-}
-
-# the sql stuff
-
-my $maxtab = 300;
-my @tab = ();
-
-sub create {
- my($n) = @_;
- my $sql = "create table t$n (a int primary key, b varchar(20), key (b)) engine=ndb";
- warn "create t$n\n";
- $dbh->do($sql) or die "$sql\n$DBI::errstr";
-}
-
-sub drop {
- my($n) = @_;
- my $sql = "drop table t$n";
- warn "drop t$n\n";
- $dbh->do($sql) or die "$sql\n$DBI::errstr";
-}
-
-sub dropall {
- for my $n (0..($maxtab-1)) {
- my $sql = "drop table if exists t$n";
- $dbh->do($sql) or die "$sql\n$DBI::errstr";
- }
-}
-
-sub createdrop {
- my $n = int(rand($maxtab));
- if (! $tab[$n]) {
- create($n);
- $tab[$n] = 1;
- } else {
- drop($n);
- $tab[$n] = 0;
- }
-}
-
-sub checkschemafiles {
- system("printSchemaFile -ce @schemafiles");
- $? == 0 or die "schemafiles check failed";
-}
-
-sub randomrestart {
- my($k) = @_;
- my $s = int(rand(500));
- if ($s < 2) {
- my $i = $k % scalar(@dbnode);
- my $n = $dbnode[$i];
- my $initialstart = ($s < 1 ? 0 : 1);
- restartnode($n, $initialstart);
- return 1;
- }
- if ($s < 3) {
- restartall();
- return 1;
- }
- return 0;
-}
-
-# deterministic
-srand(1);
-
-warn "drop any old tables\n";
-dropall();
-
-my $loop = 1000000;
-for my $k (0..($loop-1)) {
- warn "$k\n";
- createdrop();
- checkschemafiles();
- if (randomrestart($k)) {
- checkschemafiles();
- }
-}
-
-$dbh->disconnect or die $DBI::errstr;
-
-# vim: set sw=2:
=== removed file 'storage/ndb/test/sql/test_range_bounds.pl'
--- a/storage/ndb/test/sql/test_range_bounds.pl 2011-01-30 20:42:21 +0000
+++ b/storage/ndb/test/sql/test_range_bounds.pl 1970-01-01 00:00:00 +0000
@@ -1,233 +0,0 @@
-# Copyright (C) 2005 MySQL AB
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-#
-# test range scan bounds
-# give option --all to test all cases
-# set MYSQL_HOME to installation top
-#
-
-use strict;
-use integer;
-use Getopt::Long;
-use DBI;
-
-my $opt_all = 0;
-my $opt_cnt = 5;
-my $opt_verbose = 0;
-GetOptions("all" => \$opt_all, "cnt=i" => \$opt_cnt, "verbose" => \$opt_verbose)
- or die "options are: --all --cnt=N --verbose";
-
-my $mysql_home = $ENV{MYSQL_HOME};
-defined($mysql_home) or die "no MYSQL_HOME";
-my $dsn = "dbi:mysql:database=test;host=localhost;mysql_read_default_file=$mysql_home/var/my.cnf";
-my $opts = { RaiseError => 0, PrintError => 0, AutoCommit => 1, };
-
-my $dbh;
-my $sth;
-my $sql;
-
-$dbh = DBI->connect($dsn, "root", undef, $opts) or die $DBI::errstr;
-
-my $table = 't';
-
-$sql = "drop table if exists $table";
-$dbh->do($sql) or die $DBI::errstr;
-
-sub cut ($$$) {
- my($op, $key, $val) = @_;
- $op = '==' if $op eq '=';
- my(@w) = @$val;
- eval "\@w = grep(\$_ $op $key, \@w)";
- $@ and die $@;
- return [ @w ];
-}
-
-sub mkdummy ($) {
- my ($val) = @_;
- return {
- 'dummy' => 1,
- 'exp' => '9 = 9',
- 'res' => $val,
- };
-}
-
-sub mkone ($$$$) {
- my($col, $op, $key, $val) = @_;
- my $res = cut($op, $key, $val);
- return {
- 'exp' => "$col $op $key",
- 'res' => $res,
- };
-}
-
-sub mktwo ($$$$$$) {
- my($col, $op1, $key1, $op2, $key2, $val) = @_;
- my $res = cut($op2, $key2, cut($op1, $key1, $val));
- return {
- 'exp' => "$col $op1 $key1 and $col $op2 $key2",
- 'res' => $res,
- };
-}
-
-sub mkall ($$$$) {
- my($col, $key1, $key2, $val) = @_;
- my @a = ();
- my $p = mkdummy($val);
- push(@a, $p) if $opt_all;
- my @ops = qw(< <= = >= >);
- for my $op (@ops) {
- my $p = mkone($col, $op, $key1, $val);
- push(@a, $p) if $opt_all || @{$p->{res}} != 0;
- }
- my @ops1 = $opt_all ? @ops : qw(= >= >);
- my @ops2 = $opt_all ? @ops : qw(<= <);
- for my $op1 (@ops1) {
- for my $op2 (@ops2) {
- my $p = mktwo($col, $op1, $key1, $op2, $key2, $val);
- push(@a, $p) if $opt_all || @{$p->{res}} != 0;
- }
- }
- warn scalar(@a)." cases\n" if $opt_verbose;
- return \@a;
-}
-
-my $casecnt = 0;
-
-sub verify ($$$) {
- my($sql, $ord, $res) = @_;
- warn "$sql\n" if $opt_verbose;
- $sth = $dbh->prepare($sql) or die "prepare: $sql: $DBI::errstr";
- $sth->execute() or die "execute: $sql: $DBI::errstr";
- #
- # BUG: execute can return success on error so check again
- #
- $sth->err and die "execute: $sql: $DBI::errstr";
- my @out = ();
- for my $b (@{$res->[0]}) {
- for my $c (@{$res->[1]}) {
- for my $d (@{$res->[2]}) {
- push(@out, [$b, $c, $d]);
- }
- }
- }
- if ($ord) {
- @out = sort {
- $ord * ($a->[0] - $b->[0]) ||
- $ord * ($a->[1] - $b->[1]) ||
- $ord * ($a->[2] - $b->[2]) ||
- 0
- } @out;
- }
- my $cnt = scalar @out;
- my $n = 0;
- while (1) {
- my $row = $sth->fetchrow_arrayref;
- $row || last;
- @$row == 3 or die "bad row: $sql: @$row";
- for my $v (@$row) {
- $v =~ s/^\s+|\s+$//g;
- $v =~ /^\d+$/ or die "bad value: $sql: $v";
- }
- if ($ord) {
- my $out = $out[$n];
- $row->[0] == $out->[0] &&
- $row->[1] == $out->[1] &&
- $row->[2] == $out->[2] or
- die "$sql: row $n: got row @$row != @$out";
- }
- $n++;
- }
- $sth->err and die "fetch: $sql: $DBI::errstr";
- $n == $cnt or die "verify: $sql: got row count $n != $cnt";
- $casecnt++;
-}
-
-for my $nn ("bcd", "") {
- my %nn;
- for my $x (qw(b c d)) {
- $nn{$x} = $nn =~ /$x/ ? "not null" : "null";
- }
- warn "create table\n";
- $sql = <<EOF;
-create table $table (
- a int primary key,
- b int $nn{b},
- c int $nn{c},
- d int $nn{d},
- index (b, c, d)
-) engine=ndb
-EOF
- $dbh->do($sql) or die $DBI::errstr;
- warn "insert\n";
- $sql = "insert into $table values(?, ?, ?, ?)";
- $sth = $dbh->prepare($sql) or die $DBI::errstr;
- my @val = (0..($opt_cnt-1));
- my $v0 = 0;
- for my $v1 (@val) {
- for my $v2 (@val) {
- for my $v3 (@val) {
- $sth->bind_param(1, $v0) or die $DBI::errstr;
- $sth->bind_param(2, $v1) or die $DBI::errstr;
- $sth->bind_param(3, $v2) or die $DBI::errstr;
- $sth->bind_param(4, $v3) or die $DBI::errstr;
- $sth->execute or die $DBI::errstr;
- $v0++;
- }
- }
- }
- warn "generate cases\n";
- my $key1 = 1;
- my $key2 = 3;
- my $a1 = mkall('b', $key1, $key2, \@val);
- my $a2 = mkall('c', $key1, $key2, \@val);
- my $a3 = mkall('d', $key1, $key2, \@val);
- warn "select\n";
- for my $ord (0, +1, -1) {
- my $orderby =
- $ord == 0 ? "" :
- $ord == +1 ? " order by b, c, d" :
- $ord == -1 ? " order by b desc, c desc, d desc" : die "not here";
- for my $p1 (@$a1) {
- my $res = [ $p1->{res}, \@val, \@val ];
- $sql = "select b, c, d from $table" .
- " where $p1->{exp}" .
- $orderby;
- verify($sql, $ord, $res);
- for my $p2 (@$a2) {
- my $res = [ $p1->{res}, $p2->{res}, \@val ];
- $sql = "select b, c, d from $table" .
- " where $p1->{exp} and $p2->{exp}" .
- $orderby;
- verify($sql, $ord, $res);
- for my $p3 (@$a3) {
- my $res = [ $p1->{res}, $p2->{res}, $p3->{res} ];
- $sql = "select b, c, d from $table" .
- " where $p1->{exp} and $p2->{exp} and $p3->{exp}" .
- $orderby;
- verify($sql, $ord, $res);
- }
- }
- }
- }
- warn "drop table\n";
- $sql = "drop table $table";
- $dbh->do($sql) or die $DBI::errstr;
-}
-
-warn "verified $casecnt cases\n";
-warn "done\n";
-
-# vim: set sw=2:
=== removed file 'storage/ndb/tools/clean-links.sh'
--- a/storage/ndb/tools/clean-links.sh 2011-01-30 20:42:21 +0000
+++ b/storage/ndb/tools/clean-links.sh 1970-01-01 00:00:00 +0000
@@ -1,36 +0,0 @@
-#! /bin/sh
-
-# Copyright (C) 2003, 2005 MySQL AB
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-# 1 - Dir
-# 2 - Link dst
-
-if [ $# -lt 1 ]
-then
- exit 0
-fi
-
-files=`find $1 -type l -maxdepth 1`
-res=$?
-if [ $res -ne 0 ] || [ "$files" = "" ]
-then
- exit 0
-fi
-
-rm -f $files
-
-
-
=== removed file 'storage/ndb/tools/make-errors.pl'
--- a/storage/ndb/tools/make-errors.pl 2011-01-30 20:42:21 +0000
+++ b/storage/ndb/tools/make-errors.pl 1970-01-01 00:00:00 +0000
@@ -1,196 +0,0 @@
-#! /usr/local/bin/perl
-
-# Copyright (C) 2003, 2005 MySQL AB
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-use strict;
-use Getopt::Long;
-use XML::Parser;
-
-(my $progname = $0) =~ s!^.*/!!;
-
-sub usage {
- my $errstr = "@_";
- while (chomp($errstr)) {}
- print <<END;
-$progname: $errstr
-$progname -- read codes.xml and write codes.hpp and codes.cpp
-usage: $progname [options] codes.xml
--c check xml file only
--d check xml file and show diff against old hpp and cpp
-END
- exit(1);
-}
-
-my $opts = {};
-opts: {
- local $SIG{__WARN__} = \&usage;
- GetOptions($opts, qw(c d));
-}
-@ARGV == 1 or usage("one filename argument expected");
-my $filexml = shift;
-$filexml =~ /^(.*)\.xml$/ or usage("$filexml does not end in .xml");
-my $filehpp = "$1.hpp";
-my $filecpp = "$1.cpp";
-
-my $temphpp = "$filehpp-new";
-my $tempcpp = "$filecpp-new";
-unlink $temphpp, $tempcpp;
-open(HPP, ">$temphpp") or die "$temphpp: $!\n";
-open(CPP, ">$tempcpp") or die "$tempcpp: $!\n";
-
-my $i2 = " " x 2;
-my $i4 = " " x 4;
-my $lb = "{";
-my $rb = "}";
-
-sub disclaimer {
- my $filename = shift;
- return <<END;
-/*
- * $filename -- DO NOT EDIT !!
- *
- * To create a new version (both *.hpp and *.cpp):
- *
- * 1) edit $filexml
- * 2) perl tools/$progname $filexml
- * 3) check all files (*.xml *.hpp *.cpp) into CVS
- *
- * On RedHat linux requires perl-XML-Parser package.
- */
-END
-}
-
-my $classname = $filehpp;
-$classname =~ s!^.*/!!;
-$classname =~ s/\.hpp$//;
-
-sub handle_init {
- my($parser) = @_;
- my $guard = $filehpp;
- $guard =~ s!^.*/!!;
- $guard =~ s!([a-z])([A-Z])!${1}_${2}!g;
- $guard =~ s!\.!_!g;
- $guard = uc($guard);
- print HPP "#ifndef $guard\n#define $guard\n\n";
- print HPP disclaimer($filehpp), "\n";
- print HPP "class $classname $lb\n";
- print HPP "${i2}enum Value $lb\n";
- print CPP disclaimer($filecpp), "\n";
- print CPP "/* included in Ndberror.cpp */\n\n";
-}
-
-my %classhash = (
- ApplicationError => 1,
- NoDataFound => 1,
- ConstraintViolation => 1,
- SchemaError => 1,
- UserDefinedError => 1,
- InsufficientSpace => 1,
- TemporaryResourceError => 1,
- NodeRecoveryError => 1,
- OverloadError => 1,
- TimeoutExpired => 1,
- UnknownResultError => 1,
- InternalError => 1,
- FunctionNotImplemented => 1,
- UnknownErrorCode => 1,
- NodeShutdown => 1,
-);
-
-my $section = undef;
-my %codehash = ();
-my %namehash = ();
-
-sub handle_start {
- my($parser, $tag, %attr) = @_;
- if ($tag eq 'Error') {
- return;
- }
- if ($tag eq 'Section') {
- $section = $attr{name};
- $section =~ /^\w+$/ or
- $parser->xpcroak("invalid or missing section name");
- return;
- }
- if ($tag eq 'Code') {
- print HPP ",\n" if %codehash;
- print CPP ",\n" if %codehash;
- my $name = $attr{name};
- my $class = $attr{class};
- my $code = $attr{code};
- my $message = $attr{message};
- $name =~ /^\w+$/ or
- $parser->xpcroak("invalid or missing error name '$name'");
- $namehash{$name}++ and
- $parser->xpcroak("duplicate error name '$name'");
- $classhash{$class} or
- $parser->xpcroak("invalid or missing error class '$class'");
- $code =~ /^\d+$/ or
- $parser->xpcroak("invalid or missing error code '$code'");
- $codehash{$code}++ and
- $parser->xpcroak("duplicate error code '$code'");
- $message =~ /\S/ or
- $parser->xpcroak("invalid or missing error message '$message'");
- $message =~ s/^\s+|\s+$//g;
- my $enum = "${section}_${name}";
- print HPP "${i4}$enum = $code";
- print CPP "${i2}$lb ${classname}::$enum,\n";
- print CPP "${i4}NdbError::$class,\n";
- print CPP "${i4}\"$message\"\n";
- print CPP "${i2}$rb";
- return;
- }
- $parser->xpcroak("unknown tag $tag");
-}
-
-sub handle_end {
- my($parser, $tag) = @_;
-}
-
-sub handle_final {
- print HPP "\n" if %codehash;
- print HPP "${i2}$rb;\n";
- print HPP "$rb;\n\n#endif\n";
- print CPP ",\n" if 1;
- return 1;
-}
-
-my $parser = new XML::Parser(
- ParseParamEnt => 1,
- Handlers => {
- Init => \&handle_init,
- Start => \&handle_start,
- End => \&handle_end,
- Final => \&handle_final,
- },
- ErrorContext => 0,
-);
-eval {
- $parser->parsefile($filexml);
-};
-if ($@) {
- my $errstr = join("\n", grep(m!\S! && ! m!^\s*at\s!, split(/\n/, $@)));
- die "$filexml:\n$errstr\n";
-}
-
-close(HPP);
-close(CPP);
-rename($temphpp, $filehpp);
-rename($tempcpp, $filecpp);
-
-1;
-
-# vim:set sw=4:
=== removed file 'storage/ndb/tools/make-links.sh'
--- a/storage/ndb/tools/make-links.sh 2011-01-30 20:42:21 +0000
+++ b/storage/ndb/tools/make-links.sh 1970-01-01 00:00:00 +0000
@@ -1,35 +0,0 @@
-#! /bin/sh
-
-# Copyright (C) 2003, 2005 MySQL AB
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-# 1 - Link top src
-# 2 - Link dst
-
-if [ $# -lt 2 ]
-then
- exit 0
-fi
-
-name=`basename $2`
-files=`find $1/$name -type f -name '*.h*'`
-
-for i in $files
-do
- ln -s $i $2/`basename $i`
-done
-
-
-
No bundle (reason: revision is a merge).
| Thread |
|---|
| • bzr commit into mysql-5.1-telco-7.0-spj-scan-vs-scan branch(ole.john.aske:3447) | Ole John Aske | 17 Mar |