Browse Source
Many files:
Many files:
New test cases for generic apply status table rpl_ndb_dd_advance.test: Updated test case to not run sooo long show_binlog_using_logname.inc, tpcb_disk_data.inc: New support file rpl_ndb_dd_advance.result: Updated result tpcb.inc: New support file for Updated test case to not run sooo long mysql-test/t/rpl_ndb_dd_advance.test: Updated test case to not run sooo long mysql-test/include/tpcb.inc: New support file for Updated test case to not run sooo long mysql-test/r/rpl_ndb_dd_advance.result: Updated result mysql-test/t/rpl_ndb_mix_innodb.test: New test cases for generic apply status table mysql-test/t/rpl_ndb_stm_innodb.test: New test cases for generic apply status table mysql-test/extra/rpl_tests/rpl_ndb_apply_status.test: New test cases for generic apply status table mysql-test/t/rpl_ndb_stm_innodb-master.opt: New test cases for generic apply status table mysql-test/t/rpl_ndb_mix_innodb-master.opt: New test cases for generic apply status table mysql-test/include/tpcb_disk_data.inc: New support file mysql-test/include/show_binlog_using_logname.inc: New support file mysql-test/r/rpl_ndb_stm_innodb.result: New test cases for generic apply status table mysql-test/r/rpl_ndb_mix_innodb.result: New test cases for generic apply status tablepull/374/head
12 changed files with 985 additions and 371 deletions
-
290mysql-test/extra/rpl_tests/rpl_ndb_apply_status.test
-
13mysql-test/include/show_binlog_using_logname.inc
-
155mysql-test/include/tpcb.inc
-
166mysql-test/include/tpcb_disk_data.inc
-
178mysql-test/r/rpl_ndb_dd_advance.result
-
129mysql-test/r/rpl_ndb_mix_innodb.result
-
104mysql-test/r/rpl_ndb_stm_innodb.result
-
191mysql-test/t/rpl_ndb_dd_advance.test
-
1mysql-test/t/rpl_ndb_mix_innodb-master.opt
-
36mysql-test/t/rpl_ndb_mix_innodb.test
-
2mysql-test/t/rpl_ndb_stm_innodb-master.opt
-
91mysql-test/t/rpl_ndb_stm_innodb.test
@ -0,0 +1,290 @@ |
|||
############################################# |
|||
#Authors: TU and Jeb |
|||
#Date: 2007/04 |
|||
#Purpose: Generic replication to cluster |
|||
# and ensuring that the ndb_apply_status |
|||
# table is updated. |
|||
############################################# |
|||
# Notes: |
|||
# include/select_ndb_apply_status.inc |
|||
# Selects out the log name, start & end pos |
|||
# from the ndb_apply_status table |
|||
# |
|||
# include/show_binlog_using_logname.inc |
|||
# To select out 1 row from offset 1 |
|||
# from the start position in the binlog whose |
|||
# name is = log_name |
|||
# |
|||
# include/tpcb.inc |
|||
# Creates DATABASE tpcb, the tables and |
|||
# stored procedures for loading the DB |
|||
# and for running transactions against DB. |
|||
############################################## |
|||
|
|||
|
|||
--echo |
|||
--echo *** Test 1 *** |
|||
--echo |
|||
|
|||
connection master; |
|||
create table t1 (a int key, b int) engine innodb; |
|||
create table t2 (a int key, b int) engine innodb; |
|||
|
|||
--echo |
|||
|
|||
--sync_slave_with_master |
|||
alter table t1 engine ndb; |
|||
alter table t2 engine ndb; |
|||
|
|||
--echo |
|||
|
|||
# check binlog position without begin |
|||
connection master; |
|||
insert into t1 values (1,2); |
|||
|
|||
--echo |
|||
|
|||
--sync_slave_with_master |
|||
--source include/select_ndb_apply_status.inc |
|||
|
|||
--echo |
|||
|
|||
connection master; |
|||
# here is actually a bug, since there is no begin statement, the |
|||
# query is autocommitted, and end_pos shows end of the insert and not |
|||
# end of the commit |
|||
--replace_result $start_pos <start_pos> |
|||
--replace_column 5 # |
|||
--eval show binlog events from $start_pos limit 1 |
|||
--echo |
|||
--replace_result $start_pos <start_pos> $end_pos <end_pos> |
|||
--replace_column 2 # |
|||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ |
|||
--eval show binlog events from $start_pos limit 1,1 |
|||
|
|||
--echo |
|||
|
|||
# check binlog position with begin |
|||
begin; |
|||
insert into t1 values (2,3); |
|||
insert into t2 values (3,4); |
|||
commit; |
|||
|
|||
--echo |
|||
|
|||
--sync_slave_with_master |
|||
--source include/select_ndb_apply_status.inc |
|||
|
|||
connection master; |
|||
--replace_result $start_pos <start_pos> |
|||
--replace_column 5 # |
|||
--eval show binlog events from $start_pos limit 1 |
|||
--echo |
|||
--replace_result $start_pos <start_pos> |
|||
--replace_column 2 # 4 # 5 # |
|||
--eval show binlog events from $start_pos limit 1,2 |
|||
--echo |
|||
--replace_result $start_pos <start_pos> $end_pos <end_pos> |
|||
--replace_column 2 # |
|||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ |
|||
--eval show binlog events from $start_pos limit 3,1 |
|||
|
|||
--echo |
|||
|
|||
connection master; |
|||
DROP TABLE test.t1, test.t2; |
|||
--sync_slave_with_master |
|||
SHOW TABLES; |
|||
|
|||
# Run in some transactions using stored procedures |
|||
# and ensure that the ndb_apply_status table is |
|||
# updated to show the transactions |
|||
|
|||
|
|||
--echo |
|||
--echo *** Test 2 *** |
|||
--echo |
|||
|
|||
# Create database/tables and stored procdures |
|||
connection master; |
|||
--source include/tpcb.inc |
|||
|
|||
# Switch tables on slave to use NDB |
|||
--sync_slave_with_master |
|||
USE tpcb; |
|||
ALTER TABLE account ENGINE NDB; |
|||
ALTER TABLE branch ENGINE NDB; |
|||
ALTER TABLE teller ENGINE NDB; |
|||
ALTER TABLE history ENGINE NDB; |
|||
|
|||
--echo |
|||
|
|||
# Load DB tpcb and run some transactions |
|||
connection master; |
|||
--disable_query_log |
|||
CALL tpcb.load(); |
|||
SET AUTOCOMMIT=0; |
|||
let $run= 5; |
|||
while ($run) |
|||
{ |
|||
START TRANSACTION; |
|||
--eval CALL tpcb.trans($rpl_format); |
|||
eval SET @my_errno= $mysql_errno; |
|||
let $run_good= `SELECT @my_errno = 0`; |
|||
let $run_bad= `SELECT @my_errno <> 0`; |
|||
if ($run_good) |
|||
{ |
|||
COMMIT; |
|||
} |
|||
if ($run_bad) |
|||
{ |
|||
ROLLBACK; |
|||
} |
|||
dec $run; |
|||
} |
|||
|
|||
SET AUTOCOMMIT=1; |
|||
--enable_query_log |
|||
|
|||
--sync_slave_with_master |
|||
--source include/select_ndb_apply_status.inc |
|||
|
|||
--echo |
|||
|
|||
connection master; |
|||
--source include/show_binlog_using_logname.inc |
|||
|
|||
# Flush the logs on the master moving all |
|||
# Transaction to a new binlog and ensure |
|||
# that the ndb_apply_status table is updated |
|||
# to show the use of the new binlog. |
|||
|
|||
--echo |
|||
--echo ** Test 3 ** |
|||
--echo |
|||
|
|||
# Flush logs on master which should force it |
|||
# to switch to binlog #2 |
|||
|
|||
FLUSH LOGS; |
|||
|
|||
# Run in some transaction to increase end pos in |
|||
# binlog |
|||
|
|||
--disable_query_log |
|||
SET AUTOCOMMIT=0; |
|||
let $run= 5; |
|||
while ($run) |
|||
{ |
|||
START TRANSACTION; |
|||
--eval CALL tpcb.trans($rpl_format); |
|||
eval SET @my_errno= $mysql_errno; |
|||
let $run_good= `SELECT @my_errno = 0`; |
|||
let $run_bad= `SELECT @my_errno <> 0`; |
|||
if ($run_good) |
|||
{ |
|||
COMMIT; |
|||
} |
|||
if ($run_bad) |
|||
{ |
|||
ROLLBACK; |
|||
} |
|||
dec $run; |
|||
} |
|||
SET AUTOCOMMIT=1; |
|||
--enable_query_log |
|||
|
|||
--echo |
|||
|
|||
--sync_slave_with_master |
|||
--source include/select_ndb_apply_status.inc |
|||
|
|||
--echo |
|||
|
|||
connection master; |
|||
--source include/show_binlog_using_logname.inc |
|||
|
|||
# Now we reset both the master and the slave |
|||
# Run some more transaction and ensure |
|||
# that the ndb_apply_status is updated |
|||
# correctly |
|||
|
|||
--echo |
|||
--echo ** Test 4 ** |
|||
--echo |
|||
|
|||
# Reset both slave and master |
|||
# This should reset binlog to #1 |
|||
--source include/master-slave-reset.inc |
|||
|
|||
--echo |
|||
|
|||
# Run in some transactions and check |
|||
connection master; |
|||
--disable_query_log |
|||
SET AUTOCOMMIT=0; |
|||
let $run= 5; |
|||
while ($run) |
|||
{ |
|||
START TRANSACTION; |
|||
--eval CALL tpcb.trans($rpl_format); |
|||
eval SET @my_errno= $mysql_errno; |
|||
let $run_good= `SELECT @my_errno = 0`; |
|||
let $run_bad= `SELECT @my_errno <> 0`; |
|||
if ($run_good) |
|||
{ |
|||
COMMIT; |
|||
} |
|||
if ($run_bad) |
|||
{ |
|||
ROLLBACK; |
|||
} |
|||
dec $run; |
|||
} |
|||
SET AUTOCOMMIT=1; |
|||
--enable_query_log |
|||
|
|||
--sync_slave_with_master |
|||
--source include/select_ndb_apply_status.inc |
|||
|
|||
--echo |
|||
|
|||
connection master; |
|||
--source include/show_binlog_using_logname.inc |
|||
|
|||
# Since we are doing replication, it is a good |
|||
# idea to check to make sure all data was |
|||
# Replicated correctly |
|||
|
|||
--echo |
|||
--echo *** DUMP MASTER & SLAVE FOR COMPARE ******** |
|||
|
|||
--exec $MYSQL_DUMP -n -t --compact --order-by-primary --skip-extended-insert tpcb account teller branch history > $MYSQLTEST_VARDIR/tmp/master_apply_status.sql |
|||
|
|||
--exec $MYSQL_DUMP_SLAVE -n -t --compact --order-by-primary --skip-extended-insert tpcb account teller branch history > $MYSQLTEST_VARDIR/tmp/slave_apply_status.sql |
|||
|
|||
connection master; |
|||
DROP DATABASE tpcb; |
|||
|
|||
--sync_slave_with_master |
|||
|
|||
####### Commenting out until decision on Bug#27960 ########### |
|||
|
|||
#--source include/select_ndb_apply_status.inc |
|||
|
|||
#connection master; |
|||
#--eval SHOW BINLOG EVENTS in '$log_name' from $start_pos |
|||
#--source include/show_binlog_using_logname.inc |
|||
|
|||
--echo ****** Do dumps compare ************ |
|||
|
|||
|
|||
diff_files $MYSQLTEST_VARDIR/tmp/master_apply_status.sql $MYSQLTEST_VARDIR/tmp/slave_apply_status.sql; |
|||
|
|||
## Note: Ths files should only get removed, if the above diff succeeds. |
|||
|
|||
--exec rm $MYSQLTEST_VARDIR/tmp/master_apply_status.sql |
|||
--exec rm $MYSQLTEST_VARDIR/tmp/slave_apply_status.sql |
|||
|
|||
|
|||
# End of 5.1 Test |
|||
@ -0,0 +1,13 @@ |
|||
######################################################## |
|||
# Author: Jeb |
|||
# Date: 2007/04 |
|||
# Purpose: To select out 1 row from offset 1 |
|||
# from the start position in the binlog whose |
|||
# name is = log_name |
|||
######################################################## |
|||
|
|||
--replace_result $start_pos <start_pos> $end_pos <end_pos> |
|||
--replace_column 2 # |
|||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ |
|||
--eval show binlog events in '$log_name' from $start_pos limit $off_set,1 |
|||
|
|||
@ -0,0 +1,155 @@ |
|||
################################################## |
|||
# Author: Jeb |
|||
# Date: 2007/04 |
|||
# Purpose: To create a tpcb database, tables and |
|||
# stored procedures to load the database |
|||
# and run transactions against the DB |
|||
################################################## |
|||
--disable_warnings |
|||
DROP DATABASE IF EXISTS tpcb; |
|||
--enable_warnings |
|||
CREATE DATABASE tpcb; |
|||
|
|||
--echo |
|||
CREATE TABLE tpcb.account (id INT, bid INT, balance DECIMAL(10,2), |
|||
filler CHAR(255), PRIMARY KEY(id)); |
|||
--echo |
|||
CREATE TABLE tpcb.branch (bid INT, balance DECIMAL(10,2), filler VARCHAR(255), |
|||
PRIMARY KEY(bid)); |
|||
--echo |
|||
CREATE TABLE tpcb.teller (tid INT, balance DECIMAL(10,2), filler VARCHAR(255), |
|||
PRIMARY KEY(tid)); |
|||
--echo |
|||
CREATE TABLE tpcb.history (id MEDIUMINT NOT NULL AUTO_INCREMENT,aid INT, |
|||
tid INT, bid INT, amount DECIMAL(10,2), |
|||
tdate DATETIME, teller CHAR(20), uuidf LONGBLOB, |
|||
filler CHAR(80),PRIMARY KEY (id)); |
|||
|
|||
--echo |
|||
--echo --- Create stored procedures & functions --- |
|||
--echo |
|||
|
|||
--disable_query_log |
|||
delimiter |; |
|||
CREATE PROCEDURE tpcb.load() |
|||
BEGIN |
|||
DECLARE acct INT DEFAULT 100; |
|||
DECLARE brch INT DEFAULT 10; |
|||
DECLARE tell INT DEFAULT 100; |
|||
DECLARE tmp INT DEFAULT 10; |
|||
WHILE brch > 0 DO |
|||
SET tmp = 100; |
|||
WHILE tmp > 0 DO |
|||
INSERT INTO tpcb.account VALUES (acct, brch, 0.0, "FRESH ACCOUNT"); |
|||
SET acct = acct - 1; |
|||
SET tmp = tmp -1; |
|||
END WHILE; |
|||
INSERT INTO tpcb.branch VALUES (brch, 0.0, "FRESH BRANCH"); |
|||
SET brch = brch - 1; |
|||
END WHILE; |
|||
WHILE tell > 0 DO |
|||
INSERT INTO tpcb.teller VALUES (tell, 0.0, "FRESH TELLER"); |
|||
SET tell = tell - 1; |
|||
END WHILE; |
|||
END| |
|||
|
|||
CREATE FUNCTION tpcb.account_id () RETURNS INT |
|||
BEGIN |
|||
DECLARE num INT; |
|||
DECLARE ran INT; |
|||
SELECT RAND() * 10 INTO ran; |
|||
IF (ran < 5) |
|||
THEN |
|||
SELECT RAND() * 10 INTO num; |
|||
ELSE |
|||
SELECT RAND() * 100 INTO num; |
|||
END IF; |
|||
IF (num < 1) |
|||
THEN |
|||
RETURN 1; |
|||
END IF; |
|||
RETURN num; |
|||
END| |
|||
|
|||
CREATE FUNCTION tpcb.teller_id () RETURNS INT |
|||
BEGIN |
|||
DECLARE num INT; |
|||
DECLARE ran INT; |
|||
SELECT RAND() * 10 INTO ran; |
|||
IF (ran < 5) |
|||
THEN |
|||
SELECT RAND() * 10 INTO num; |
|||
ELSE |
|||
SELECT RAND() * 100 INTO num; |
|||
END IF; |
|||
IF (num < 1) |
|||
THEN |
|||
RETURN 1; |
|||
END IF; |
|||
RETURN num; |
|||
END| |
|||
|
|||
CREATE PROCEDURE tpcb.trans(in format varchar(3)) |
|||
BEGIN |
|||
DECLARE acct INT DEFAULT 0; |
|||
DECLARE brch INT DEFAULT 0; |
|||
DECLARE tell INT DEFAULT 0; |
|||
DECLARE bal DECIMAL(10,2) DEFAULT 0.0; |
|||
DECLARE amount DECIMAL(10,2) DEFAULT 1.00; |
|||
DECLARE test INT DEFAULT 0; |
|||
DECLARE bbal DECIMAL(10,2) DEFAULT 0.0; |
|||
DECLARE tbal DECIMAL(10,2) DEFAULT 0.0; |
|||
DECLARE local_uuid VARCHAR(255); |
|||
DECLARE local_user VARCHAR(255); |
|||
DECLARE local_time TIMESTAMP; |
|||
|
|||
SELECT RAND() * 10 INTO test; |
|||
SELECT tpcb.account_id() INTO acct; |
|||
SELECT tpcb.teller_id() INTO tell; |
|||
|
|||
SELECT account.balance INTO bal FROM tpcb.account WHERE id = acct; |
|||
SELECT account.bid INTO brch FROM tpcb.account WHERE id = acct; |
|||
SELECT teller.balance INTO tbal FROM tpcb.teller WHERE tid = tell; |
|||
SELECT branch.balance INTO bbal FROM tpcb.branch WHERE bid = brch; |
|||
|
|||
IF (test < 5) |
|||
THEN |
|||
SET bal = bal + amount; |
|||
SET bbal = bbal + amount; |
|||
SET tbal = tbal + amount; |
|||
UPDATE tpcb.account SET balance = bal, filler = 'account updated' |
|||
WHERE id = acct; |
|||
UPDATE tpcb.branch SET balance = bbal, filler = 'branch updated' |
|||
WHERE bid = brch; |
|||
UPDATE tpcb.teller SET balance = tbal, filler = 'teller updated' |
|||
WHERE tid = tell; |
|||
ELSE |
|||
SET bal = bal - amount; |
|||
SET bbal = bbal - amount; |
|||
SET tbal = tbal - amount; |
|||
UPDATE tpcb.account SET balance = bal, filler = 'account updated' |
|||
WHERE id = acct; |
|||
UPDATE tpcb.branch SET balance = bbal, filler = 'branch updated' |
|||
WHERE bid = brch; |
|||
UPDATE tpcb.teller SET balance = tbal, filler = 'teller updated' |
|||
WHERE tid = tell; |
|||
END IF; |
|||
|
|||
IF (format = 'SBR') |
|||
THEN |
|||
SET local_uuid=UUID(); |
|||
SET local_user=USER(); |
|||
SET local_time= NOW(); |
|||
INSERT INTO tpcb.history VALUES(NULL,acct,tell,brch,amount, local_time,local_user, |
|||
local_uuid,'completed trans'); |
|||
ELSE |
|||
INSERT INTO tpcb.history VALUES(NULL,acct,tell,brch,amount, NOW(), USER(), |
|||
UUID(),'completed trans'); |
|||
END IF; |
|||
END| |
|||
delimiter ;| |
|||
--enable_query_log |
|||
--echo |
|||
--echo *** Stored Procedures Created *** |
|||
--echo |
|||
|
|||
@ -0,0 +1,166 @@ |
|||
################################################## |
|||
# Author: Jeb |
|||
# Date: 2007/05 |
|||
# Purpose: To create a tpcb database using Disk Data, |
|||
# tables and stored procedures to load the database |
|||
# and run transactions against the DB |
|||
################################################## |
|||
--disable_warnings |
|||
DROP DATABASE IF EXISTS tpcb; |
|||
--enable_warnings |
|||
CREATE DATABASE tpcb; |
|||
|
|||
--echo |
|||
eval CREATE TABLE tpcb.account |
|||
(id INT, bid INT, balance DECIMAL(10,2), |
|||
filler CHAR(255), PRIMARY KEY(id)) |
|||
TABLESPACE $table_space STORAGE DISK |
|||
ENGINE=$engine_type; |
|||
--echo |
|||
eval CREATE TABLE tpcb.branch |
|||
(bid INT, balance DECIMAL(10,2), filler VARCHAR(255), |
|||
PRIMARY KEY(bid))TABLESPACE $table_space STORAGE DISK |
|||
ENGINE=$engine_type; |
|||
--echo |
|||
eval CREATE TABLE tpcb.teller |
|||
(tid INT, balance DECIMAL(10,2), filler VARCHAR(255), |
|||
PRIMARY KEY(tid)) TABLESPACE $table_space STORAGE DISK |
|||
ENGINE=$engine_type; |
|||
|
|||
--echo |
|||
eval CREATE TABLE tpcb.history |
|||
(id MEDIUMINT NOT NULL AUTO_INCREMENT,aid INT, |
|||
tid INT, bid INT, amount DECIMAL(10,2), |
|||
tdate DATETIME, teller CHAR(20), uuidf LONGBLOB, |
|||
filler CHAR(80),PRIMARY KEY (id)) |
|||
TABLESPACE $table_space STORAGE DISK |
|||
ENGINE=$engine_type; |
|||
|
|||
--echo |
|||
--echo --- Create stored procedures & functions --- |
|||
--echo |
|||
|
|||
--disable_query_log |
|||
delimiter |; |
|||
CREATE PROCEDURE tpcb.load() |
|||
BEGIN |
|||
DECLARE acct INT DEFAULT 100; |
|||
DECLARE brch INT DEFAULT 10; |
|||
DECLARE tell INT DEFAULT 100; |
|||
DECLARE tmp INT DEFAULT 10; |
|||
WHILE brch > 0 DO |
|||
SET tmp = 100; |
|||
WHILE tmp > 0 DO |
|||
INSERT INTO tpcb.account VALUES (acct, brch, 0.0, "FRESH ACCOUNT"); |
|||
SET acct = acct - 1; |
|||
SET tmp = tmp -1; |
|||
END WHILE; |
|||
INSERT INTO tpcb.branch VALUES (brch, 0.0, "FRESH BRANCH"); |
|||
SET brch = brch - 1; |
|||
END WHILE; |
|||
WHILE tell > 0 DO |
|||
INSERT INTO tpcb.teller VALUES (tell, 0.0, "FRESH TELLER"); |
|||
SET tell = tell - 1; |
|||
END WHILE; |
|||
END| |
|||
|
|||
CREATE FUNCTION tpcb.account_id () RETURNS INT |
|||
BEGIN |
|||
DECLARE num INT; |
|||
DECLARE ran INT; |
|||
SELECT RAND() * 10 INTO ran; |
|||
IF (ran < 5) |
|||
THEN |
|||
SELECT RAND() * 10 INTO num; |
|||
ELSE |
|||
SELECT RAND() * 100 INTO num; |
|||
END IF; |
|||
IF (num < 1) |
|||
THEN |
|||
RETURN 1; |
|||
END IF; |
|||
RETURN num; |
|||
END| |
|||
|
|||
CREATE FUNCTION tpcb.teller_id () RETURNS INT |
|||
BEGIN |
|||
DECLARE num INT; |
|||
DECLARE ran INT; |
|||
SELECT RAND() * 10 INTO ran; |
|||
IF (ran < 5) |
|||
THEN |
|||
SELECT RAND() * 10 INTO num; |
|||
ELSE |
|||
SELECT RAND() * 100 INTO num; |
|||
END IF; |
|||
IF (num < 1) |
|||
THEN |
|||
RETURN 1; |
|||
END IF; |
|||
RETURN num; |
|||
END| |
|||
|
|||
CREATE PROCEDURE tpcb.trans(in format varchar(3)) |
|||
BEGIN |
|||
DECLARE acct INT DEFAULT 0; |
|||
DECLARE brch INT DEFAULT 0; |
|||
DECLARE tell INT DEFAULT 0; |
|||
DECLARE bal DECIMAL(10,2) DEFAULT 0.0; |
|||
DECLARE amount DECIMAL(10,2) DEFAULT 1.00; |
|||
DECLARE test INT DEFAULT 0; |
|||
DECLARE bbal DECIMAL(10,2) DEFAULT 0.0; |
|||
DECLARE tbal DECIMAL(10,2) DEFAULT 0.0; |
|||
DECLARE local_uuid VARCHAR(255); |
|||
DECLARE local_user VARCHAR(255); |
|||
DECLARE local_time TIMESTAMP; |
|||
|
|||
SELECT RAND() * 10 INTO test; |
|||
SELECT tpcb.account_id() INTO acct; |
|||
SELECT tpcb.teller_id() INTO tell; |
|||
|
|||
SELECT account.balance INTO bal FROM tpcb.account WHERE id = acct; |
|||
SELECT account.bid INTO brch FROM tpcb.account WHERE id = acct; |
|||
SELECT teller.balance INTO tbal FROM tpcb.teller WHERE tid = tell; |
|||
SELECT branch.balance INTO bbal FROM tpcb.branch WHERE bid = brch; |
|||
|
|||
IF (test < 5) |
|||
THEN |
|||
SET bal = bal + amount; |
|||
SET bbal = bbal + amount; |
|||
SET tbal = tbal + amount; |
|||
UPDATE tpcb.account SET balance = bal, filler = 'account updated' |
|||
WHERE id = acct; |
|||
UPDATE tpcb.branch SET balance = bbal, filler = 'branch updated' |
|||
WHERE bid = brch; |
|||
UPDATE tpcb.teller SET balance = tbal, filler = 'teller updated' |
|||
WHERE tid = tell; |
|||
ELSE |
|||
SET bal = bal - amount; |
|||
SET bbal = bbal - amount; |
|||
SET tbal = tbal - amount; |
|||
UPDATE tpcb.account SET balance = bal, filler = 'account updated' |
|||
WHERE id = acct; |
|||
UPDATE tpcb.branch SET balance = bbal, filler = 'branch updated' |
|||
WHERE bid = brch; |
|||
UPDATE tpcb.teller SET balance = tbal, filler = 'teller updated' |
|||
WHERE tid = tell; |
|||
END IF; |
|||
|
|||
IF (format = 'SBR') |
|||
THEN |
|||
SET local_uuid=UUID(); |
|||
SET local_user=USER(); |
|||
SET local_time= NOW(); |
|||
INSERT INTO tpcb.history VALUES(NULL,acct,tell,brch,amount, local_time,local_user, |
|||
local_uuid,'completed trans'); |
|||
ELSE |
|||
INSERT INTO tpcb.history VALUES(NULL,acct,tell,brch,amount, NOW(), USER(), |
|||
UUID(),'completed trans'); |
|||
END IF; |
|||
END| |
|||
delimiter ;| |
|||
--enable_query_log |
|||
--echo |
|||
--echo *** Stored Procedures Created *** |
|||
--echo |
|||
|
|||
@ -0,0 +1,129 @@ |
|||
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; |
|||
|
|||
*** Test 1 *** |
|||
|
|||
create table t1 (a int key, b int) engine innodb; |
|||
create table t2 (a int key, b int) engine innodb; |
|||
|
|||
alter table t1 engine ndb; |
|||
alter table t2 engine ndb; |
|||
|
|||
insert into t1 values (1,2); |
|||
|
|||
select @log_name:=log_name, @start_pos:=start_pos, @end_pos:=end_pos |
|||
from mysql.ndb_apply_status; |
|||
@log_name:=log_name @start_pos:=start_pos @end_pos:=end_pos |
|||
<log_name> <start_pos> <end_pos> |
|||
|
|||
show binlog events from <start_pos> limit 1; |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
master-bin.000001 <start_pos> Query 1 # use `test`; insert into t1 values (1,2) |
|||
|
|||
show binlog events from <start_pos> limit 1,1; |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
master-bin.000001 # Xid 1 445 COMMIT /* XID */ |
|||
|
|||
begin; |
|||
insert into t1 values (2,3); |
|||
insert into t2 values (3,4); |
|||
commit; |
|||
|
|||
select @log_name:=log_name, @start_pos:=start_pos, @end_pos:=end_pos |
|||
from mysql.ndb_apply_status; |
|||
@log_name:=log_name @start_pos:=start_pos @end_pos:=end_pos |
|||
<log_name> <start_pos> <end_pos> |
|||
show binlog events from <start_pos> limit 1; |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
master-bin.000001 <start_pos> Query 1 # use `test`; BEGIN |
|||
|
|||
show binlog events from <start_pos> limit 1,2; |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
master-bin.000001 # Query # # use `test`; insert into t1 values (2,3) |
|||
master-bin.000001 # Query # # use `test`; insert into t2 values (3,4) |
|||
|
|||
show binlog events from <start_pos> limit 3,1; |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
master-bin.000001 # Xid 1 <end_pos> COMMIT /* XID */ |
|||
|
|||
DROP TABLE test.t1, test.t2; |
|||
SHOW TABLES; |
|||
Tables_in_test |
|||
|
|||
*** Test 2 *** |
|||
|
|||
DROP DATABASE IF EXISTS tpcb; |
|||
CREATE DATABASE tpcb; |
|||
|
|||
CREATE TABLE tpcb.account (id INT, bid INT, balance DECIMAL(10,2), |
|||
filler CHAR(255), PRIMARY KEY(id)); |
|||
|
|||
CREATE TABLE tpcb.branch (bid INT, balance DECIMAL(10,2), filler VARCHAR(255), |
|||
PRIMARY KEY(bid)); |
|||
|
|||
CREATE TABLE tpcb.teller (tid INT, balance DECIMAL(10,2), filler VARCHAR(255), |
|||
PRIMARY KEY(tid)); |
|||
|
|||
CREATE TABLE tpcb.history (id MEDIUMINT NOT NULL AUTO_INCREMENT,aid INT, |
|||
tid INT, bid INT, amount DECIMAL(10,2), |
|||
tdate DATETIME, teller CHAR(20), uuidf LONGBLOB, |
|||
filler CHAR(80),PRIMARY KEY (id)); |
|||
|
|||
--- Create stored procedures & functions --- |
|||
|
|||
|
|||
*** Stored Procedures Created *** |
|||
|
|||
USE tpcb; |
|||
ALTER TABLE account ENGINE NDB; |
|||
ALTER TABLE branch ENGINE NDB; |
|||
ALTER TABLE teller ENGINE NDB; |
|||
ALTER TABLE history ENGINE NDB; |
|||
|
|||
select @log_name:=log_name, @start_pos:=start_pos, @end_pos:=end_pos |
|||
from mysql.ndb_apply_status; |
|||
@log_name:=log_name @start_pos:=start_pos @end_pos:=end_pos |
|||
<log_name> <start_pos> <end_pos> |
|||
|
|||
show binlog events in 'master-bin.000001' from <start_pos> limit 9,1; |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
master-bin.000001 # Xid 1 <end_pos> COMMIT /* XID */ |
|||
|
|||
** Test 3 ** |
|||
|
|||
FLUSH LOGS; |
|||
|
|||
select @log_name:=log_name, @start_pos:=start_pos, @end_pos:=end_pos |
|||
from mysql.ndb_apply_status; |
|||
@log_name:=log_name @start_pos:=start_pos @end_pos:=end_pos |
|||
<log_name> <start_pos> <end_pos> |
|||
|
|||
show binlog events in 'master-bin.000002' from <start_pos> limit 9,1; |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
master-bin.000002 # Xid 1 <end_pos> COMMIT /* XID */ |
|||
|
|||
** Test 4 ** |
|||
|
|||
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; |
|||
|
|||
select @log_name:=log_name, @start_pos:=start_pos, @end_pos:=end_pos |
|||
from mysql.ndb_apply_status; |
|||
@log_name:=log_name @start_pos:=start_pos @end_pos:=end_pos |
|||
<log_name> <start_pos> <end_pos> |
|||
|
|||
show binlog events in 'master-bin.000001' from <start_pos> limit 9,1; |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
master-bin.000001 # Xid 1 <end_pos> COMMIT /* XID */ |
|||
|
|||
*** DUMP MASTER & SLAVE FOR COMPARE ******** |
|||
DROP DATABASE tpcb; |
|||
****** Do dumps compare ************ |
|||
@ -0,0 +1 @@ |
|||
--innodb --default-storage-engine=innodb |
|||
@ -0,0 +1,36 @@ |
|||
############################################# |
|||
#Authors: TU and Jeb |
|||
#Date: 2007/04 |
|||
#Purpose: Generic replication to cluster |
|||
# and ensuring that the ndb_apply_status |
|||
# table is updated. |
|||
############################################# |
|||
# Notes: |
|||
# include/select_ndb_apply_status.inc |
|||
# Selects out the log name, start & end pos |
|||
# from the ndb_apply_status table |
|||
# |
|||
# include/show_binlog_using_logname.inc |
|||
# To select out 1 row from offset 1 |
|||
# from the start position in the binlog whose |
|||
# name is = log_name |
|||
# |
|||
# include/tpcb.inc |
|||
# Creates DATABASE tpcb, the tables and |
|||
# stored procedures for loading the DB |
|||
# and for running transactions against DB. |
|||
############################################## |
|||
|
|||
|
|||
## Includes ## |
|||
|
|||
--disable_query_log |
|||
--source include/have_ndb.inc |
|||
--source include/have_innodb.inc |
|||
--source include/have_binlog_format_mixed.inc |
|||
--source include/master-slave.inc |
|||
--enable_query_log |
|||
let $off_set = 9; |
|||
let $rpl_format = 'MIX'; |
|||
--source extra/rpl_tests/rpl_ndb_apply_status.test |
|||
|
|||
@ -1 +1 @@ |
|||
--innodb |
|||
--innodb --default-storage-engine=innodb |
|||
@ -1,62 +1,35 @@ |
|||
############################################# |
|||
#Authors: TU and Jeb |
|||
#Date: 2007/04 |
|||
#Purpose: Generic replication to cluster |
|||
# and ensuring that the ndb_apply_status |
|||
# table is updated. |
|||
############################################# |
|||
# Notes: |
|||
# include/select_ndb_apply_status.inc |
|||
# Selects out the log name, start & end pos |
|||
# from the ndb_apply_status table |
|||
# |
|||
# include/show_binlog_using_logname.inc |
|||
# To select out 1 row from offset 1 |
|||
# from the start position in the binlog whose |
|||
# name is = log_name |
|||
# |
|||
# include/tpcb.inc |
|||
# Creates DATABASE tpcb, the tables and |
|||
# stored procedures for loading the DB |
|||
# and for running transactions against DB. |
|||
############################################## |
|||
|
|||
|
|||
## Includes ## |
|||
|
|||
--disable_query_log |
|||
--source include/have_ndb.inc |
|||
--source include/have_innodb.inc |
|||
--source include/have_binlog_format_mixed_or_statement.inc |
|||
--source include/have_binlog_format_statement.inc |
|||
--source include/master-slave.inc |
|||
|
|||
--connection master |
|||
create table t1 (a int key, b int) engine innodb; |
|||
create table t2 (a int key, b int) engine innodb; |
|||
|
|||
--sync_slave_with_master |
|||
--connection slave |
|||
alter table t1 engine ndb; |
|||
alter table t2 engine ndb; |
|||
|
|||
# check binlog position without begin |
|||
--connection master |
|||
insert into t1 values (1,2); |
|||
|
|||
--sync_slave_with_master |
|||
--connection slave |
|||
--replace_column 1 <start_pos> 2 <end_pos> |
|||
select @start_pos:=start_pos, @end_pos:=end_pos from mysql.ndb_apply_status; |
|||
--let $start_pos = `select @start_pos` |
|||
--let $end_pos = `select @end_pos` |
|||
|
|||
--connection master |
|||
# here is actually a bug, since there is no begin statement, the |
|||
# query is autocommitted, and end_pos shows end of the insert and not |
|||
# end of the commit |
|||
--replace_result $start_pos <start_pos> |
|||
--replace_column 5 # |
|||
--eval show binlog events from $start_pos limit 1 |
|||
--replace_result $start_pos <start_pos> $end_pos <end_pos> |
|||
--replace_column 2 # |
|||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ |
|||
--eval show binlog events from $start_pos limit 1,1 |
|||
|
|||
# check binlog position with begin |
|||
--connection master |
|||
begin; |
|||
insert into t1 values (2,3); |
|||
insert into t2 values (3,4); |
|||
commit; |
|||
|
|||
--sync_slave_with_master |
|||
--connection slave |
|||
--replace_column 1 <start_pos> 2 <end_pos> |
|||
select @start_pos:=start_pos, @end_pos:=end_pos from mysql.ndb_apply_status; |
|||
--let $start_pos = `select @start_pos` |
|||
--let $end_pos = `select @end_pos` |
|||
|
|||
--connection master |
|||
--replace_result $start_pos <start_pos> |
|||
--replace_column 5 # |
|||
--eval show binlog events from $start_pos limit 1 |
|||
--replace_result $start_pos <start_pos> |
|||
--replace_column 2 # 4 # 5 # |
|||
--eval show binlog events from $start_pos limit 1,2 |
|||
--replace_result $start_pos <start_pos> $end_pos <end_pos> |
|||
--replace_column 2 # |
|||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ |
|||
--eval show binlog events from $start_pos limit 3,1 |
|||
--enable_query_log |
|||
let $off_set = 6; |
|||
let $rpl_format = 'SBR'; |
|||
--source extra/rpl_tests/rpl_ndb_apply_status.test |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue