Commit d5a185a5 authored by Michael Widenius's avatar Michael Widenius

automatic merge

parents 71064cbe 3f7ee1f1
......@@ -3,9 +3,10 @@ organization.
The current main members and sponsors of the MariaDB foundation are:
Booking.com http://www.booking.com
SkySQL Ab http://www.skysql.com
Parallels http://www.parallels.com/products/plesk
Automattic http://automattic.com (2014)
SkySQL Ab http://www.skysql.com (2013, 2014)
Booking.com http://www.booking.com (2013)
Parallels http://www.parallels.com/products/plesk (2013)
For a full list of supporters and sponsors see
https://mariadb.org/en/supporters/
......
......@@ -2,10 +2,16 @@ SHOW CONTRIBUTORS;
Name Location Comment
Booking.com http://www.booking.com Founding member of the MariaDB foundation
SkySQL Ab http://www.skysql.com Founding member of the MariaDB foundation
Auttomatic http://automattic.com Member of the MariaDB foundation
Parallels http://www.parallels.com/products/plesk Founding member of the MariaDB foundation
Verkkokauppa.com Finland Sponsor of the MariaDB foundation
Webyog Bangalor Sponsor of the MariaDB foundation
Percona USA Sponsor of the MariaDB foundation
Jelastic.com Russia Sponsor of the MariaDB foundation
Planetta.net Finland Sponsor of the MariaDB foundation
Open query Australia Sponsor of the MariaDB foundation
Google USA Sponsoring parallel replication and GTID
Facebook USA Sponsoring non-blocking API, LIMIT ROWS EXAMINED etc
Ronald Bradford Brisbane, Australia EFF contribution for UC2006 Auction
Sheeri Kritzer Boston, Mass. USA EFF contribution for UC2006 Auction
Mark Shuttleworth London, UK. EFF contribution for UC2006 Auction
......@@ -871,12 +871,12 @@ The following options may be given as the first argument:
--slave-compressed-protocol
Use compression on master/slave protocol
--slave-ddl-exec-mode=name
Modes for how replication events should be executed.
Legal values are STRICT and IDEMPOTENT (default). In
IDEMPOTENT mode, replication will not stop for DDL
operations that are idempotent. This means that CREATE
TABLE is treated CREATE TABLE OR REPLACE and DROP TABLE
is threated as DROP TABLE IF EXISTS.
How replication events should be executed. Legal values
are STRICT and IDEMPOTENT (default). In IDEMPOTENT mode,
replication will not stop for DDL operations that are
idempotent. This means that CREATE TABLE is treated as
CREATE TABLE OR REPLACE and DROP TABLE is treated as DROP
TABLE IF EXISTS.
--slave-domain-parallel-threads=#
Maximum number of parallel threads to use on slave for
events in a single replication domain. When using
......@@ -886,14 +886,13 @@ The following options may be given as the first argument:
as many threads as it wants, up to the value of
slave_parallel_threads.
--slave-exec-mode=name
Modes for how replication events should be executed.
Legal values are STRICT (default) and IDEMPOTENT. In
IDEMPOTENT mode, replication will not stop for operations
that are idempotent. For example, in row based
replication attempts to delete rows that doesn't exist
will be ignored.In STRICT mode, replication will stop on
any unexpected difference between the master and the
slave
How replication events should be executed. Legal values
are STRICT (default) and IDEMPOTENT. In IDEMPOTENT mode,
replication will not stop for operations that are
idempotent. For example, in row based replication
attempts to delete rows that doesn't exist will be
ignored. In STRICT mode, replication will stop on any
unexpected difference between the master and the slave
--slave-load-tmpdir=name
The location where the slave should put its temporary
files when replicating a LOAD DATA INFILE command
......
......@@ -115,6 +115,59 @@ t1 CREATE TABLE `t1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
#
# Check how CREATE is logged on slave in case of conflicts
#
create table t1 (server_2_to_be_delete int);
create table t2 (server_2_to_be_delete int);
create table t4 (server_2_to_be_delete int);
set @org_binlog_format=@@binlog_format;
set @@global.binlog_format="ROW";
stop slave;
include/wait_for_slave_to_stop.inc
start slave;
include/wait_for_slave_to_start.inc
create temporary table t9 (a int);
insert into t9 values(1);
create table t1 (new_table int);
create table t2 select * from t9;
create table t4 like t9;
create table t5 select * from t9;
binlog from server 2
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t1 (server_2_to_be_delete int)
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t2 (server_2_to_be_delete int)
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t4 (server_2_to_be_delete int)
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t1 (new_table int)
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t2` (
`a` int(11) DEFAULT NULL
)
slave-bin.000001 # Table_map # # table_id: # (test.t2)
slave-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` (
`a` int(11) DEFAULT NULL
)
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` (
`a` int(11) DEFAULT NULL
)
slave-bin.000001 # Table_map # # table_id: # (test.t5)
slave-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
slave-bin.000001 # Query # # COMMIT
set @@global.binlog_format=@org_binlog_format;
stop slave;
include/wait_for_slave_to_stop.inc
start slave;
include/wait_for_slave_to_start.inc
drop table t1,t2,t4,t5,t9;
#
# Ensure that DROP TABLE is run as DROP IF NOT EXISTS
#
create table t1 (server_1_ver_1 int);
......
......@@ -137,6 +137,59 @@ t1 CREATE TABLE `t1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
#
# Check how CREATE is logged on slave in case of conflicts
#
create table t1 (server_2_to_be_delete int);
create table t2 (server_2_to_be_delete int);
create table t4 (server_2_to_be_delete int);
set @org_binlog_format=@@binlog_format;
set @@global.binlog_format="ROW";
stop slave;
include/wait_for_slave_to_stop.inc
start slave;
include/wait_for_slave_to_start.inc
create temporary table t9 (a int);
insert into t9 values(1);
create table t1 (new_table int);
create table t2 select * from t9;
create table t4 like t9;
create table t5 select * from t9;
binlog from server 2
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t1 (server_2_to_be_delete int)
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t2 (server_2_to_be_delete int)
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t4 (server_2_to_be_delete int)
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t1 (new_table int)
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t2` (
`a` int(11) DEFAULT NULL
)
slave-bin.000001 # Table_map # # table_id: # (test.t2)
slave-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` (
`a` int(11) DEFAULT NULL
)
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` (
`a` int(11) DEFAULT NULL
)
slave-bin.000001 # Table_map # # table_id: # (test.t5)
slave-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
slave-bin.000001 # Query # # COMMIT
set @@global.binlog_format=@org_binlog_format;
stop slave;
include/wait_for_slave_to_stop.inc
start slave;
include/wait_for_slave_to_start.inc
drop table t1,t2,t4,t5,t9;
#
# Ensure that DROP TABLE is run as DROP IF NOT EXISTS
#
create table t1 (server_1_ver_1 int);
......
......@@ -115,6 +115,59 @@ t1 CREATE TABLE `t1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
#
# Check how CREATE is logged on slave in case of conflicts
#
create table t1 (server_2_to_be_delete int);
create table t2 (server_2_to_be_delete int);
create table t4 (server_2_to_be_delete int);
set @org_binlog_format=@@binlog_format;
set @@global.binlog_format="ROW";
stop slave;
include/wait_for_slave_to_stop.inc
start slave;
include/wait_for_slave_to_start.inc
create temporary table t9 (a int);
insert into t9 values(1);
create table t1 (new_table int);
create table t2 select * from t9;
create table t4 like t9;
create table t5 select * from t9;
binlog from server 2
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t1 (server_2_to_be_delete int)
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t2 (server_2_to_be_delete int)
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t4 (server_2_to_be_delete int)
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t1 (new_table int)
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t2` (
`a` int(11) DEFAULT NULL
)
slave-bin.000001 # Table_map # # table_id: # (test.t2)
slave-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` (
`a` int(11) DEFAULT NULL
)
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` (
`a` int(11) DEFAULT NULL
)
slave-bin.000001 # Table_map # # table_id: # (test.t5)
slave-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
slave-bin.000001 # Query # # COMMIT
set @@global.binlog_format=@org_binlog_format;
stop slave;
include/wait_for_slave_to_stop.inc
start slave;
include/wait_for_slave_to_start.inc
drop table t1,t2,t4,t5,t9;
#
# Ensure that DROP TABLE is run as DROP IF NOT EXISTS
#
create table t1 (server_1_ver_1 int);
......
......@@ -95,6 +95,43 @@ show create table t1;
connection server_1;
drop table t1;
--echo #
--echo # Check how CREATE is logged on slave in case of conflicts
--echo #
save_master_pos;
connection server_2;
sync_with_master;
--let $binlog_start=query_get_value(SHOW MASTER STATUS, Position, 1)
create table t1 (server_2_to_be_delete int);
create table t2 (server_2_to_be_delete int);
create table t4 (server_2_to_be_delete int);
set @org_binlog_format=@@binlog_format;
set @@global.binlog_format="ROW";
stop slave;
--source include/wait_for_slave_to_stop.inc
start slave;
--source include/wait_for_slave_to_start.inc
connection server_1;
create temporary table t9 (a int);
insert into t9 values(1);
create table t1 (new_table int);
create table t2 select * from t9;
create table t4 like t9;
create table t5 select * from t9;
save_master_pos;
connection server_2;
sync_with_master;
--echo binlog from server 2
--source include/show_binlog_events.inc
set @@global.binlog_format=@org_binlog_format;
stop slave;
--source include/wait_for_slave_to_stop.inc
start slave;
--source include/wait_for_slave_to_start.inc
connection server_1;
drop table t1,t2,t4,t5,t9;
--echo #
--echo # Ensure that DROP TABLE is run as DROP IF NOT EXISTS
--echo #
......
......@@ -1375,7 +1375,7 @@ SET NAMES latin1;
--echo #
--echo # WL#6454: Deprecate SHOW AUTHORS and SHOW CONTRIBUTORS
--echo # Test SHOW AUTHORS and SHOW CONTRIBUTORS
--echo #
--disable_result_log
......
......@@ -35,6 +35,8 @@ struct show_table_authors_st {
then, not active last.
Names should be encoded using UTF-8.
See also https://mariadb.com/kb/en/log-of-mariadb-contributions/
*/
struct show_table_authors_st show_table_authors[]= {
......@@ -63,7 +65,14 @@ struct show_table_authors_st show_table_authors[]= {
{ "Georg Richter", "Heidelberg, Germany", "New LGPL C connector, PHP connector"},
{ "Jan Lindström", "Ylämylly, Finland", "Working on InnoDB"},
{ "Lixun Peng", "Hangzhou, China", "Multi Source replication" },
{ "Olivier Bertrand", "Paris, France", "CONNECT storage engine"},
{ "Kentoku Shiba", "Tokyo, Japan", "Spider storage engine, metadata_lock_info Information schema"},
{ "Percona", "CA, USA", "XtraDB, microslow patches, extensions to slow log"},
{ "Vicentiu Ciorbaru", "Bucharest, Romania", "Roles"},
{ "Sudheera Palihakkara", "", "PCRE Regular Expressions" },
{ "Pavel Ivanov", "USA", "Some patches and bug fixes"},
{ "Konstantin Osipov", "Moscow, Russia",
"Prepared statements (4.1), Cursors (5.0), GET_LOCK (10.0)" },
/* People working on MySQL code base (not NDB) */
{ "Guilhem Bichot", "Bordeaux, France", "Replication (since 4.0)" },
......@@ -82,8 +91,6 @@ struct show_table_authors_st show_table_authors[]= {
"MySQL founder; Small stuff long time ago, Monty ripped it out!" },
{ "Brian (Krow) Aker", "Seattle, WA, USA",
"Architecture, archive, blackhole, federated, bunch of little stuff :)" },
{ "Konstantin Osipov", "Moscow, Russia",
"Prepared statements (4.1), Cursors (5.0)" },
{ "Venu Anuganti", "", "Client/server protocol (4.1)" },
{ "Omer BarNir", "Sunnyvale, CA, USA",
"Testing (sometimes) and general QA stuff" },
......
......@@ -31,19 +31,29 @@ struct show_table_contributors_st {
Get permission before editing.
Names should be encoded using UTF-8.
See also https://mariadb.com/kb/en/log-of-mariadb-contributions/
*/
struct show_table_contributors_st show_table_contributors[]= {
/* MariaDB foundation members, in contribution size order */
/* MariaDB foundation members, in contribution, size , time order */
{"Booking.com", "http://www.booking.com", "Founding member of the MariaDB foundation"},
{"SkySQL Ab", "http://www.skysql.com", "Founding member of the MariaDB foundation"},
{"Auttomatic", "http://automattic.com", "Member of the MariaDB foundation"},
{"Parallels", "http://www.parallels.com/products/plesk", "Founding member of the MariaDB foundation"},
/* Smaller sponsors, newer per year */
{"Verkkokauppa.com", "Finland", "Sponsor of the MariaDB foundation"},
{"Webyog", "Bangalor", "Sponsor of the MariaDB foundation"},
{"Percona", "USA", "Sponsor of the MariaDB foundation"},
{"Jelastic.com", "Russia", "Sponsor of the MariaDB foundation"},
{"Planetta.net", "Finland", "Sponsor of the MariaDB foundation"},
{"Open query", "Australia", "Sponsor of the MariaDB foundation"},
/* Sponsors of important features */
{"Google", "USA", "Sponsoring parallel replication and GTID" },
{"Facebook", "USA", "Sponsoring non-blocking API, LIMIT ROWS EXAMINED etc"},
/* Individual contributors, names in historical order, newer first */
{"Ronald Bradford", "Brisbane, Australia", "EFF contribution for UC2006 Auction"},
{"Sheeri Kritzer", "Boston, Mass. USA", "EFF contribution for UC2006 Auction"},
......
......@@ -1591,6 +1591,7 @@ struct HA_CREATE_INFO
uint stats_sample_pages;
uint null_bits; /* NULL bits at start of record */
uint options; /* OR of HA_CREATE_ options */
uint org_options; /* original options from query */
uint merge_insert_method;
uint extra_size; /* length of extra data segment */
SQL_I_List<TABLE_LIST> merge_list;
......
......@@ -4164,8 +4164,9 @@ select_create::binlog_show_create_table(TABLE **tables, uint count)
result= store_create_info(thd, &tmp_table_list, &query, create_info,
/* show_database */ TRUE,
MY_TEST(create_info->options &
HA_LEX_CREATE_REPLACE));
MY_TEST(create_info->org_options &
HA_LEX_CREATE_REPLACE) ||
create_info->table_was_deleted);
DBUG_ASSERT(result == 0); /* store_create_info() always return 0 */
if (mysql_bin_log.is_open())
......
......@@ -2893,6 +2893,7 @@ case SQLCOM_PREPARE:
CREATE TABLE OR EXISTS failures by dropping the table and
retrying the create.
*/
create_info.org_options= create_info.options;
if (thd->slave_thread &&
slave_ddl_exec_mode_options == SLAVE_EXEC_MODE_IDEMPOTENT &&
!(lex->create_info.options & HA_LEX_CREATE_IF_NOT_EXISTS))
......
......@@ -5460,8 +5460,9 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table,
int result __attribute__((unused))=
store_create_info(thd, table, &query,
create_info, FALSE /* show_database */,
MY_TEST(create_info->options &
HA_LEX_CREATE_REPLACE));
MY_TEST(create_info->org_options &
HA_LEX_CREATE_REPLACE) ||
create_info->table_was_deleted);
DBUG_ASSERT(result == 0); // store_create_info() always return 0
do_logging= FALSE;
......
......@@ -2717,11 +2717,11 @@ static Sys_var_mybool Sys_slave_compressed_protocol(
static const char *slave_exec_mode_names[]= {"STRICT", "IDEMPOTENT", 0};
static Sys_var_enum Slave_exec_mode(
"slave_exec_mode",
"Modes for how replication events should be executed. Legal values "
"How replication events should be executed. Legal values "
"are STRICT (default) and IDEMPOTENT. In IDEMPOTENT mode, "
"replication will not stop for operations that are idempotent. "
"For example, in row based replication attempts to delete rows that "
"doesn't exist will be ignored."
"doesn't exist will be ignored. "
"In STRICT mode, replication will stop on any unexpected difference "
"between the master and the slave",
GLOBAL_VAR(slave_exec_mode_options), CMD_LINE(REQUIRED_ARG),
......@@ -2729,11 +2729,11 @@ static Sys_var_enum Slave_exec_mode(
static Sys_var_enum Slave_ddl_exec_mode(
"slave_ddl_exec_mode",
"Modes for how replication events should be executed. Legal values "
"How replication events should be executed. Legal values "
"are STRICT and IDEMPOTENT (default). In IDEMPOTENT mode, "
"replication will not stop for DDL operations that are idempotent. "
"This means that CREATE TABLE is treated CREATE TABLE OR REPLACE and "
"DROP TABLE is threated as DROP TABLE IF EXISTS. ",
"This means that CREATE TABLE is treated as CREATE TABLE OR REPLACE and "
"DROP TABLE is treated as DROP TABLE IF EXISTS.",
GLOBAL_VAR(slave_ddl_exec_mode_options), CMD_LINE(REQUIRED_ARG),
slave_exec_mode_names, DEFAULT(SLAVE_EXEC_MODE_IDEMPOTENT));
......
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