diff options
author | unknown <sasha@mysql.sashanet.com> | 2001-06-26 17:02:33 -0600 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2001-06-26 17:02:33 -0600 |
commit | d2a5fab24def903a681b0534ac30ef9c525d4670 (patch) | |
tree | 68843be68cdb392645cde55e6ce4669ce7b98c67 /sql | |
parent | f246b619153704f78ecc60361470f3f664fc6493 (diff) | |
download | mariadb-git-d2a5fab24def903a681b0534ac30ef9c525d4670.tar.gz |
--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:
added --do-test
mysql-test/r/rpl_log.result:
update for new rotate event format
sql/log_event.cc:
rotate event now supports forcing a new position, not just the log
sql/log_event.h:
clean-up of rotate event, support for position force with rotate event
sql/slave.cc:
accept position setting from rotate event
sql/sql_repl.cc:
updates to fake_rotate_event() for the new format
Diffstat (limited to 'sql')
-rw-r--r-- | sql/log_event.cc | 15 | ||||
-rw-r--r-- | sql/log_event.h | 18 | ||||
-rw-r--r-- | sql/slave.cc | 2 | ||||
-rw-r--r-- | sql/sql_repl.cc | 6 |
4 files changed, 30 insertions, 11 deletions
diff --git a/sql/log_event.cc b/sql/log_event.cc index e50c650d581..5538e6c0b7f 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -190,7 +190,10 @@ void Load_log_event::pack_info(String* packet) 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 Stop_log_event::print(FILE* file, bool short_form, char* last_db) void Rotate_log_event::print(FILE* file, bool short_form, char* last_db) { + char buf[22]; if (short_form) return; @@ -500,7 +504,7 @@ void Rotate_log_event::print(FILE* file, bool short_form, char* last_db) 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 @@ Rotate_log_event::Rotate_log_event(const char* buf, int event_len): 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 @@ Rotate_log_event::Rotate_log_event(const char* buf, int event_len): 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): diff --git a/sql/log_event.h b/sql/log_event.h index aa65a0d7d55..f38ddef05a2 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -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 @@ class Rotate_log_event: public Log_event 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 @@ public: 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); diff --git a/sql/slave.cc b/sql/slave.cc index aa7ce352a62..8ce6b59dd5b 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1205,7 +1205,7 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) 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); diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 435319fe6e0..0c835ee4e57 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -62,7 +62,7 @@ void end_slave_list() 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 @@ static int fake_rotate_event(NET* net, String* packet, char* log_file_name, 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())) { |