List:Internals« Previous MessageNext Message »
From:sasha Date:June 26 2001 11:02pm
Subject:bk commit into 4.0 tree
View as plain text  
Below is the list of changes that have just been pushed into main
4.0 repository. For information on how to access the repository
see http://www.mysql.com/doc/I/n/Installing_source_tree.html

ChangeSet@stripped, 2001-06-26 17:02:33-06:00, sasha@stripped
  --do-test option in mysql-test-run - will do only tests that match the pattern
  updated rotate event to set new position along with the new log

  mysql-test/mysql-test-run.sh
    1.83 01/06/26 17:02:32 sasha@stripped +12 -2
    added --do-test

  mysql-test/r/rpl_log.result
    1.4 01/06/26 17:02:32 sasha@stripped +4 -4
    update for new rotate event format

  sql/log_event.cc
    1.44 01/06/26 17:02:32 sasha@stripped +12 -3
    rotate event now supports forcing a new position, not just the log

  sql/log_event.h
    1.46 01/06/26 17:02:32 sasha@stripped +13 -5
    clean-up of rotate event, support for position force with rotate event

  sql/slave.cc
    1.113 01/06/26 17:02:32 sasha@stripped +1 -1
    accept position setting from rotate event

  sql/sql_repl.cc
    1.45 01/06/26 17:02:32 sasha@stripped +4 -2
    updates to fake_rotate_event() for the new format

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	sasha
# Host:	mysql.sashanet.com
# Root:	/home/sasha/src/bk/mysql-4.0

--- 1.82/mysql-test/mysql-test-run.sh	Mon Jun 25 02:35:21 2001
+++ 1.83/mysql-test/mysql-test-run.sh	Tue Jun 26 17:02:32 2001
@@ -145,6 +145,7 @@
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-bdb" ;;
     --skip-rpl) NO_SLAVE=1 ;;
     --skip-test=*) SKIP_TEST=`$ECHO "$1" | $SED -e "s;--skip-test=;;"`;;
+    --do-test=*) DO_TEST=`$ECHO "$1" | $SED -e "s;--do-test=;;"`;;
     --record)
       RECORD=1;
       EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
@@ -336,7 +337,7 @@
   then
     echo "Below are the diffs between actual and expected results:"
     echo "-------------------------------------------------------"
-    $DIFF -c $result_file $reject_file
+    $DIFF -c -a $result_file $reject_file
     echo "-------------------------------------------------------"
     echo "Please follow the instructions outlined at"
     echo "http://www.mysql.com/doc/R/e/Reporting_mysqltest_bugs.html"
