[Maria-developers] Updated (by Alexi): Add a mysqlbinlog option to filter updates to certain tables (40)

2009-11-08 Thread worklog-noreply
---
  WORKLOG TASK
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
TASK...: Add a mysqlbinlog option to filter updates to certain tables
CREATION DATE..: Mon, 10 Aug 2009, 13:25
SUPERVISOR.: Monty
IMPLEMENTOR: 
COPIES TO..: Psergey
CATEGORY...: Server-RawIdeaBin
TASK ID: 40 (http://askmonty.org/worklog/?tid=40)
VERSION: Server-9.x
STATUS.: Un-Assigned
PRIORITY...: 60
WORKED HOURS...: 2
ESTIMATE...: 48 (hours remain)
ORIG. ESTIMATE.: 48

PROGRESS NOTES:

-=-=(Alexi - Sun, 08 Nov 2009, 10:40)=-=-
Low Level Design modified.
--- /tmp/wklog.40.old.5055  2009-11-08 08:40:02.0 +
+++ /tmp/wklog.40.new.5055  2009-11-08 08:40:02.0 +
@@ -3,6 +3,7 @@
 
 1. Adding --binlog-with-tables-info option
 **
+GLOBAL, read-only option.
 
 When set, Query events are to be written in the extended binary
 format which contains tables_info. When not set, Query events

-=-=(Alexi - Thu, 05 Nov 2009, 12:37)=-=-
Low Level Design modified.
--- /tmp/wklog.40.old.11441 2009-11-05 12:37:16.0 +0200
+++ /tmp/wklog.40.new.11441 2009-11-05 12:37:16.0 +0200
@@ -1,9 +1,18 @@
 OPTION: 2.5 Extend Query Events With Tables Info
 
 
-1. Query_log_event Binary Format
-
-Changes to be done:
+1. Adding --binlog-with-tables-info option
+**
+
+When set, Query events are to be written in the extended binary
+format which contains tables_info. When not set, Query events
+are to be written in usual format (without any changes).
+
+2. Query event extended binary format
+*
+
+When --binlog-with-tables-info is set, Query events are writen
+to binary log in the following (extended) format.
 
   Query_log_event binary format
   -
@@ -24,12 +33,12 @@
   error_code2
   status_vars_len   2
 + query_len 2  (see Note 1)
-+ tables_info_len   2  (see Note 2)
++ tables_info_len   2
   -
   BODY:
   status_vars   status_vars_len
 - dbdb_len + 1
-+ dbdb_len  (see Note 3)
++ dbdb_len  (see Note 2)
   query query_len
 + tables_info
 
@@ -37,7 +46,7 @@
   -
   Name  Size (bytes)
   -
-  db_len1  (see Note 4)
+  db_len1  (see Note 3)
   dbdb_len
   table_name_len1
   table_nametable_name_len
@@ -48,19 +57,99 @@
   table_nametable_name_len
 
 NOTES
-1. Currently Query_log_event format doesn't include 'query_len' because
+1. In usual format, Query_log_event doesn't include 'query_len' because
it considers the query to extent to the end of the event.
-2. If tables_info is not included in the event (--binlog-with-tables-info
-   option), tables_info_len = 0.
-3. The trailing zero is redundant since the length is already known.
-4. In case of db = current db, db_len = 0 and db = empty, because
-   current db is already included in the current event format.
+2. For 'db' (current db) the trailing zero is redundant since the length
+   is already known.
+3. db_len = 0 means that this is the current db.
+
+When reading Query events from binary log, we can recognize its format
+by its post-header length: in extended case the post-header includes 4
+additional bytes.
+
+  #define QUERY_HEADER_LEN(QUERY_HEADER_MINIMAL_LEN + 4)
++ #define QUERY_HEADER_LEN_EXT(QUERY_HEADER_LEN + 4)
+  ...
+  #define Q_STATUS_VARS_LEN_OFFSET11
++ #define Q_QUERY_LEN_OFFSET  Q_STATUS_VARS_LEN_OFFSET + 2
++ #define Q_QUERY_TABLES_INFO_LEN_OFFSET  Q_QUERY_LEN_OFFSET + 2
+
+3. Changes in log events
+
+
+3.1. Format description event
+~
+Changes needed here concern setting post-header length for Query events.
+This setting is done in Format description event constructor which creates
+the event for writing to binary log:
+
+  if (binlog_with_tables_info)
+  post_header_len[QUERY_EVENT - 1] = QUERY_HEADER_LEN_EXT;
+  else
+  post_header_len[QUERY_EVENT - 1] = QUERY_HEADER_LEN;
+
+This change is to be done only for case binlog_ver = 4.
+
+NOTE. The refered above constructor is allowed to be invoked in a client
+context for creating artificial Format description events in case of
+MySQL  5.0 (e.g. see mysqlbinlog code). To avoid compilation problems
+(because of 'binlog_with_tables_info') and taking into account the
+MySQL  5.0 restriction, we have to #ifdef out the above code in
+following manner:
+
+  switch (binlog_ver) {
+  case 4: /* MySQL 5.0 and higher */
++ #ifndef MYSQL_CLIENT
+...
++ #else
++   

[Maria-developers] Updated (by Alexi): Add a mysqlbinlog option to filter updates to certain tables (40)

2009-11-08 Thread worklog-noreply
---
  WORKLOG TASK
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
TASK...: Add a mysqlbinlog option to filter updates to certain tables
CREATION DATE..: Mon, 10 Aug 2009, 13:25
SUPERVISOR.: Monty
IMPLEMENTOR: 
COPIES TO..: Psergey
CATEGORY...: Server-RawIdeaBin
TASK ID: 40 (http://askmonty.org/worklog/?tid=40)
VERSION: Server-9.x
STATUS.: Un-Assigned
PRIORITY...: 60
WORKED HOURS...: 2
ESTIMATE...: 48 (hours remain)
ORIG. ESTIMATE.: 48

PROGRESS NOTES:

-=-=(Alexi - Sun, 08 Nov 2009, 15:18)=-=-
Low Level Design modified.
--- /tmp/wklog.40.old.15787 2009-11-08 15:18:11.0 +0200
+++ /tmp/wklog.40.new.15787 2009-11-08 15:18:11.0 +0200
@@ -62,7 +62,7 @@
it considers the query to extent to the end of the event.
 2. For 'db' (current db) the trailing zero is redundant since the length
is already known.
-3. db_len = 0 means that this is the current db.
+3. In tables_info, db_len = 0 means that this is the current db.
 
 When reading Query events from binary log, we can recognize its format
 by its post-header length: in extended case the post-header includes 4
@@ -75,6 +75,77 @@
 + #define Q_QUERY_LEN_OFFSET  Q_STATUS_VARS_LEN_OFFSET + 2
 + #define Q_QUERY_TABLES_INFO_LEN_OFFSET  Q_QUERY_LEN_OFFSET + 2
 
+
+***
+HELP NEEDED
+***
+The QUERY_HEADER_LEN is used in the definition of MAX_LOG_EVENT_HEADER:
+
+log_event.h
+~~~
+#define MAX_LOG_EVENT_HEADER   ( /* in order of Query_log_event::write */ \
+  LOG_EVENT_HEADER_LEN + /* write_header */ \
+  QUERY_HEADER_LEN  + /* write_data */   \
+  EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN + /*write_post_header_for_derived */ \
+  MAX_SIZE_LOG_EVENT_STATUS + /* status */ \
+  NAME_LEN + 1)
+
+which is used only for setting
+
+  thd-variables.max_allowed_packet
+  mysql-net.max_packet_size
+
+Looks like (but I am not quite sure) that QUERY_HEADER_LEN can simply
+(without making any other changes) be substituted in this definition by
+QUERY_HEADER_LEN_EXT.
+
+Below I list all places where MAX_LOG_EVENT_HEADER is used:
+
+slave.cc
+
+static int init_slave_thread(...)
+{ ...
+  /*
+Adding MAX_LOG_EVENT_HEADER_LEN to the max_allowed_packet on all
+slave threads, since a replication event can become this much larger
+than the corresponding packet (query) sent from client to master.
+  */
+  thd-variables.max_allowed_packet= global_system_variables.max_allowed_packet
++ MAX_LOG_EVENT_HEADER;  /* note, incr over the global not session var */
+  ...
+}
+pthread_handler_t handle_slave_io(...)
+{ ...
+  /*
+Adding MAX_LOG_EVENT_HEADER_LEN to the max_packet_size on the I/O
+thread, since a replication event can become this much larger than
+the corresponding packet (query) sent from client to master.
+  */
+  mysql-net.max_packet_size= thd-net.max_packet_size+= MAX_LOG_EVENT_HEADER;
+  ...
+}
+
+sql_repl.cc
+~~~
+void mysql_binlog_send(...)
+{ ...
+  /*
+Adding MAX_LOG_EVENT_HEADER_LEN, since a binlog event can become
+this larger than the corresponding packet (query) sent 
+from client to master.
+  */
+  thd-variables.max_allowed_packet+= MAX_LOG_EVENT_HEADER;
+  ...
+}
+bool mysql_show_binlog_events(...)
+{ ...
+  /*
+to account binlog event header size
+  */
+  thd-variables.max_allowed_packet+= MAX_LOG_EVENT_HEADER;
+  ...
+}
+
 3. Changes in log events
 
 
@@ -84,7 +155,7 @@
 This setting is done in Format description event constructor which creates
 the event for writing to binary log:
 
-  if (binlog_with_tables_info)
+  if (opt_binlog_with_tables_info)
   post_header_len[QUERY_EVENT - 1] = QUERY_HEADER_LEN_EXT;
   else
   post_header_len[QUERY_EVENT - 1] = QUERY_HEADER_LEN;
@@ -99,12 +170,12 @@
 following manner:
 
   switch (binlog_ver) {
-  case 4: /* MySQL 5.0 and higher */
 + #ifndef MYSQL_CLIENT
+  case 4: /* MySQL 5.0 and higher */
 ...
-+ #else
-+   error
+break;
 + #endif
+
   case 1:
   case 3:
 ...
@@ -132,7 +203,7 @@
 
 [Creates the event for binlogging]
 
-In case of binlog_with_tables_info = TRUE, set additionally query_len,
+In case of opt_binlog_with_tables_info = TRUE, set additionally query_len,
 tables_info_len, and tables_info members (the constructor is to have
 an additional 'tables_info' argument).
 
@@ -140,7 +211,7 @@
 
 [Writes the event to binlog]
 
-In case of binlog_with_tables_info = TRUE, write additional members
+In case of opt_binlog_with_tables_info = TRUE, write additional members
 (query_len, tables_info_len, and tables_info) to binary log. Also
 write corresponding whole event length to the common-header.
 

-=-=(Alexi - Sun, 08 Nov 2009, 

[Maria-developers] Updated (by Alexi): Add a mysqlbinlog option to filter updates to certain tables (40)

2009-11-08 Thread worklog-noreply
---
  WORKLOG TASK
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
TASK...: Add a mysqlbinlog option to filter updates to certain tables
CREATION DATE..: Mon, 10 Aug 2009, 13:25
SUPERVISOR.: Monty
IMPLEMENTOR: 
COPIES TO..: Psergey
CATEGORY...: Server-RawIdeaBin
TASK ID: 40 (http://askmonty.org/worklog/?tid=40)
VERSION: Server-9.x
STATUS.: Un-Assigned
PRIORITY...: 60
WORKED HOURS...: 2
ESTIMATE...: 48 (hours remain)
ORIG. ESTIMATE.: 48

PROGRESS NOTES:

-=-=(Alexi - Sun, 08 Nov 2009, 15:18)=-=-
Low Level Design modified.
--- /tmp/wklog.40.old.15787 2009-11-08 15:18:11.0 +0200
+++ /tmp/wklog.40.new.15787 2009-11-08 15:18:11.0 +0200
@@ -62,7 +62,7 @@
it considers the query to extent to the end of the event.
 2. For 'db' (current db) the trailing zero is redundant since the length
is already known.
-3. db_len = 0 means that this is the current db.
+3. In tables_info, db_len = 0 means that this is the current db.
 
 When reading Query events from binary log, we can recognize its format
 by its post-header length: in extended case the post-header includes 4
@@ -75,6 +75,77 @@
 + #define Q_QUERY_LEN_OFFSET  Q_STATUS_VARS_LEN_OFFSET + 2
 + #define Q_QUERY_TABLES_INFO_LEN_OFFSET  Q_QUERY_LEN_OFFSET + 2
 
+
+***
+HELP NEEDED
+***
+The QUERY_HEADER_LEN is used in the definition of MAX_LOG_EVENT_HEADER:
+
+log_event.h
+~~~
+#define MAX_LOG_EVENT_HEADER   ( /* in order of Query_log_event::write */ \
+  LOG_EVENT_HEADER_LEN + /* write_header */ \
+  QUERY_HEADER_LEN  + /* write_data */   \
+  EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN + /*write_post_header_for_derived */ \
+  MAX_SIZE_LOG_EVENT_STATUS + /* status */ \
+  NAME_LEN + 1)
+
+which is used only for setting
+
+  thd-variables.max_allowed_packet
+  mysql-net.max_packet_size
+
+Looks like (but I am not quite sure) that QUERY_HEADER_LEN can simply
+(without making any other changes) be substituted in this definition by
+QUERY_HEADER_LEN_EXT.
+
+Below I list all places where MAX_LOG_EVENT_HEADER is used:
+
+slave.cc
+
+static int init_slave_thread(...)
+{ ...
+  /*
+Adding MAX_LOG_EVENT_HEADER_LEN to the max_allowed_packet on all
+slave threads, since a replication event can become this much larger
+than the corresponding packet (query) sent from client to master.
+  */
+  thd-variables.max_allowed_packet= global_system_variables.max_allowed_packet
++ MAX_LOG_EVENT_HEADER;  /* note, incr over the global not session var */
+  ...
+}
+pthread_handler_t handle_slave_io(...)
+{ ...
+  /*
+Adding MAX_LOG_EVENT_HEADER_LEN to the max_packet_size on the I/O
+thread, since a replication event can become this much larger than
+the corresponding packet (query) sent from client to master.
+  */
+  mysql-net.max_packet_size= thd-net.max_packet_size+= MAX_LOG_EVENT_HEADER;
+  ...
+}
+
+sql_repl.cc
+~~~
+void mysql_binlog_send(...)
+{ ...
+  /*
+Adding MAX_LOG_EVENT_HEADER_LEN, since a binlog event can become
+this larger than the corresponding packet (query) sent 
+from client to master.
+  */
+  thd-variables.max_allowed_packet+= MAX_LOG_EVENT_HEADER;
+  ...
+}
+bool mysql_show_binlog_events(...)
+{ ...
+  /*
+to account binlog event header size
+  */
+  thd-variables.max_allowed_packet+= MAX_LOG_EVENT_HEADER;
+  ...
+}
+
 3. Changes in log events
 
 
@@ -84,7 +155,7 @@
 This setting is done in Format description event constructor which creates
 the event for writing to binary log:
 
-  if (binlog_with_tables_info)
+  if (opt_binlog_with_tables_info)
   post_header_len[QUERY_EVENT - 1] = QUERY_HEADER_LEN_EXT;
   else
   post_header_len[QUERY_EVENT - 1] = QUERY_HEADER_LEN;
@@ -99,12 +170,12 @@
 following manner:
 
   switch (binlog_ver) {
-  case 4: /* MySQL 5.0 and higher */
 + #ifndef MYSQL_CLIENT
+  case 4: /* MySQL 5.0 and higher */
 ...
-+ #else
-+   error
+break;
 + #endif
+
   case 1:
   case 3:
 ...
@@ -132,7 +203,7 @@
 
 [Creates the event for binlogging]
 
-In case of binlog_with_tables_info = TRUE, set additionally query_len,
+In case of opt_binlog_with_tables_info = TRUE, set additionally query_len,
 tables_info_len, and tables_info members (the constructor is to have
 an additional 'tables_info' argument).
 
@@ -140,7 +211,7 @@
 
 [Writes the event to binlog]
 
-In case of binlog_with_tables_info = TRUE, write additional members
+In case of opt_binlog_with_tables_info = TRUE, write additional members
 (query_len, tables_info_len, and tables_info) to binary log. Also
 write corresponding whole event length to the common-header.
 

-=-=(Alexi - Sun, 08 Nov 2009, 

[Maria-developers] storage engine typecode problem?

2009-11-08 Thread Arjen Lentz

Hi Kristian

Getting this in MariaDB 5.1.39 builds:
  091109  4:41:43 [Warning] Storage engine 'FEDERATED' has  
conflicting typecode. Assigning value 42.



First thought it was caused by something I was doing with OQGRAPH, but  
the above doesn't have graph.



Cheers,
Arjen.
--
Arjen Lentz, Exec.Director @ Open Query (http://openquery.com)
Exceptional Services for MySQL at a fixed budget.

Follow our blog at http://openquery.com/blog/
OurDelta: packages for MySQL and MariaDB @ http://ourdelta.org










___
Mailing list: https://launchpad.net/~maria-developers
Post to : maria-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~maria-developers
More help   : https://help.launchpad.net/ListHelp