Commit 8f2c07e2 authored by tim@white.box's avatar tim@white.box

Merge work.mysql.com:/home/bk/mysql into white.box:/home/tim/my/3

parents 58766d3a 6192d838
heikki@donna.mysql.fi heikki@donna.mysql.fi
jani@janikt.pp.saunalahti.fi jani@janikt.pp.saunalahti.fi
miguel@light.local
monty@hundin.mysql.fi monty@hundin.mysql.fi
monty@tik.mysql.fi monty@tik.mysql.fi
monty@work.mysql.com monty@work.mysql.com
......
...@@ -37,9 +37,12 @@ From: $FROM ...@@ -37,9 +37,12 @@ From: $FROM
To: $INTERNALS To: $INTERNALS
Subject: bk commit into 3.23 tree Subject: bk commit into 3.23 tree
Below is the list of changes that have just been pushed into main Below is the list of changes that have just been commited into a local
3.23. repository. For information on how to access the repository 3.23. repository of $USER. When $USER does a push, they will be
see http://www.mysql.com/doc/I/n/Installing_source_tree.html propogaged to the main repository and within 24 hours after the push into
the public repository. For information on how to access
the public repository see
http://www.mysql.com/doc/I/n/Installing_source_tree.html
EOF EOF
bk changes -v -r+ bk changes -v -r+
......
#! /bin/sh
echo "Test: post-incoming works"
#! /bin/sh
echo "Test: post-outgoing works"
...@@ -33032,7 +33032,7 @@ Performance handicapping system for yachts. Uses PHP. By ...@@ -33032,7 +33032,7 @@ Performance handicapping system for yachts. Uses PHP. By
@item @uref{http://www.mysql.com/Contrib/hylalog-1.0.tar.gz, hylalog-1.0.tar.gz} @item @uref{http://www.mysql.com/Contrib/hylalog-1.0.tar.gz, hylalog-1.0.tar.gz}
Store @code{hylafax} outgoing faxes in a @strong{MySQL} database. By Sinisa Store @code{hylafax} outgoing faxes in a @strong{MySQL} database. By Sinisa
Milivojevic, @email{sinisa@@coresinc.com}. Milivojevic, @email{sinisa@@mysql.com}.
@item @uref{http://www.mysql.com/Contrib/mrtg-mysql-1.0.tar.gz, mrtg-mysql-1.0.tar.gz} @item @uref{http://www.mysql.com/Contrib/mrtg-mysql-1.0.tar.gz, mrtg-mysql-1.0.tar.gz}
@strong{MySQL} status plotting with MRTG, by Luuk de Boer, @email{luuk@@wxs.nl}. @strong{MySQL} status plotting with MRTG, by Luuk de Boer, @email{luuk@@wxs.nl}.
...@@ -33268,7 +33268,7 @@ The @file{libmysql.dll} library. ...@@ -33268,7 +33268,7 @@ The @file{libmysql.dll} library.
Mysqlmanager, a Win32 GUI tool for administrating @strong{MySQL}. Mysqlmanager, a Win32 GUI tool for administrating @strong{MySQL}.
@item Curt Sampson @email{cjs@@portal.ca} @item Curt Sampson @email{cjs@@portal.ca}
Porting of MIT-pthreads to NetBSD/Alpha and NetBSD 1.3/i386. Porting of MIT-pthreads to NetBSD/Alpha and NetBSD 1.3/i386.
@item Sinisa Milivojevic @email{sinisa@@coresinc.com} @item Sinisa Milivojevic @email{sinisa@@mysql.com}
Compression (with @code{zlib}) to the client/server protocol. Compression (with @code{zlib}) to the client/server protocol.
Perfect hashing for the lexical analyzer phase. Perfect hashing for the lexical analyzer phase.
@item Antony T. Curtis @email{antony.curtis@@olcs.net} @item Antony T. Curtis @email{antony.curtis@@olcs.net}
...@@ -3084,6 +3084,11 @@ If so, it may have a local mailing list, so that messages sent from ...@@ -3084,6 +3084,11 @@ If so, it may have a local mailing list, so that messages sent from
cases, please contact your system administrator to be added to or dropped cases, please contact your system administrator to be added to or dropped
from the local @strong{MySQL} list. from the local @strong{MySQL} list.
If you wish to have traffic for a mailing list go to a separate mailbox in
your mail program, set up a filter based on the message headers. You can
use either the @code{List-ID:} or @code{Delivered-To:} headers to identify
list messages.
The following @strong{MySQL} mailing lists exist: The following @strong{MySQL} mailing lists exist:
@table @code @table @code
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
10 10.0 10 10 10 10 10.0 10 10 10
6e-05 -6e-05 --6e-05 -6e-05+1.000000 6e-05 -6e-05 --6e-05 -6e-05+1.000000
6e-05 -6e-05 6e-05 0.99994 6e-05 -6e-05 6e-05 0.99994
1e1 1.e1 1.0e1 1e+1 1.e+1 1.0e+1 1e-1 1.e-1 1.0e-1
10 10 10 10 10 10 0.1 0.1 0.1
Field Type Null Key Default Extra Privileges Field Type Null Key Default Extra Privileges
f1 float YES NULL select,insert,update,references f1 float YES NULL select,insert,update,references
f2 double YES NULL select,insert,update,references f2 double YES NULL select,insert,update,references
......
--sporadic-binlog-dump-fail --max-binlog-dump-events=2
#test to see if replication can continue when master sporadically fails on
# COM_BINLOG_DUMP and additionally limits the number of events per dump
source include/master-slave.inc;
connection master;
drop table if exists t1;
create table t1(n int not null auto_increment primary key);
insert into t1 values (NULL),(NULL);
delete from t1;
insert into t1 values (NULL),(NULL);
insert into t1 values (NULL),(NULL);
flush logs;
delete from t1;
insert into t1 values (NULL),(NULL);
insert into t1 values (NULL),(NULL);
insert into t1 values (NULL),(NULL);
save_master_pos;
connection slave;
sync_with_master;
select * from t1;
connection master;
drop table t1;
save_master_pos;
connection slave;
sync_with_master;
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <my_dir.h> #include <my_dir.h>
#include "sql_acl.h" #include "sql_acl.h"
#include "slave.h" #include "slave.h"
#include "sql_repl.h"
#include "stacktrace.h" #include "stacktrace.h"
#ifdef HAVE_BERKELEY_DB #ifdef HAVE_BERKELEY_DB
#include "ha_berkeley.h" #include "ha_berkeley.h"
...@@ -2461,7 +2462,8 @@ enum options { ...@@ -2461,7 +2462,8 @@ enum options {
OPT_TEMP_POOL, OPT_TX_ISOLATION, OPT_TEMP_POOL, OPT_TX_ISOLATION,
OPT_GEMINI_FLUSH_LOG, OPT_GEMINI_RECOVER, OPT_GEMINI_FLUSH_LOG, OPT_GEMINI_RECOVER,
OPT_GEMINI_UNBUFFERED_IO, OPT_SKIP_SAFEMALLOC, OPT_GEMINI_UNBUFFERED_IO, OPT_SKIP_SAFEMALLOC,
OPT_SKIP_STACK_TRACE, OPT_SKIP_SYMLINKS OPT_SKIP_STACK_TRACE, OPT_SKIP_SYMLINKS,
OPT_MAX_BINLOG_DUMP_EVENTS, OPT_SPORADIC_BINLOG_DUMP_FAIL
}; };
static struct option long_options[] = { static struct option long_options[] = {
...@@ -2545,6 +2547,10 @@ static struct option long_options[] = { ...@@ -2545,6 +2547,10 @@ static struct option long_options[] = {
(int) OPT_DISCONNECT_SLAVE_EVENT_COUNT}, (int) OPT_DISCONNECT_SLAVE_EVENT_COUNT},
{"abort-slave-event-count", required_argument, 0, {"abort-slave-event-count", required_argument, 0,
(int) OPT_ABORT_SLAVE_EVENT_COUNT}, (int) OPT_ABORT_SLAVE_EVENT_COUNT},
{"max-binlog-dump-events", required_argument, 0,
(int) OPT_MAX_BINLOG_DUMP_EVENTS},
{"sporadic-binlog-dump-fail", no_argument, 0,
(int) OPT_SPORADIC_BINLOG_DUMP_FAIL},
{"safemalloc-mem-limit", required_argument, 0, (int) {"safemalloc-mem-limit", required_argument, 0, (int)
OPT_SAFEMALLOC_MEM_LIMIT}, OPT_SAFEMALLOC_MEM_LIMIT},
{"new", no_argument, 0, 'n'}, {"new", no_argument, 0, 'n'},
...@@ -3301,6 +3307,17 @@ static void get_options(int argc,char **argv) ...@@ -3301,6 +3307,17 @@ static void get_options(int argc,char **argv)
abort_slave_event_count = atoi(optarg); abort_slave_event_count = atoi(optarg);
#endif #endif
break; break;
case (int)OPT_SPORADIC_BINLOG_DUMP_FAIL:
#ifndef DBUG_OFF
opt_sporadic_binlog_dump_fail = 1;
#endif
break;
case (int)OPT_MAX_BINLOG_DUMP_EVENTS:
#ifndef DBUG_OFF
max_binlog_dump_events = atoi(optarg);
#endif
break;
case (int) OPT_LOG_SLAVE_UPDATES: case (int) OPT_LOG_SLAVE_UPDATES:
opt_log_slave_updates = 1; opt_log_slave_updates = 1;
break; break;
......
This diff is collapsed.
...@@ -1236,6 +1236,8 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) ...@@ -1236,6 +1236,8 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused)))
goto err; goto err;
} }
connected:
while (!slave_killed(thd)) while (!slave_killed(thd))
{ {
thd->proc_info = "Requesting binlog dump"; thd->proc_info = "Requesting binlog dump";
...@@ -1278,10 +1280,9 @@ try again, log '%s' at postion %s", RPL_LOG_NAME, ...@@ -1278,10 +1280,9 @@ try again, log '%s' at postion %s", RPL_LOG_NAME,
goto err; goto err;
} }
continue; goto connected;
} }
while(!slave_killed(thd)) while(!slave_killed(thd))
{ {
thd->proc_info = "Reading master update"; thd->proc_info = "Reading master update";
...@@ -1291,7 +1292,6 @@ try again, log '%s' at postion %s", RPL_LOG_NAME, ...@@ -1291,7 +1292,6 @@ try again, log '%s' at postion %s", RPL_LOG_NAME,
sql_print_error("Slave thread killed while reading event"); sql_print_error("Slave thread killed while reading event");
goto err; goto err;
} }
if (event_len == packet_error) if (event_len == packet_error)
{ {
...@@ -1329,8 +1329,9 @@ reconnecting to retry, log '%s' position %s", RPL_LOG_NAME, ...@@ -1329,8 +1329,9 @@ reconnecting to retry, log '%s' position %s", RPL_LOG_NAME,
reconnect done to recover from failed read"); reconnect done to recover from failed read");
goto err; goto err;
} }
break;
} goto connected;
} // if(event_len == packet_error)
thd->proc_info = "Processing master log event"; thd->proc_info = "Processing master log event";
if(exec_event(thd, &mysql->net, &glob_mi, event_len)) if(exec_event(thd, &mysql->net, &glob_mi, event_len))
...@@ -1373,9 +1374,8 @@ the slave thread with \"mysqladmin start-slave\". We stopped at log \ ...@@ -1373,9 +1374,8 @@ the slave thread with \"mysqladmin start-slave\". We stopped at log \
events_till_disconnect++; events_till_disconnect++;
} }
#endif #endif
} // while(!slave_killed(thd)) - read/exec loop
} } // while(!slave_killed(thd)) - slave loop
}
// error = 0; // error = 0;
err: err:
......
...@@ -27,6 +27,11 @@ ...@@ -27,6 +27,11 @@
extern const char* any_db; extern const char* any_db;
extern pthread_handler_decl(handle_slave,arg); extern pthread_handler_decl(handle_slave,arg);
#ifndef DBUG_OFF
int max_binlog_dump_events = 0; // unlimited
bool opt_sporadic_binlog_dump_fail = 0;
static int binlog_dump_count = 0;
#endif
static int fake_rotate_event(NET* net, String* packet, char* log_file_name, static int fake_rotate_event(NET* net, String* packet, char* log_file_name,
const char**errmsg) const char**errmsg)
...@@ -265,8 +270,19 @@ void mysql_binlog_send(THD* thd, char* log_ident, ulong pos, ushort flags) ...@@ -265,8 +270,19 @@ void mysql_binlog_send(THD* thd, char* log_ident, ulong pos, ushort flags)
int error; int error;
const char *errmsg = "Unknown error"; const char *errmsg = "Unknown error";
NET* net = &thd->net; NET* net = &thd->net;
#ifndef DBUG_OFF
int left_events = max_binlog_dump_events;
#endif
DBUG_ENTER("mysql_binlog_send"); DBUG_ENTER("mysql_binlog_send");
#ifndef DBUG_OFF
if (opt_sporadic_binlog_dump_fail && (binlog_dump_count++ % 2))
{
errmsg = "Master failed COM_BINLOG_DUMP to test if slave can recover";
goto err;
}
#endif
bzero((char*) &log,sizeof(log)); bzero((char*) &log,sizeof(log));
if(!mysql_bin_log.is_open()) if(!mysql_bin_log.is_open())
...@@ -325,6 +341,14 @@ void mysql_binlog_send(THD* thd, char* log_ident, ulong pos, ushort flags) ...@@ -325,6 +341,14 @@ void mysql_binlog_send(THD* thd, char* log_ident, ulong pos, ushort flags)
while (!(error = Log_event::read_log_event(&log, packet, log_lock))) while (!(error = Log_event::read_log_event(&log, packet, log_lock)))
{ {
#ifndef DBUG_OFF
if(max_binlog_dump_events && !left_events--)
{
net_flush(net);
errmsg = "Debugging binlog dump abort";
goto err;
}
#endif
if (my_net_write(net, (char*)packet->ptr(), packet->length()) ) if (my_net_write(net, (char*)packet->ptr(), packet->length()) )
{ {
errmsg = "Failed on my_net_write()"; errmsg = "Failed on my_net_write()";
...@@ -399,6 +423,15 @@ void mysql_binlog_send(THD* thd, char* log_ident, ulong pos, ushort flags) ...@@ -399,6 +423,15 @@ void mysql_binlog_send(THD* thd, char* log_ident, ulong pos, ushort flags)
bool read_packet = 0, fatal_error = 0; bool read_packet = 0, fatal_error = 0;
#ifndef DBUG_OFF
if(max_binlog_dump_events && !left_events--)
{
net_flush(net);
errmsg = "Debugging binlog dump abort";
goto err;
}
#endif
// no one will update the log while we are reading // no one will update the log while we are reading
// now, but we'll be quick and just read one record // now, but we'll be quick and just read one record
pthread_mutex_lock(log_lock); pthread_mutex_lock(log_lock);
......
...@@ -9,6 +9,11 @@ extern uint32 server_id; ...@@ -9,6 +9,11 @@ extern uint32 server_id;
extern bool server_id_supplied; extern bool server_id_supplied;
extern I_List<i_string> binlog_do_db, binlog_ignore_db; extern I_List<i_string> binlog_do_db, binlog_ignore_db;
#ifndef DBUG_OFF
extern int max_binlog_dump_events;
extern bool opt_sporadic_binlog_dump_fail;
#endif
File open_binlog(IO_CACHE *log, const char *log_file_name, File open_binlog(IO_CACHE *log, const char *log_file_name,
const char **errmsg); const char **errmsg);
......
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