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

rpl000016.test sync

rpl000001.result	BitKeeper file /home/sasha/src/bk/mysql/mysql-test/r/rpl000001.result
ignore  	Added BitKeeper/tmp/bkr3sAHD to the ignore list
slave.h 	MASTER_POS_WAIT
lex.h   	MASTER_POS_WAIT
slave.cc	MASTER_POS_WAIT, do automagic restart on debugging abort, skip rotate events in 
slave.cc	debug abort count
sql_repl.cc	announce the log name at the start of the log with a fake rotate event
item_create.h	MASTER_POS_WAIT
item_func.cc	MASTER_POS_WAIT
item_func.h	MASTER_POS_WAIT
sql_class.h	enter_cond(), exit_cond() helper inliners
item_create.cc	added MASTER_POS_WAIT
mysql-test-run.sh	speed improvement fixes
rpl000007.test	sync
rpl000003.test	sleep -> sync
rpl000004.test	sleep -> sync, fixed clean up bug
rpl000014.test	sync
rpl000009.test	sync
rpl000013.test	sync
rpl000001.test	sleep -> sync
rpl000008.test	sync
rpl000006.test	sync on cleanup
rpl000011.test	sync
rpl000012.test	sync
rpl000005.test	sleep -> sync
rpl000010.test	sync
rpl000015.test	sync
rpl000002.test	sleep -> sync
rpl000014.result	we now know the master log name as soon as we connect
mysql.cc	added optional agrument to --wait
mysqltest.c	added save_master_pos and sync_with_master commands
parent 1d25808f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -188,3 +188,4 @@ Docs/my_sys.doc
tmp/*
extra/resolve_stack_dump
sql/share/*.sys
BitKeeper/tmp/bkr3sAHD
+8 −4
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@ static char *current_host,*current_db,*current_user=0,*opt_password=0,
            *default_charset;
static char *histfile;
static String glob_buffer,old_buffer;
static int wait_time = 5;
static STATUS status;
static ulong select_limit,max_join_size,opt_connect_timeout=0;
static char default_pager[FN_REFLEN];
@@ -427,7 +428,7 @@ static struct option long_options[] =
  {"verbose",	    no_argument,	   0, 'v'},
  {"version",	    no_argument,	   0, 'V'},
  {"vertical",	    no_argument,	   0, 'E'},
  {"wait",	    no_argument,	   0, 'w'},
  {"wait",	    optional_argument,	   0, 'w'},
  {0, 0, 0, 0}
};

@@ -560,7 +561,7 @@ static int get_options(int argc, char **argv)

  set_all_changeable_vars(changeable_vars);
  while ((c=getopt_long(argc,argv,
			"?ABCD:LfgGHinNoqrstTU::vVwWEe:h:O:P:S:u:#::p::",
			"?ABCD:LfgGHinNoqrstTU::vVw::WEe:h:O:P:S:u:#::p::",
			long_options, &option_index)) != EOF)
  {
    switch(c) {
@@ -664,7 +665,10 @@ static int get_options(int argc, char **argv)
    case 'n': unbuffered=1; break;
    case 'v': verbose++; break;
    case 'E': vertical=1; break;
    case 'w': wait_flag=1; break;
    case 'w':
      wait_flag=1;
      if(optarg) wait_time = atoi(optarg) ;
      break;
    case 'A': no_rehash=1; break;
    case 'G': no_named_cmds=0; break;
    case 'g': no_named_cmds=1; break;
@@ -2114,7 +2118,7 @@ sql_connect(char *host,char *database,char *user,char *password,uint silent)
      message=1;
      tee_fputs("Waiting",stderr); (void) fflush(stderr);
    }
    (void) sleep(5);
    (void) sleep(wait_time);
    if (!silent)
    {
      putc('.',stderr); (void) fflush(stderr);
+58 −2
Original line number Diff line number Diff line
@@ -91,6 +91,12 @@ int *cur_block, *block_stack_end;

DYNAMIC_ARRAY q_lines;

typedef struct 
{
  char file[FN_REFLEN];
  ulong pos;
} MASTER_POS ;

struct connection
{
  MYSQL mysql;
@@ -104,6 +110,7 @@ typedef
  } PARSER;

PARSER parser;
MASTER_POS master_pos;
int block_ok = 1; /* set to 0 if the current block should not be executed */
int false_block_depth = 0;
const char* result_file = 0; /* if set, all results are concated and
@@ -137,13 +144,15 @@ struct st_query
  enum { Q_CONNECTION=1, Q_QUERY, Q_CONNECT,
	 Q_SLEEP, Q_INC, Q_DEC,Q_SOURCE,
	 Q_DISCONNECT,Q_LET, Q_ECHO, Q_WHILE, Q_END_BLOCK,
	 Q_SYSTEM, Q_RESULT, Q_REQUIRE,
	 Q_SYSTEM, Q_RESULT, Q_REQUIRE, Q_SAVE_MASTER_POS,
	 Q_SYNC_WITH_MASTER,
	 Q_UNKNOWN, Q_COMMENT, Q_COMMENT_WITH_COMMAND} type;
};

const char *command_names[] = {
"connection", "query","connect","sleep","inc","dec","source","disconnect",
"let","echo","while","end","system","result", "require",0
"let","echo","while","end","system","result", "require", "save_master_pos",
 "sync_with_master", 0
};

TYPELIB command_typelib= {array_elements(command_names),"",
@@ -471,6 +480,50 @@ int do_echo(struct st_query* q)
  return 0;
}

int do_sync_with_master()
{
  MYSQL_RES* res;
  MYSQL_ROW row;
  MYSQL* mysql = &cur_con->mysql;
  char query_buf[FN_REFLEN+128];
  sprintf(query_buf, "select master_pos_wait('%s', %ld)", master_pos.file,
	  master_pos.pos);
  if(mysql_query(mysql, query_buf))
    die("At line %u: failed in %s: %d: %s", start_lineno, query_buf,
	mysql_errno(mysql), mysql_error(mysql));

  if(!(res = mysql_store_result(mysql)))
    die("line %u: mysql_store_result() retuned NULL", start_lineno);
  if(!(row = mysql_fetch_row(res)))
    die("line %u: empty result in %s", start_lineno, query_buf);
  if(!row[0])
    die("Error on slave while syncing with master");
  mysql_free_result(res);
      
  return 0;
}

int do_save_master_pos()
{
  MYSQL_RES* res;
  MYSQL_ROW row;
  MYSQL* mysql = &cur_con->mysql;
  if(mysql_query(mysql, "show master status"))
    die("At line %u: failed in show master status: %d: %s", start_lineno,
	mysql_errno(mysql), mysql_error(mysql));

  if(!(res = mysql_store_result(mysql)))
    die("line %u: mysql_store_result() retuned NULL", start_lineno);
  if(!(row = mysql_fetch_row(res)))
    die("line %u: empty result in show master status", start_lineno);
  strncpy(master_pos.file, row[0], sizeof(master_pos.file));
  master_pos.pos = strtoul(row[1], (char**) 0, 10); 
  mysql_free_result(res);
      
  return 0;
}


int do_let(struct st_query* q)
{
  char* p=q->first_argument;
@@ -1299,6 +1352,7 @@ int main(int argc, char** argv)
  cur_con = cons;

  memset(file_stack, 0, sizeof(file_stack));
  memset(&master_pos, 0, sizeof(master_pos));
  file_stack_end = file_stack + MAX_INCLUDE_DEPTH;
  cur_file = file_stack;
  lineno   = lineno_stack;
@@ -1361,6 +1415,8 @@ int main(int argc, char** argv)
	get_file_name(save_file,q);
	require_file=1;
	break;
      case Q_SAVE_MASTER_POS: do_save_master_pos(q); break;	
      case Q_SYNC_WITH_MASTER: do_sync_with_master(q); break;	
      case Q_COMMENT:				/* Ignore row */
      case Q_COMMENT_WITH_COMMAND:
      default: processed = 0; break;
