Commit afdfc6ac authored by Sergey Vojtovich's avatar Sergey Vojtovich

Merge.

parents f6064041 e1c4021b
...@@ -2414,6 +2414,30 @@ CARDINALITY ...@@ -2414,6 +2414,30 @@ CARDINALITY
DROP TABLE t1; DROP TABLE t1;
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
SET myisam_repair_threads=@@global.myisam_repair_threads; SET myisam_repair_threads=@@global.myisam_repair_threads;
#
# BUG#11757032 - 49030: OPTIMIZE TABLE BREAKS MYISAM TABLE WHEN
# USING MYISAM_USE_MMAP ON WINDOWS
#
SET GLOBAL myisam_use_mmap=1;
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES(1),(2);
DELETE FROM t1 WHERE a=1;
FLUSH TABLE t1;
LOCK TABLE t1 WRITE;
OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize status OK
INSERT INTO t1 VALUES(3);
UNLOCK TABLES;
SELECT * FROM t1;
a
2
3
CHECK TABLE t1;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
SET GLOBAL myisam_use_mmap=default;
End of 5.1 tests End of 5.1 tests
# #
# Bug#51327 MyISAM table is automatically repaired on ALTER # Bug#51327 MyISAM table is automatically repaired on ALTER
......
...@@ -1647,6 +1647,24 @@ DROP TABLE t1; ...@@ -1647,6 +1647,24 @@ DROP TABLE t1;
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
SET myisam_repair_threads=@@global.myisam_repair_threads; SET myisam_repair_threads=@@global.myisam_repair_threads;
--echo #
--echo # BUG#11757032 - 49030: OPTIMIZE TABLE BREAKS MYISAM TABLE WHEN
--echo # USING MYISAM_USE_MMAP ON WINDOWS
--echo #
SET GLOBAL myisam_use_mmap=1;
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES(1),(2);
DELETE FROM t1 WHERE a=1;
FLUSH TABLE t1;
LOCK TABLE t1 WRITE;
OPTIMIZE TABLE t1;
INSERT INTO t1 VALUES(3);
UNLOCK TABLES;
SELECT * FROM t1;
CHECK TABLE t1;
DROP TABLE t1;
SET GLOBAL myisam_use_mmap=default;
--echo End of 5.1 tests --echo End of 5.1 tests
......
...@@ -1026,6 +1026,18 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool do_optimize) ...@@ -1026,6 +1026,18 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool do_optimize)
mi_get_mask_all_keys_active(share->base.keys) : mi_get_mask_all_keys_active(share->base.keys) :
share->state.key_map); share->state.key_map);
uint testflag=param.testflag; uint testflag=param.testflag;
#ifdef HAVE_MMAP
bool remap= test(share->file_map);
/*
mi_repair*() functions family use file I/O even if memory
mapping is available.
Since mixing mmap I/O and file I/O may cause various artifacts,
memory mapping must be disabled.
*/
if (remap)
mi_munmap_file(file);
#endif
if (mi_test_if_sort_rep(file,file->state->records,key_map,0) && if (mi_test_if_sort_rep(file,file->state->records,key_map,0) &&
(local_testflag & T_REP_BY_SORT)) (local_testflag & T_REP_BY_SORT))
{ {
...@@ -1057,6 +1069,10 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool do_optimize) ...@@ -1057,6 +1069,10 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool do_optimize)
error= mi_repair(&param, file, fixed_name, error= mi_repair(&param, file, fixed_name,
param.testflag & T_QUICK); param.testflag & T_QUICK);
} }
#ifdef HAVE_MMAP
if (remap)
mi_dynmap_file(file, file->state->data_file_length);
#endif
param.testflag=testflag; param.testflag=testflag;
optimize_done=1; optimize_done=1;
} }
......
...@@ -61,11 +61,6 @@ int mi_delete_all_rows(MI_INFO *info) ...@@ -61,11 +61,6 @@ int mi_delete_all_rows(MI_INFO *info)
mysql_file_chsize(share->kfile, share->base.keystart, 0, MYF(MY_WME))) mysql_file_chsize(share->kfile, share->base.keystart, 0, MYF(MY_WME)))
goto err; goto err;
(void) _mi_writeinfo(info,WRITEINFO_UPDATE_KEYFILE); (void) _mi_writeinfo(info,WRITEINFO_UPDATE_KEYFILE);
#ifdef HAVE_MMAP
/* Map again */
if (share->file_map)
mi_dynmap_file(info, (my_off_t) 0);
#endif
DBUG_RETURN(0); DBUG_RETURN(0);
err: err:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment