Commit f89418b4 authored by sasha@mysql.sashanet.com's avatar sasha@mysql.sashanet.com
Browse files

Merge work:/home/bk/mysql-4.0

into mysql.sashanet.com:/home/sasha/src/bk/mysql-4.0
parents 2f51cf20 beaf95b0
Loading
Loading
Loading
Loading
+78 −3
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@
#include <time.h>
#include "log_event.h"

#define PROBE_HEADER_LEN (4+EVENT_LEN_OFFSET)

#define CLIENT_CAPABILITIES	(CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_LOCAL_FILES)

char server_version[SERVER_VERSION_LENGTH];
@@ -288,6 +290,52 @@ static void dump_remote_table(NET* net, const char* db, const char* table)
  }
}

static int check_master_version(MYSQL* mysql)
{
  MYSQL_RES* res = 0;
  MYSQL_ROW row;
  const char* version;
  int old_format = 0;
  
  if (mysql_query(mysql, "SELECT VERSION()")
      || !(res = mysql_store_result(mysql)))
  {
    mysql_close(mysql);
    die("Error checking master version: %s",
		    mysql_error(mysql));
  }
  if (!(row = mysql_fetch_row(res)))
  {
    mysql_free_result(res);
    mysql_close(mysql);
    die("Master returned no rows for SELECT VERSION()");
    return 1;
  }
  if (!(version = row[0]))
  {
    mysql_free_result(res);
    mysql_close(mysql);
    die("Master reported NULL for the version");
  }
  
  switch (*version)
  {
  case '3':
    old_format = 1;
    break;
  case '4':
    old_format = 0;
    break;
  default:
    sql_print_error("Master reported unrecognized MySQL version '%s'",
		    version);
    mysql_free_result(res);
    mysql_close(mysql);
    return 1;
  }
  mysql_free_result(res);
  return old_format;
}

static void dump_remote_log_entries(const char* logname)
{
@@ -295,6 +343,9 @@ static void dump_remote_log_entries(const char* logname)
  char last_db[FN_REFLEN+1] = "";
  uint len;
  NET* net = &mysql->net;
  int old_format;
  old_format = check_master_version(mysql);
  
  if(!position) position = 4; // protect the innocent from spam
  if (position < 4)
  {
@@ -322,7 +373,7 @@ static void dump_remote_log_entries(const char* logname)
			len, net->read_pos[5]));
    Log_event * ev = Log_event::read_log_event(
					  (const char*) net->read_pos + 1 ,
					  len - 1, &error);
					  len - 1, &error, old_format);
    if (ev)
    {
      ev->print(result_file, short_form, last_db);
@@ -335,12 +386,34 @@ static void dump_remote_log_entries(const char* logname)
  }
}

static int check_header (IO_CACHE* file)
{
  char buf[PROBE_HEADER_LEN];
  int old_format;
  
  my_off_t pos = my_b_tell(file);
  my_b_seek(file, (my_off_t)0);
  if (my_b_read(file, buf, sizeof(buf)))
    die("Failed reading header");
  if (buf[EVENT_TYPE_OFFSET+4] == START_EVENT)
  {
    uint event_len;
    event_len = uint4korr(buf + EVENT_LEN_OFFSET + 4);
    old_format = (event_len < LOG_EVENT_HEADER_LEN + START_HEADER_LEN);
  }
  else
    old_format = 0;
  my_b_seek(file, pos);
  return old_format;
}

