diff options
author | unknown <guilhem@mysql.com> | 2004-01-30 00:05:34 +0100 |
---|---|---|
committer | unknown <guilhem@mysql.com> | 2004-01-30 00:05:34 +0100 |
commit | bbd2adf4ba6ec2086a5e8eeaa89f56f1abee02f6 (patch) | |
tree | 86a549cfea46d66ac122b39922323a8bd8a9e317 /sql/handler.h | |
parent | 8746a25554d18f03fc32ca5d338850f9308bee88 (diff) | |
download | mariadb-git-bbd2adf4ba6ec2086a5e8eeaa89f56f1abee02f6.tar.gz |
Fix for BUG#2477 "Slave stop with error after master reboot if use HEAP tables":
when we open the HEAP table for the first time since server restart,
in hp_open(), we set a flag to propagate this info to the handler level
which then writes a DELETE FROM this_heap_table to the binlog.
It is not a perfect solution for the bug, because between the server start and
the first open of the table, the slave still had old data in his table so
a SELECT on the slave may show wrong content. But if there is a --init-file
to populate the HEAP table on master as startup, then this is a safe fix
(I'll put a note about init-file in the HEAP section of the manual).
heap/hp_info.c:
new info variable implicit_emptied
heap/hp_open.c:
If this is the first open of the HEAP table, it means it is empty,
so we mark it.
include/heap.h:
new variables implicit_emptied
(we need one in HEAPINFO for the hp_info() call).
sql/ha_heap.cc:
report info to upper level
sql/handler.h:
new info 'implicit_emptied' in the handler level; only HEAP uses it.
sql/sql_base.cc:
When a HEAP table is opened for the first time, write a DELETE FROM to the binlog,
for replication and mysqlbinlog|mysql.
Monty: I added the
entry->file->implicit_emptied= 0;
Diffstat (limited to 'sql/handler.h')
-rw-r--r-- | sql/handler.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sql/handler.h b/sql/handler.h index 8e72267c337..60edf539e2c 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -213,6 +213,7 @@ public: uint raid_type,raid_chunks; FT_INFO *ft_handler; bool auto_increment_column_changed; + bool implicit_emptied; /* Can be !=0 only if HEAP */ handler(TABLE *table_arg) :table(table_arg), ref(0), data_file_length(0), max_data_file_length(0), index_file_length(0), @@ -221,7 +222,7 @@ public: create_time(0), check_time(0), update_time(0), key_used_on_scan(MAX_KEY), active_index(MAX_REF_PARTS), ref_length(sizeof(my_off_t)), block_size(0), - raid_type(0), ft_handler(0) + raid_type(0), ft_handler(0), implicit_emptied(0) {} virtual ~handler(void) {} int ha_open(const char *name, int mode, int test_if_locked); |