Current Path : /home/usr.opt/mysql57/mysql-test/suite/ndb_binlog/t/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //home/usr.opt/mysql57/mysql-test/suite/ndb_binlog/t/ndb_binlog_basic.test |
# The include statement below is a temp one for tests that are yet to #be ported to run with InnoDB, #but needs to be kept for tests that would need MyISAM in future. --source include/force_myisam_default.inc -- source include/have_ndb.inc -- source include/have_binlog_format_mixed_or_row.inc --disable_warnings drop table if exists t1, t2; drop database if exists mysqltest; create database mysqltest; use mysqltest; drop database mysqltest; use test; --enable_warnings # # basic insert, update, delete test, alter, rename, drop # check that ndb_binlog_index gets the right info # reset master; create table t1 (a int primary key) engine=ndb; insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); save_master_pos; --replace_column 1 # select @max_epoch:=max(epoch)-1 from mysql.ndb_binlog_index; delete from t1; alter table t1 add (b int); insert into t1 values (3,3),(4,4); alter table t1 rename t2; # get all in one epoch begin; insert into t2 values (1,1),(2,2); update t2 set b=1 where a=3; delete from t2 where a=4; commit; drop table t2; # check that above is ok # (save_master_pos waits for last gcp to complete, ensuring that we have # the expected data in the binlog) save_master_pos; select inserts from mysql.ndb_binlog_index where epoch > @max_epoch and inserts > 5; select deletes from mysql.ndb_binlog_index where epoch > @max_epoch and deletes > 5; select inserts,updates,deletes from mysql.ndb_binlog_index where epoch > @max_epoch and updates > 0; # # check that purge clears the ndb_binlog_index # # TODO: make this deterministic # This test is disabled until we can make this determistic under load. # The problem is that in some cases, the binlog writing thread gets # scheduled after the purge, writes pending things, then the select # gets scheduled # flush logs; --sleep 1 --replace_regex /\.[\\\/]mysqld/.\/mysqld/; purge master logs before now(); --disable_parsing select count(*) from mysql.ndb_binlog_index; --enable_parsing # # several tables in different databases # check that same table name in different databases don't mix up # create table t1 (a int primary key, b int) engine=ndb; create database mysqltest; use mysqltest; create table t1 (c int, d int primary key) engine=ndb; use test; insert into mysqltest.t1 values (2,1),(2,2); save_master_pos; --replace_column 1 # select @max_epoch:=max(epoch)-1 from mysql.ndb_binlog_index; drop table t1; drop database mysqltest; select inserts,updates,deletes from mysql.ndb_binlog_index where epoch > @max_epoch and inserts > 0; # # Check optimize table does not send any event to binlog # create table t1 (c1 int not null primary key, c2 blob default null) engine=ndbcluster default charset=latin1; insert into t1 values (1, null), (2, null), (3, null), (4, null); insert into t1 select c1+4,c2 from t1; insert into t1 select c1+8,c2 from t1; insert into t1 select c1+16,c2 from t1; insert into t1 select c1+32,c2 from t1; insert into t1 select c1+64,c2 from t1; insert into t1 select c1+128,c2 from t1; insert into t1 select c1+256,c2 from t1; insert into t1 select c1+512,c2 from t1; # wait for last gcp to complete, ensuring that we have # the expected data in the binlog save_master_pos; let $before = `select count(*) from mysql.ndb_binlog_index where epoch > @max_epoch and (inserts > 0 or updates > 0 or deletes > 0)`; optimize table t1; save_master_pos; # Ensure that optimize have not sent any event to binlog let $optimize_diff = `select count(*) <> $before from mysql.ndb_binlog_index where epoch > @max_epoch and (inserts > 0 or updates > 0 or deletes > 0)`; if ($optimize_diff) { die Optimize table should not send any events to binlog; } drop table t1; # # Make binlog to ignore an empty blob column update # having before- and after-values 'null' # when performed in a separate epoch and # empty epochs are not logged. # Run the test twice, with ndb_log_empty_epochs ON and OFF. # let $repetitions=2; SET GLOBAL ndb_log_empty_epochs=ON; while ($repetitions) { SHOW VARIABLES LIKE 'ndb_log_empty_epochs'; create table t1 (c1 int not null primary key, c2 blob default null) engine=ndbcluster default charset=latin1; insert into t1 values (1, null); # Avoid the following update being performed within the same epoch by # synchronising with Binlog --disable_result_log show binlog events; --enable_result_log update t1 set c2=null; select * from t1; --disable_result_log show binlog events; --enable_result_log optimize table t1; select * from t1; drop table t1; create table t1 (c1 int not null primary key, c2 varchar(1024) default null) engine=ndbcluster default charset=latin1; insert into t1 values (3, null); select * from t1; --disable_result_log show binlog events; --enable_result_log optimize table t1; select * from t1; drop table t1; # Repeat the test with SET GLOBAL ndb_log_empty_epochs=OFF; --disable_result_log show binlog events; --enable_result_log dec $repetitions; }