+13 −3
Original line number Diff line number Diff line
@@ -192,11 +192,13 @@ if [ x$SOURCE_DIST = x1 ] ; then
 MYSQLD="$BASEDIR/sql/mysqld"
 MYSQL_TEST="$BASEDIR/client/mysqltest"
 MYSQLADMIN="$BASEDIR/client/mysqladmin"
 MYSQL="$BASEDIR/client/mysql"
 INSTALL_DB="./install_test_db"
else
 MYSQLD="$BASEDIR/bin/mysqld"
 MYSQL_TEST="$BASEDIR/bin/mysqltest"
 MYSQLADMIN="$BASEDIR/bin/mysqladmin"
 MYSQL="$BASEDIR/bin/mysql"
 INSTALL_DB="./install_test_db -bin"
fi

@@ -230,6 +232,11 @@ SLAVE_MYSQLD=$MYSQLD #this can be changed later if we are doing gcov
#++
# Function Definitions
#--
wait_for_server_start ()
 {
   $MYSQL -e "select 1" --silent -w1 --host=127.0.0.1 --port=$1 \
    >/dev/null
 }

prompt_user ()
{
@@ -320,6 +327,7 @@ gcov_collect () {
    $ECHO "gcov info in $GCOV_MSG, errors in $GCOV_ERR"
}


start_master()
{
    [ x$MASTER_RUNNING = 1 ] && return
@@ -354,6 +362,7 @@ start_master()
    else	    
      $MYSQLD $master_args  >> $MASTER_MYERR 2>&1 &
    fi  
  wait_for_server_start $MASTER_MYPORT
  MASTER_RUNNING=1
}

@@ -399,6 +408,7 @@ start_slave()
    else
      $SLAVE_MYSQLD $slave_args  >> $SLAVE_MYERR 2>&1 &
    fi
    wait_for_server_start $SLAVE_MYPORT
    SLAVE_RUNNING=1
}

@@ -407,7 +417,6 @@ mysql_start () {
    start_master
    start_slave
    cd $MYSQL_TEST_DIR
    sleep $SLEEP_TIME    # Give mysqld time to start properly
    return 1
}

@@ -430,7 +439,6 @@ stop_slave ()
     fi
    fi
    SLAVE_RUNNING=0
    sleep $SLEEP_TIME	# Give mysqld time to go down properly
  fi  
}

@@ -453,7 +461,6 @@ stop_master ()
     fi
    fi
    MASTER_RUNNING=0
    sleep $SLEEP_TIME	# Give mysqld time to go down properly
  fi
}

@@ -463,7 +470,10 @@ mysql_stop ()
 $ECHO  "Shutting-down MySQL daemon"
 $ECHO  ""
 stop_master
 $ECHO "Master shutdown finished"
 stop_slave
 $ECHO "Slave shutdown finished"
 
 return 1
}

+5 −0
Original line number Diff line number Diff line
n
1
2
sum(length(word))
71
Loading