@@ -667,13 +668,22 @@
  slave_init_script=$TESTDIR/$tname-slave.sh
  slave_master_info_file=$TESTDIR/$tname-slave-master-info.opt
  SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0`
- if [ -n $SKIP_TEST ] ; then 
+ if [ -n "$SKIP_TEST" ] ; then 
    SKIP_THIS_TEST=`$EXPR \( $tname : "$SKIP_TEST" \) != 0`
    if [ x$SKIP_THIS_TEST = x1 ] ;
    then
     return;
    fi
   fi
+
+ if [ -n "$DO_TEST" ] ; then 
+   DO_THIS_TEST=`$EXPR \( $tname : "$DO_TEST" \) != 0`
+   if [ x$DO_THIS_TEST = x0 ] ;
+   then
+    return;
+   fi
+  fi
+
 
  if [ x${NO_SLAVE}x$SKIP_SLAVE = x1x0 ] ;
  then

--- 1.43/sql/log_event.cc	Sat Jun 23 19:37:23 2001
+++ 1.44/sql/log_event.cc	Tue Jun 26 17:02:32 2001
@@ -190,7 +190,10 @@
 void Rotate_log_event::pack_info(String* packet)
 {
   String tmp;
+  char buf[22];
   tmp.append(new_log_ident, ident_len);
+  tmp.append(";pos=");
+  tmp.append(llstr(pos,buf));
   if(flags & LOG_EVENT_FORCED_ROTATE_F)
     tmp.append("; forced by master");
   net_store_data(packet, tmp.ptr(), tmp.length());
@@ -492,6 +495,7 @@
 
 void Rotate_log_event::print(FILE* file, bool short_form, char* last_db)
 {
+  char buf[22];
   if (short_form)
     return;
 
@@ -500,7 +504,7 @@
   if (new_log_ident)
     my_fwrite(file, (byte*) new_log_ident, (uint)ident_len, 
 	      MYF(MY_NABP | MY_WME));
-  fprintf(file, "\n");
+  fprintf(file, "pos=%s\n", llstr(pos, buf));
   fflush(file);
 }
 
@@ -530,8 +534,10 @@
   if(event_len < ROTATE_EVENT_OVERHEAD)
     return;
 
+  pos = uint8korr(buf + R_POS_OFFSET + LOG_EVENT_HEADER_LEN);
   ident_len = (uchar)(event_len - ROTATE_EVENT_OVERHEAD);
-  if (!(new_log_ident = (char*) my_memdup((byte*) buf + LOG_EVENT_HEADER_LEN,
+  if (!(new_log_ident = (char*) my_memdup((byte*) buf + R_IDENT_OFFSET
+					  + LOG_EVENT_HEADER_LEN,
 					  (uint) ident_len, MYF(MY_WME))))
     return;
 
@@ -540,7 +546,10 @@
 
 int Rotate_log_event::write_data(IO_CACHE* file)
 {
-  return my_b_write(file, (byte*) new_log_ident, (uint) ident_len) ? -1 :0;
+  char buf[ROTATE_HEADER_LEN];
+  int8store(buf, pos + R_POS_OFFSET);
+  return my_b_write(file, (byte*)buf, ROTATE_HEADER_LEN) ||
+    my_b_write(file, (byte*)new_log_ident, (uint) ident_len);
 }
 
 Query_log_event::Query_log_event(const char* buf, int event_len):

--- 1.45/sql/log_event.h	Sat Jun 23 19:37:23 2001
+++ 1.46/sql/log_event.h	Tue Jun 26 17:02:32 2001
@@ -54,6 +54,7 @@
 #define QUERY_HEADER_LEN     (4 + 4 + 1 + 2)
 #define LOAD_HEADER_LEN      (4 + 4 + 4 + 1 +1 + 4)
 #define START_HEADER_LEN     (2 + ST_SERVER_VER_LEN + 4)
+#define ROTATE_HEADER_LEN    8
 
 /* event header offsets */
 
@@ -98,10 +99,14 @@
 #define L_NUM_FIELDS_OFFSET  14
 #define L_DATA_OFFSET    LOAD_HEADER_LEN
 
+/* Rotate event post-header */
+
+#define R_POS_OFFSET       0
+#define R_IDENT_OFFSET     8
 
 #define QUERY_EVENT_OVERHEAD  (LOG_EVENT_HEADER_LEN+QUERY_HEADER_LEN)
 #define QUERY_DATA_OFFSET (LOG_EVENT_HEADER_LEN+QUERY_HEADER_LEN)
-#define ROTATE_EVENT_OVERHEAD LOG_EVENT_HEADER_LEN
+#define ROTATE_EVENT_OVERHEAD (LOG_EVENT_HEADER_LEN+ROTATE_HEADER_LEN)
 #define LOAD_EVENT_OVERHEAD   (LOG_EVENT_HEADER_LEN+LOAD_HEADER_LEN+sizeof(sql_ex_info))
 
 #define BINLOG_MAGIC        "\xfe\x62\x69\x6e"
@@ -111,7 +116,7 @@
 
 enum Log_event_type { START_EVENT = 1, QUERY_EVENT =2,
 		      STOP_EVENT=3, ROTATE_EVENT = 4, INTVAR_EVENT=5,
-                      LOAD_EVENT=6, SLAVE_EVENT=7};
+                      LOAD_EVENT=6, SLAVE_EVENT=7, FILE_EVENT=8};
 enum Int_event_type { INVALID_INT_EVENT = 0, LAST_INSERT_ID_EVENT = 1, INSERT_ID_EVENT = 2
  };
 
@@ -487,12 +492,15 @@
 public:
   const char* new_log_ident;
   uchar ident_len;
+  ulonglong pos;
   bool alloced;
   
-  Rotate_log_event(const char* new_log_ident_arg, uint ident_len_arg = 0) :
+  Rotate_log_event(const char* new_log_ident_arg, uint ident_len_arg = 0,
+		   ulonglong pos_arg = 4) :
     Log_event(time(NULL)),
     new_log_ident(new_log_ident_arg),
-    ident_len(ident_len_arg ? ident_len_arg : (uint) strlen(new_log_ident_arg)),
+    ident_len(ident_len_arg ? ident_len_arg :
+	      (uint) strlen(new_log_ident_arg)), pos(pos_arg),
     alloced(0)
   {}
   
@@ -503,7 +511,7 @@
       my_free((gptr) new_log_ident, MYF(0));
   }
   Log_event_type get_type_code() { return ROTATE_EVENT;}
-  int get_data_size() { return  ident_len;}
+  int get_data_size() { return  ident_len + ROTATE_HEADER_LEN;}
   int write_data(IO_CACHE* file);
   
   void print(FILE* file, bool short_form = 0, char* last_db = 0);

--- 1.112/sql/slave.cc	Sat Jun 23 19:37:23 2001
+++ 1.113/sql/slave.cc	Tue Jun 26 17:02:32 2001
@@ -1205,7 +1205,7 @@
         memcpy(log_name, rev->new_log_ident,ident_len );
         log_name[ident_len] = 0;
       }
-      mi->pos = 4; // skip magic number
+      mi->pos = rev->pos; 
       mi->last_log_seq = ev->log_seq;
       pthread_cond_broadcast(&mi->cond);
       pthread_mutex_unlock(&mi->lock);

--- 1.3/mysql-test/r/rpl_log.result	Sat Jun 23 19:37:23 2001
+++ 1.4/mysql-test/r/rpl_log.result	Tue Jun 26 17:02:32 2001
@@ -23,8 +23,8 @@
 master-bin.001	311	Query	1	6	use test; create table t1 (word char(20) not null)
 master-bin.001	386	Load	1	7	use test; LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1 FIELDS TERMINATED BY '\t' ESCAPED BY '\\' LINES TERMINATED BY '\n' (word)
 master-bin.001	468	Query	1	8	use test; drop table t1
-master-bin.001	516	Rotate	1	9	master-bin.002
-master-bin.001	549	Stop	1	10	
+master-bin.001	516	Rotate	1	9	master-bin.002;pos=4
+master-bin.001	557	Stop	1	10	
 Log_name	Pos	Event_type	Server_id	Log_seq	Info
 master-bin.002	4	Start	1	1	Server ver: 4.0.0-debug-log, Binlog ver: 2
 master-bin.002	79	Query	1	2	use test; create table t1 (n int)
@@ -45,8 +45,8 @@
 slave-bin.001	316	Query	1	5	use test; drop table t1
 slave-bin.001	364	Query	1	6	use test; create table t1 (word char(20) not null)
 slave-bin.001	439	Query	1	8	use test; drop table t1
-slave-bin.001	487	Rotate	2	3	slave-bin.002; forced by master
-slave-bin.001	519	Stop	2	4	
+slave-bin.001	487	Rotate	2	3	slave-bin.002;pos=4; forced by master
+slave-bin.001	527	Stop	2	4	
 Log_name	Pos	Event_type	Server_id	Log_seq	Info
 slave-bin.002	4	Start	2	1	Server ver: 4.0.0-debug-log, Binlog ver: 2
 slave-bin.002	79	Slave	2	2	host=127.0.0.1,port=9306,log=master-bin.002,pos=4

--- 1.44/sql/sql_repl.cc	Thu Jun 21 13:19:23 2001
+++ 1.45/sql/sql_repl.cc	Tue Jun 26 17:02:32 2001
@@ -62,7 +62,7 @@
 static int fake_rotate_event(NET* net, String* packet, char* log_file_name,
 			     const char**errmsg)
 {
-  char header[LOG_EVENT_HEADER_LEN];
+  char header[LOG_EVENT_HEADER_LEN], buf[ROTATE_HEADER_LEN];
   memset(header, 0, 4); // when does not matter
   header[EVENT_TYPE_OFFSET] = ROTATE_EVENT;
   char* p = strrchr(log_file_name, FN_LIBCHAR);
@@ -73,12 +73,14 @@
     p = log_file_name;
 
   uint ident_len = (uint) strlen(p);
-  ulong event_len = ident_len + sizeof(header);
+  ulong event_len = ident_len + ROTATE_EVENT_OVERHEAD;
   int4store(header + SERVER_ID_OFFSET, server_id);
   int4store(header + EVENT_LEN_OFFSET, event_len);
   int2store(header + FLAGS_OFFSET, 0);
   int4store(header + LOG_SEQ_OFFSET, 0);
   packet->append(header, sizeof(header));
+  int8store(buf, 4); // tell slave to skip magic number
+  packet->append(buf, ROTATE_HEADER_LEN);
   packet->append(p,ident_len);
   if(my_net_write(net, (char*)packet->ptr(), packet->length()))
     {
Thread
bk commit into 4.0 treesasha27 Jun