BUG#19459 (BINLOG RBR command does not lock tables correctly causing
crash for, e.g., NDB): Before, mysqlbinlog printed table map events as a separate statement, so when executing the event, the opened table was subsequently closed when the statement ended. Instead, the row-based events that make up a statement are now printed as *one* BINLOG statement, which means that the table maps and the following *_rows_log_event events are executed fully before the statement ends. Changing implementation of BINLOG statement to be able to read the emitted format, which now consists of several chunks of BASE64-encoded data. client/mysqlbinlog.cc: Using IO_CACHE to print events instead of directly to file. Factoring out code to write event header and base64 representation into separate function. mysys/mf_iocache2.c: Correcting name in documentation. sql/log_event.cc: Adding class Write_on_release_cache that holds an IO_CACHE and that will write contents of IO_CACHE to a designated file on destruction. Changing signature of event printing functions print_header() and print_base64() to write to IO_CACHE and changing *all* calls in those functions in accordance. This means that all printing functions now print to an IO_CACHE instead of to a file, and that the IO_CACHE is then copied to the file. The print() function have the same signature as before, but since it is using print_header() and print_base64(), the data will now be printed to an IO_CACHE and then copied to the file. Changing row-based replication events to incrementally build one BINLOG statement for all events making up a statement. sql/log_event.h: Changing signature of event printing functions print_header() and print_base64() to write to an IO_CACHE instead of a file. Changing row-based replication events to incrementally build one BINLOG statement for all events making up a statement. Adding a head_cache and a body_cache to cache statement comment and statement body respectively. In addition, the head_cache is used when printing other events than the RBR events. sql/sql_binlog.cc: Changing code to be able to decode several pieces of base64-encoded data for a BINLOG statement. The BINLOG statement now consists of several pieces of BASE64-encoded data, so once a block has been decoded and executed, the next block has to be read from the statement until there is no more data to read.
Showing
This diff is collapsed.
Please register or sign in to comment