3586 Sergey Vojtovich 2011-10-21 [merge]
Merge.
modified:
mysql-test/r/myisam.result
mysql-test/t/myisam.test
storage/myisam/ha_myisam.cc
storage/myisam/mi_delete_all.c
3585 Marko Mäkelä 2011-10-21 [merge]
Merge mysql-5.1 to mysql-5.5.
modified:
storage/innobase/btr/btr0cur.c
=== modified file 'mysql-test/r/myisam.result'
--- a/mysql-test/r/myisam.result 2010-04-27 09:58:21 +0000
+++ b/mysql-test/r/myisam.result 2011-10-21 05:35:07 +0000
@@ -2414,6 +2414,30 @@ CARDINALITY
DROP TABLE t1;
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
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
#
# Bug#51327 MyISAM table is automatically repaired on ALTER
=== modified file 'mysql-test/t/myisam.test'
--- a/mysql-test/t/myisam.test 2010-04-20 08:51:50 +0000
+++ b/mysql-test/t/myisam.test 2011-10-21 05:35:07 +0000
@@ -1647,6 +1647,24 @@ DROP TABLE t1;
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
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
=== modified file 'storage/myisam/ha_myisam.cc'
--- a/storage/myisam/ha_myisam.cc 2011-08-15 18:12:11 +0000
+++ b/storage/myisam/ha_myisam.cc 2011-10-21 05:35:07 +0000
@@ -1026,6 +1026,18 @@ int ha_myisam::repair(THD *thd, MI_CHECK
mi_get_mask_all_keys_active(share->base.keys) :
share->state.key_map);
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) &&
(local_testflag & T_REP_BY_SORT))
{
@@ -1057,6 +1069,10 @@ int ha_myisam::repair(THD *thd, MI_CHECK
error= mi_repair(¶m, file, fixed_name,
param.testflag & T_QUICK);
}
+#ifdef HAVE_MMAP
+ if (remap)
+ mi_dynmap_file(file, file->state->data_file_length);
+#endif
param.testflag=testflag;
optimize_done=1;
}
=== modified file 'storage/myisam/mi_delete_all.c'
--- a/storage/myisam/mi_delete_all.c 2011-06-30 15:46:53 +0000
+++ b/storage/myisam/mi_delete_all.c 2011-10-21 05:35:07 +0000
@@ -61,11 +61,6 @@ int mi_delete_all_rows(MI_INFO *info)
mysql_file_chsize(share->kfile, share->base.keystart, 0, MYF(MY_WME)))
goto err;
(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);
err:
No bundle (reason: useless for push emails).| Thread |
|---|
| • bzr push into mysql-5.5 branch (sergey.vojtovich:3585 to 3586) | Sergey Vojtovich | 21 Oct |