static void dump_local_log_entries(const char* logname)
{
  File fd = -1;
  IO_CACHE cache,*file= &cache;
  ulonglong rec_count = 0;
  char last_db[FN_REFLEN+1] = "";
  bool old_format = 0;

  if (logname && logname[0] != '-')
  {
@@ -349,12 +422,14 @@ static void dump_local_log_entries(const char* logname)
    if (init_io_cache(file, fd, 0, READ_CACHE, (my_off_t) position, 0,
		      MYF(MY_WME | MY_NABP)))
      exit(1);
    old_format = check_header(file);
  }
  else
  {
    if (init_io_cache(file, fileno(result_file), 0, READ_CACHE, (my_off_t) 0,
		      0, MYF(MY_WME | MY_NABP | MY_DONT_CHECK_FILESIZE)))
      exit(1);
    old_format = check_header(file);
    if (position)
    {
      /* skip 'position' characters from stdout */
@@ -385,7 +460,7 @@ static void dump_local_log_entries(const char* logname)
    char llbuff[21];
    my_off_t old_off = my_b_tell(file);

    Log_event* ev = Log_event::read_log_event(file);
    Log_event* ev = Log_event::read_log_event(file, old_format);
    if (!ev)
    {
      if (file->error)
+2 −1
Original line number Diff line number Diff line
@@ -55,7 +55,8 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \
			mf_loadpath.lo my_pthread.lo my_thr_init.lo \
			thr_mutex.lo mulalloc.lo string.lo default.lo \
			my_compress.lo array.lo my_once.lo list.lo my_net.lo \
                        charset.lo hash.lo mf_iocache.lo my_seek.lo \
                        charset.lo hash.lo mf_iocache.lo \
                        mf_iocache2.lo my_seek.lo \
			my_pread.lo mf_cache.lo my_vsnprintf.lo md5.lo

# Not needed in the minimum library
+7 −0
Original line number Diff line number Diff line
@@ -168,6 +168,9 @@ while test $# -gt 0; do
     USE_MANAGER=1
     USE_RUNNING_SERVER=
     ;;
    --start-and-exit)
     START_AND_EXIT=1
     ;; 
    --skip-innobase)
     EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-innobase"
     EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-innobase" ;;
@@ -1091,6 +1094,10 @@ then
  mysql_loadstd
fi

if [ "x$START_AND_EXIT" = "x1" ] ; then
 echo "Servers started, exiting"
 exit
fi

$ECHO  "Starting Tests"

+1 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ n
2002
show slave hosts;
Server_id	Host	Port	Rpl_recovery_rank	Master_id
2	127.0.0.1	9307	2	1
2	127.0.0.1	$SLAVE_MYPORT	2	1
drop table t1;
slave stop;
drop table if exists t2;
+4 −4
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ create table t1 (s text);
insert into t1 values('Could not break slave'),('Tried hard');
show slave status;
Master_Host	Master_User	Master_Port	Connect_retry	Log_File	Pos	Slave_Running	Replicate_do_db	Replicate_ignore_db	Last_errno	Last_error	Skip_counter	Last_log_seq
127.0.0.1	root	9999	60	master-bin.001	234	Yes			0		0	3
127.0.0.1	root	$MASTER_MYPORT	60	master-bin.001	234	Yes			0		0	3
select * from t1;
s
Could not break slave
@@ -42,7 +42,7 @@ master-bin.003
insert into t2 values (65);
show slave status;
Master_Host	Master_User	Master_Port	Connect_retry	Log_File	Pos	Slave_Running	Replicate_do_db	Replicate_ignore_db	Last_errno	Last_error	Skip_counter	Last_log_seq
127.0.0.1	root	9999	60	master-bin.003	202	Yes			0		0	3
127.0.0.1	root	$MASTER_MYPORT	60	master-bin.003	127	Yes			0		0	2
select * from t2;
m
34
@@ -60,12 +60,12 @@ master-bin.005
master-bin.006
show master status;
File	Position	Binlog_do_db	Binlog_ignore_db
master-bin.006	710		
master-bin.006	382		
slave stop;
slave start;
show slave status;
Master_Host	Master_User	Master_Port	Connect_retry	Log_File	Pos	Slave_Running	Replicate_do_db	Replicate_ignore_db	Last_errno	Last_error	Skip_counter	Last_log_seq
127.0.0.1	root	9999	60	master-bin.006	710	Yes			0		0	11
127.0.0.1	root	$MASTER_MYPORT	60	master-bin.006	382	Yes			0		0	6
lock tables t3 read;
select count(*) from t3 where n >= 4;
count(*)
Loading