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
parent c9798697
#############################################
#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
########################################################
# 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
##################################################
# 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
##################################################
# 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
...@@ -56,6 +56,7 @@ undofile.dat UNDO LOG NULL lg1 ...@@ -56,6 +56,7 @@ undofile.dat UNDO LOG NULL lg1
undofile02.dat UNDO LOG NULL lg1 undofile02.dat UNDO LOG NULL lg1
**** Do First Set of ALTERs in the master table **** **** Do First Set of ALTERs in the master table ****
CREATE INDEX t1_i ON t1(c2, c3); CREATE INDEX t1_i ON t1(c2, c3);
CREATE UNIQUE INDEX t1_i2 ON t1(c2);
ALTER TABLE t1 ADD c4 TIMESTAMP; ALTER TABLE t1 ADD c4 TIMESTAMP;
ALTER TABLE t1 ADD c5 DOUBLE; ALTER TABLE t1 ADD c5 DOUBLE;
ALTER TABLE t1 ADD INDEX (c5); ALTER TABLE t1 ADD INDEX (c5);
...@@ -68,6 +69,7 @@ t1 CREATE TABLE `t1` ( ...@@ -68,6 +69,7 @@ t1 CREATE TABLE `t1` (
`c4` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `c4` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`c5` double DEFAULT NULL, `c5` double DEFAULT NULL,
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
UNIQUE KEY `t1_i2` (`c2`),
KEY `t1_i` (`c2`,`c3`), KEY `t1_i` (`c2`,`c3`),
KEY `c5` (`c5`) KEY `c5` (`c5`)
) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1 ) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
...@@ -81,6 +83,7 @@ t1 CREATE TABLE `t1` ( ...@@ -81,6 +83,7 @@ t1 CREATE TABLE `t1` (
`c4` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `c4` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`c5` double DEFAULT NULL, `c5` double DEFAULT NULL,
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
UNIQUE KEY `t1_i2` (`c2`),
KEY `t1_i` (`c2`,`c3`), KEY `t1_i` (`c2`,`c3`),
KEY `c5` (`c5`) KEY `c5` (`c5`)
) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1 ) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
...@@ -101,6 +104,7 @@ t1 CREATE TABLE `t1` ( ...@@ -101,6 +104,7 @@ t1 CREATE TABLE `t1` (
`c4` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `c4` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`c5` double DEFAULT NULL, `c5` double DEFAULT NULL,
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
UNIQUE KEY `t1_i2` (`c2`),
KEY `t1_i` (`c2`,`c3`) KEY `t1_i` (`c2`,`c3`)
) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1 ) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
**** Show second set of ALTERs on SLAVE **** **** Show second set of ALTERs on SLAVE ****
...@@ -113,6 +117,7 @@ t1 CREATE TABLE `t1` ( ...@@ -113,6 +117,7 @@ t1 CREATE TABLE `t1` (
`c4` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `c4` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`c5` double DEFAULT NULL, `c5` double DEFAULT NULL,
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
UNIQUE KEY `t1_i2` (`c2`),
KEY `t1_i` (`c2`,`c3`) KEY `t1_i` (`c2`,`c3`)
) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1 ) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
**** Third and last set of alters for test1 **** **** Third and last set of alters for test1 ****
...@@ -135,6 +140,7 @@ t1 CREATE TABLE `t1` ( ...@@ -135,6 +140,7 @@ t1 CREATE TABLE `t1` (
`c3` blob, `c3` blob,
`c5` double DEFAULT NULL, `c5` double DEFAULT NULL,
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
UNIQUE KEY `t1_i2` (`c2`),
KEY `t1_i` (`c2`) KEY `t1_i` (`c2`)
) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1 ) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
SELECT * FROM t1 ORDER BY c1 LIMIT 5; SELECT * FROM t1 ORDER BY c1 LIMIT 5;
...@@ -153,8 +159,16 @@ t1 CREATE TABLE `t1` ( ...@@ -153,8 +159,16 @@ t1 CREATE TABLE `t1` (
`c3` blob, `c3` blob,
`c5` double DEFAULT NULL, `c5` double DEFAULT NULL,
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
UNIQUE KEY `t1_i2` (`c2`),
KEY `t1_i` (`c2`) KEY `t1_i` (`c2`)
) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1 ) /*!50100 TABLESPACE ts1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
SELECT * FROM t1 ORDER BY c1 LIMIT 5;
c1 c2 c3 c5
1 2.00 b1b1b1b1b1b1b1b1b1b1 NULL
2 4.00 b1b1b1b1b1b1b1b1b1b1 NULL
3 6.00 0000-00-00 00:00:00 NULL
4 8.00 0000-00-00 00:00:00 NULL
5 10.00 0000-00-00 00:00:00 NULL
SELECT * FROM t1 where c1 = 1; SELECT * FROM t1 where c1 = 1;
c1 c2 c3 c5 c1 c2 c3 c5
1 2.00 b1b1b1b1b1b1b1b1b1b1 NULL 1 2.00 b1b1b1b1b1b1b1b1b1b1 NULL
...@@ -167,148 +181,44 @@ START SLAVE; ...@@ -167,148 +181,44 @@ START SLAVE;
CREATE TABLESPACE ts2 CREATE TABLESPACE ts2
ADD DATAFILE 'datafile03.dat' ADD DATAFILE 'datafile03.dat'
USE LOGFILE GROUP lg1 USE LOGFILE GROUP lg1
INITIAL_SIZE 12M INITIAL_SIZE 10M
ENGINE=NDB; ENGINE=NDB;
ALTER TABLESPACE ts2 ALTER TABLESPACE ts2
ADD DATAFILE 'datafile04.dat' ADD DATAFILE 'datafile04.dat'
INITIAL_SIZE 12M INITIAL_SIZE 5M
ENGINE=NDB; ENGINE=NDB;
DROP DATABASE IF EXISTS tpcb; DROP DATABASE IF EXISTS tpcb;
Warnings:
Note 1008 Can't drop database 'tpcb'; database doesn't exist
CREATE DATABASE tpcb; CREATE DATABASE tpcb;
*********** Create TPCB Tables *****************
CREATE TABLE tpcb.account CREATE TABLE tpcb.account
(id INT, bid INT, balance DECIMAL(10,2), (id INT, bid INT, balance DECIMAL(10,2),
filler CHAR(255), PRIMARY KEY(id)) filler CHAR(255), PRIMARY KEY(id))
TABLESPACE ts1 STORAGE DISK TABLESPACE ts2 STORAGE DISK
ENGINE=NDB; ENGINE=NDBCLUSTER;
CREATE TABLE tpcb.branch
CREATE TABLE tpcb.branch
(bid INT, balance DECIMAL(10,2), filler VARCHAR(255), (bid INT, balance DECIMAL(10,2), filler VARCHAR(255),
PRIMARY KEY(bid)) PRIMARY KEY(bid))TABLESPACE ts2 STORAGE DISK
ENGINE=NDB; ENGINE=NDBCLUSTER;
CREATE TABLE tpcb.teller
CREATE TABLE tpcb.teller
(tid INT, balance DECIMAL(10,2), filler VARCHAR(255), (tid INT, balance DECIMAL(10,2), filler VARCHAR(255),
PRIMARY KEY(tid)) PRIMARY KEY(tid)) TABLESPACE ts2 STORAGE DISK
TABLESPACE ts2 STORAGE DISK ENGINE=NDBCLUSTER;
ENGINE=NDB;
CREATE TABLE tpcb.history CREATE TABLE tpcb.history
(id MEDIUMINT NOT NULL AUTO_INCREMENT,aid INT, (id MEDIUMINT NOT NULL AUTO_INCREMENT,aid INT,
tid INT, bid INT, amount DECIMAL(10,2), tid INT, bid INT, amount DECIMAL(10,2),
tdate DATETIME, teller CHAR(20), uuidf LONGBLOB, tdate DATETIME, teller CHAR(20), uuidf LONGBLOB,
filler CHAR(80),PRIMARY KEY (id)) filler CHAR(80),PRIMARY KEY (id))
TABLESPACE ts2 STORAGE DISK TABLESPACE ts2 STORAGE DISK
ENGINE=NDB; ENGINE=NDBCLUSTER;
********* Create Procedures and Functions ************
CREATE PROCEDURE tpcb.load() --- Create stored procedures & functions ---
BEGIN
DECLARE acct INT DEFAULT 1000;
DECLARE brch INT DEFAULT 100; *** Stored Procedures Created ***
DECLARE tell INT DEFAULT 1000;
DECLARE tmp INT DEFAULT 100;
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 < 2)
THEN
SELECT RAND() * 10 INTO num;
ELSEIF (ran < 4)
THEN
SELECT RAND() * 100 INTO num;
ELSE
SELECT RAND() * 1000 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 < 2)
THEN
SELECT RAND() * 10 INTO num;
ELSEIF (ran < 5)
THEN
SELECT RAND() * 100 INTO num;
ELSE
SELECT RAND() * 1000 INTO num;
END IF;
IF (num < 1)
THEN
RETURN 1;
END IF;
RETURN num;
END|
CREATE PROCEDURE tpcb.trans()
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;
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');
END|
****** TEST 2 test time ********************************* ****** TEST 2 test time *********************************
USE tpcb; USE tpcb;
*********** Load up the database ****************** *********** Load up the database ******************
...@@ -316,11 +226,11 @@ CALL tpcb.load(); ...@@ -316,11 +226,11 @@ CALL tpcb.load();
********** Check load master and slave ************** ********** Check load master and slave **************
SELECT COUNT(*) FROM account; SELECT COUNT(*) FROM account;
COUNT(*) COUNT(*)
10000 1000
USE tpcb; USE tpcb;
SELECT COUNT(*) FROM account; SELECT COUNT(*) FROM account;
COUNT(*) COUNT(*)
10000 1000
******** Run in some transactions *************** ******** Run in some transactions ***************
***** Time to try slave sync *********** ***** Time to try slave sync ***********
**** Must make sure slave is clean ***** **** Must make sure slave is clean *****
...@@ -351,10 +261,10 @@ DROP LOGFILE GROUP lg1 ENGINE=NDB; ...@@ -351,10 +261,10 @@ DROP LOGFILE GROUP lg1 ENGINE=NDB;
********** Take a backup of the Master ************* ********** Take a backup of the Master *************
SELECT COUNT(*) FROM history; SELECT COUNT(*) FROM history;
COUNT(*) COUNT(*)
1000 100
SELECT COUNT(*) FROM history; SELECT COUNT(*) FROM history;
COUNT(*) COUNT(*)
2000 200
CREATE TEMPORARY TABLE IF NOT EXISTS mysql.backup_info (id INT, backup_id INT) ENGINE = HEAP; CREATE TEMPORARY TABLE IF NOT EXISTS mysql.backup_info (id INT, backup_id INT) ENGINE = HEAP;
DELETE FROM mysql.backup_info; DELETE FROM mysql.backup_info;
LOAD DATA INFILE '../tmp.dat' INTO TABLE mysql.backup_info FIELDS TERMINATED BY ','; LOAD DATA INFILE '../tmp.dat' INTO TABLE mysql.backup_info FIELDS TERMINATED BY ',';
...@@ -368,7 +278,7 @@ CREATE DATABASE tpcb; ...@@ -368,7 +278,7 @@ CREATE DATABASE tpcb;
USE tpcb; USE tpcb;
SELECT COUNT(*) FROM account; SELECT COUNT(*) FROM account;
COUNT(*) COUNT(*)
10000 1000
***** Add some more records to master ********* ***** Add some more records to master *********
***** Finsh the slave sync process ******* ***** Finsh the slave sync process *******
@the_epoch:=MAX(epoch) @the_epoch:=MAX(epoch)
...@@ -384,12 +294,12 @@ START SLAVE; ...@@ -384,12 +294,12 @@ START SLAVE;
USE tpcb; USE tpcb;
SELECT COUNT(*) FROM history; SELECT COUNT(*) FROM history;
COUNT(*) COUNT(*)
4050 400
****** SLAVE ******** ****** SLAVE ********
USE tpcb; USE tpcb;
SELECT COUNT(*) FROM history; SELECT COUNT(*) FROM history;
COUNT(*) COUNT(*)
4050 400
*** DUMP MASTER & SLAVE FOR COMPARE ******** *** DUMP MASTER & SLAVE FOR COMPARE ********
*************** TEST 2 CLEANUP SECTION ******************** *************** TEST 2 CLEANUP SECTION ********************
DROP PROCEDURE IF EXISTS tpcb.load; DROP PROCEDURE IF EXISTS tpcb.load;
......
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 ************
...@@ -4,34 +4,126 @@ reset master; ...@@ -4,34 +4,126 @@ reset master;
reset slave; reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave; start slave;
*** Test 1 ***
create table t1 (a int key, b int) engine innodb; create table t1 (a int key, b int) engine innodb;
create table t2 (a int key, b int) engine innodb; create table t2 (a int key, b int) engine innodb;
alter table t1 engine ndb; alter table t1 engine ndb;
alter table t2 engine ndb; alter table t2 engine ndb;
insert into t1 values (1,2); insert into t1 values (1,2);
select @start_pos:=start_pos, @end_pos:=end_pos from mysql.ndb_apply_status;
@start_pos:=start_pos @end_pos:=end_pos select @log_name:=log_name, @start_pos:=start_pos, @end_pos:=end_pos
<start_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; show binlog events from <start_pos> limit 1;
Log_name Pos Event_type Server_id End_log_pos Info 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) master-bin.000001 <start_pos> Query 1 # use `test`; insert into t1 values (1,2)
show binlog events from <start_pos> limit 1,1; show binlog events from <start_pos> limit 1,1;
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Xid 1 445 COMMIT /* XID */ master-bin.000001 # Xid 1 445 COMMIT /* XID */
begin; begin;
insert into t1 values (2,3); insert into t1 values (2,3);
insert into t2 values (3,4); insert into t2 values (3,4);
commit; commit;
select @start_pos:=start_pos, @end_pos:=end_pos from mysql.ndb_apply_status;
@start_pos:=start_pos @end_pos:=end_pos select @log_name:=log_name, @start_pos:=start_pos, @end_pos:=end_pos
<start_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; show binlog events from <start_pos> limit 1;
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 <start_pos> Query 1 # use `test`; BEGIN master-bin.000001 <start_pos> Query 1 # use `test`; BEGIN
show binlog events from <start_pos> limit 1,2; show binlog events from <start_pos> limit 1,2;
Log_name Pos Event_type Server_id End_log_pos Info 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 t1 values (2,3)
master-bin.000001 # Query # # use `test`; insert into t2 values (3,4) master-bin.000001 # Query # # use `test`; insert into t2 values (3,4)
show binlog events from <start_pos> limit 3,1; show binlog events from <start_pos> limit 3,1;
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Xid 1 <end_pos> COMMIT /* XID */ 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 6,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 6,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 6,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 ************
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
--source include/have_binlog_format_row.inc --source include/have_binlog_format_row.inc
--source include/ndb_default_cluster.inc --source include/ndb_default_cluster.inc
--source include/not_embedded.inc --source include/not_embedded.inc
--source include/big_test.inc #--source include/big_test.inc
#--source include/have_ndb_extra.inc #--source include/have_ndb_extra.inc
--source include/master-slave.inc --source include/master-slave.inc
...@@ -98,7 +98,7 @@ SELECT DISTINCT FILE_NAME, FILE_TYPE, TABLESPACE_NAME, LOGFILE_GROUP_NAME ...@@ -98,7 +98,7 @@ SELECT DISTINCT FILE_NAME, FILE_TYPE, TABLESPACE_NAME, LOGFILE_GROUP_NAME
connection master; connection master;
CREATE INDEX t1_i ON t1(c2, c3); CREATE INDEX t1_i ON t1(c2, c3);
#Bug 18039 #Bug 18039
#CREATE UNIQUE INDEX t1_i2 ON t1(c2); CREATE UNIQUE INDEX t1_i2 ON t1(c2);
ALTER TABLE t1 ADD c4 TIMESTAMP; ALTER TABLE t1 ADD c4 TIMESTAMP;
ALTER TABLE t1 ADD c5 DOUBLE; ALTER TABLE t1 ADD c5 DOUBLE;
ALTER TABLE t1 ADD INDEX (c5); ALTER TABLE t1 ADD INDEX (c5);
...@@ -170,7 +170,7 @@ SELECT * FROM t1 ORDER BY c1 LIMIT 5; ...@@ -170,7 +170,7 @@ SELECT * FROM t1 ORDER BY c1 LIMIT 5;
connection slave; connection slave;
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
# Bug 18094 # Bug 18094
#SELECT * FROM t1 ORDER BY c1 LIMIT 5; SELECT * FROM t1 ORDER BY c1 LIMIT 5;
SELECT * FROM t1 where c1 = 1; SELECT * FROM t1 where c1 = 1;
connection master; connection master;
...@@ -198,163 +198,19 @@ connection master; ...@@ -198,163 +198,19 @@ connection master;
CREATE TABLESPACE ts2 CREATE TABLESPACE ts2
ADD DATAFILE 'datafile03.dat' ADD DATAFILE 'datafile03.dat'
USE LOGFILE GROUP lg1 USE LOGFILE GROUP lg1
INITIAL_SIZE 12M INITIAL_SIZE 10M
ENGINE=NDB; ENGINE=NDB;
ALTER TABLESPACE ts2 ALTER TABLESPACE ts2
ADD DATAFILE 'datafile04.dat' ADD DATAFILE 'datafile04.dat'
INITIAL_SIZE 12M INITIAL_SIZE 5M
ENGINE=NDB; ENGINE=NDB;
###### CLEAN UP SECTION ############## let engine_type=NDBCLUSTER;
DROP DATABASE IF EXISTS tpcb; let table_space=ts2;
CREATE DATABASE tpcb; let format='RBR';
######## Creat Table Section #########
--echo *********** Create TPCB Tables ***************** --source include/tpcb_disk_data.inc
CREATE TABLE tpcb.account
(id INT, bid INT, balance DECIMAL(10,2),
filler CHAR(255), PRIMARY KEY(id))
TABLESPACE ts1 STORAGE DISK
ENGINE=NDB;
CREATE TABLE tpcb.branch
(bid INT, balance DECIMAL(10,2), filler VARCHAR(255),
PRIMARY KEY(bid))
ENGINE=NDB;
CREATE TABLE tpcb.teller
(tid INT, balance DECIMAL(10,2), filler VARCHAR(255),
PRIMARY KEY(tid))
TABLESPACE ts2 STORAGE DISK
ENGINE=NDB;
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 ts2 STORAGE DISK
ENGINE=NDB;
--echo ********* Create Procedures and Functions ************
delimiter |;
CREATE PROCEDURE tpcb.load()
BEGIN
DECLARE acct INT DEFAULT 1000;
DECLARE brch INT DEFAULT 100;
DECLARE tell INT DEFAULT 1000;
DECLARE tmp INT DEFAULT 100;
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 < 2)
THEN
SELECT RAND() * 10 INTO num;
ELSEIF (ran < 4)
THEN
SELECT RAND() * 100 INTO num;
ELSE
SELECT RAND() * 1000 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 < 2)
THEN
SELECT RAND() * 10 INTO num;
ELSEIF (ran < 5)
THEN
SELECT RAND() * 100 INTO num;
ELSE
SELECT RAND() * 1000 INTO num;
END IF;
IF (num < 1)
THEN
RETURN 1;
END IF;
RETURN num;
END|
CREATE PROCEDURE tpcb.trans()
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;
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');
END|
delimiter ;|
--echo ****** TEST 2 test time ********************************* --echo ****** TEST 2 test time *********************************
USE tpcb; USE tpcb;
...@@ -372,15 +228,16 @@ SELECT COUNT(*) FROM account; ...@@ -372,15 +228,16 @@ SELECT COUNT(*) FROM account;
--echo ******** Run in some transactions *************** --echo ******** Run in some transactions ***************
connection master; connection master;
let $j= 1000; let $j= 100;
--disable_query_log --disable_query_log
while ($j) while ($j)
{ {
CALL tpcb.trans(); eval CALL tpcb.trans($format);
dec $j; dec $j;
} }
--enable_query_log --enable_query_log
--echo ***** Time to try slave sync *********** --echo ***** Time to try slave sync ***********
--echo **** Must make sure slave is clean ***** --echo **** Must make sure slave is clean *****
--connection slave --connection slave
...@@ -421,11 +278,11 @@ connection master; ...@@ -421,11 +278,11 @@ connection master;
SELECT COUNT(*) FROM history; SELECT COUNT(*) FROM history;
let $j= 1000; let $j= 100;
--disable_query_log --disable_query_log
while ($j) while ($j)
{ {
CALL tpcb.trans(); eval CALL tpcb.trans($format);
dec $j; dec $j;
} }
--enable_query_log --enable_query_log
...@@ -464,11 +321,11 @@ SELECT COUNT(*) FROM account; ...@@ -464,11 +321,11 @@ SELECT COUNT(*) FROM account;
--echo ***** Add some more records to master ********* --echo ***** Add some more records to master *********
connection master; connection master;
let $j= 1000; let $j= 100;
--disable_query_log --disable_query_log
while ($j) while ($j)
{ {
CALL tpcb.trans(); eval CALL tpcb.trans($format);
dec $j; dec $j;
} }
--enable_query_log --enable_query_log
...@@ -484,17 +341,18 @@ while ($j) ...@@ -484,17 +341,18 @@ while ($j)
--echo ***** Finsh the slave sync process ******* --echo ***** Finsh the slave sync process *******
--disable_query_log --disable_query_log
# 1. 2. 3. # 1. 2. 3.
--sync_slave_with_master
--source include/ndb_setup_slave.inc --source include/ndb_setup_slave.inc
--enable_query_log --enable_query_log
# 4. # 4.
--echo * 4. * --echo * 4. *
connection master; connection master;
let $j= 1000; let $j= 100;
--disable_query_log --disable_query_log
while ($j) while ($j)
{ {
CALL tpcb.trans(); eval CALL tpcb.trans($format);
dec $j; dec $j;
} }
--enable_query_log --enable_query_log
...@@ -507,15 +365,6 @@ START SLAVE; ...@@ -507,15 +365,6 @@ START SLAVE;
--echo **** We should be ready to continue on ************* --echo **** We should be ready to continue on *************
connection master; connection master;
let $j= 50;
--disable_query_log
while ($j)
{
CALL tpcb.trans();
dec $j;
}
--enable_query_log
--echo ****** Let's make sure we match ******* --echo ****** Let's make sure we match *******
--echo ***** MASTER ******* --echo ***** MASTER *******
USE tpcb; USE tpcb;
......
--innodb --default-storage-engine=innodb
#############################################
#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
--innodb --innodb --default-storage-engine=innodb
#############################################
#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_ndb.inc
--source include/have_innodb.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 --source include/master-slave.inc
--enable_query_log
--connection master let $off_set = 6;
create table t1 (a int key, b int) engine innodb; let $rpl_format = 'SBR';
create table t2 (a int key, b int) engine innodb; --source extra/rpl_tests/rpl_ndb_apply_status.test
--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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment