-- source include/have_ndb.inc -- source include/have_multi_ndb.inc -- source include/not_embedded.inc # see bug#21563 -- source include/have_binlog_format_row.inc --disable_warnings drop table if exists t1, t2; --enable_warnings # # Transaction ongoing while cluster is restarted # --connection server1 create table t1 (a int key) engine=ndbcluster; begin; insert into t1 values (1); --exec $NDB_MGM --no-defaults -e "all restart" >> $NDB_TOOLS_OUTPUT --exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults >> $NDB_TOOLS_OUTPUT # Wait for mysqld to reconnect and exit from readonly mode # Should preferrably be a "while (!"select ndb_readonly")" loop sleep 2; --error 1297 insert into t1 values (2); --error 1296 commit; drop table t1; # # Stale cache after restart -i # --connection server1 create table t2 (a int, b int, primary key(a,b)) engine=ndbcluster; insert into t2 values (1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1),(10,1); select * from t2 order by a limit 3; --exec $NDB_MGM --no-defaults -e "all restart -i" >> $NDB_TOOLS_OUTPUT --exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults >> $NDB_TOOLS_OUTPUT # to ensure mysqld has connected again, and recreated system tables --exec $NDB_TOOLS_DIR/ndb_desc --no-defaults -r 30 -d cluster ndb_apply_status >> $NDB_TOOLS_OUTPUT sleep 2; --connection server2 --error ER_NO_SUCH_TABLE select * from t2; show tables like 't2'; reset master; create table t2 (a int key) engine=ndbcluster; insert into t2 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); select * from t2 order by a limit 3; # server 1 should have a stale cache, and in this case wrong frm, transaction must be retried --connection server1 select * from t2 order by a limit 3; reset master; --exec $NDB_MGM --no-defaults -e "all restart -i" >> $NDB_TOOLS_OUTPUT --exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults >> $NDB_TOOLS_OUTPUT # to ensure mysqld has connected again, and recreated system tables --exec $NDB_TOOLS_DIR/ndb_desc --no-defaults -r 30 -d cluster ndb_apply_status >> $NDB_TOOLS_OUTPUT sleep 2; --connection server1 --error ER_NO_SUCH_TABLE select * from t2; show tables like 't2'; reset master; create table t2 (a int key) engine=ndbcluster; insert into t2 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); select * from t2 order by a limit 3; # server 2 should have a stale cache, but with right frm, transaction need not be retried --connection server2 select * from t2 order by a limit 3; reset master; drop table t2; # End of 4.1 tests