summaryrefslogtreecommitdiff
path: root/storage
Commit message (Collapse)AuthorAgeFilesLines
* Merge mysql-5.1 to mysql-5.5.Marko Mäkelä2012-10-163-6/+35
|\
| * Bug#14729221 IN-PLACE ALTER TABLE REPORTS '' INSTEAD OFMarko Mäkelä2012-10-164-7/+42
| | | | | | | | | | | | REAL DUPLICATE VALUE FOR PREFIX KEYS innobase_rec_to_mysql(): Invoke dict_index_get_nth_col_or_prefix_pos() instead of dict_index_get_nth_col_pos() to find the column.
| * bug#14704286Krunal Bauskar krunal.bauskar@oracle.com2012-10-152-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SECONDARY INDEX UPDATES MAKE CONSISTENT READS DO O(N^2) UNDO PAGE LOOKUPS (honoring kill query while accessing sec_index) If secondary index is being used for select query evaluation and this query is operating with consistent read snapshot it might take good time for secondary index to return back control to mysql as MVCC would kick in. If user issues "kill query <id>" while query is actively accessing secondary index it will not be honored as there is no hook to check for this condition. Added hook for this check. ----- Parallely secondary index taking too long to evaluate for consistent read snapshot case is being examined for performance improvement. WL#6540.
| * Fix compilation error in debug mode:Vasil Dimov2012-10-102-28/+26
| | | | | | | | os/os0file.c:1332: error: ISO C90 forbids mixed declarations and code
* | bug#14704286Krunal Bauskar krunal.bauskar@oracle.com2012-10-151-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SECONDARY INDEX UPDATES MAKE CONSISTENT READS DO O(N^2) UNDO PAGE LOOKUPS (honoring kill query while accessing sec_index) If secondary index is being used for select query evaluation and this query is operating with consistent read snapshot it might take good time for secondary index to return back control to mysql as MVCC would kick in. If user issues "kill query <id>" while query is actively accessing secondary index it will not be honored as there is no hook to check for this condition. Added hook for this check. ----- Parallely secondary index taking too long to evaluate for consistent read snapshot case is being examined for performance improvement. WL#6540.
* | Merge mysql-5.1 -> mysql-5.5Vasil Dimov2012-10-092-1/+17
|\ \ | |/
| * Port the test for Bug#14708715 from 5.1/innodb_plugin into 5.1/innodbVasil Dimov2012-10-091-0/+16
| | | | | | | | although the bug does not exist in 5.1/innodb.
| * Update the ChangeLog with the fix of Bug#14708715Vasil Dimov2012-10-091-0/+5
| |
| * Fix Bug#14708715 CREATE TABLE MEMORY LEAK ON DB_OUT_OF_FILE_SPACEVasil Dimov2012-10-092-1/+20
| | | | | | | | | | | | | | | | The problem is in the error handling in row_create_table_for_mysql(). In the 'disk full' case we may forget to call dict_mem_table_free() on the table object. Approved by: Marko (rb:1377 and rb:1386)
* | Bug #14036214 MYSQLD CRASHES WHEN EXECUTING UPDATE IN TRX WITHAnnamalai Gurusami2012-10-081-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CONSISTENT SNAPSHOT OPTION A transaction is started with a consistent snapshot. After the transaction is started new indexes are added to the table. Now when we issue an update statement, the optimizer chooses an index. When the index scan is being initialized via ha_innobase::change_active_index(), InnoDB reports the error code HA_ERR_TABLE_DEF_CHANGED, with message stating that "insufficient history for index". This error message is propagated up to the SQL layer. But the my_error() api is never called. The statement level diagnostics area is not updated with the correct error status (it remains in Diagnostics_area::DA_EMPTY). Hence the following check in the Protocol::end_statement() fails. 516 case Diagnostics_area::DA_EMPTY: 517 default: 518 DBUG_ASSERT(0); 519 error= send_ok(thd->server_status, 0, 0, 0, NULL); 520 break; The fix is to backport the fix of bugs 14365043, 11761652 and 11746399. 14365043 PROTOCOL::END_STATEMENT(): ASSERTION `0' FAILED 11761652 HA_RND_INIT() RESULT CODE NOT CHECKED 11746399 RETURN VALUES OF HA_INDEX_INIT() AND INDEX_INIT() IGNORED rb://1227 approved by guilhem and mattiasj.
* | Merge mysql-5.1 to mysql-5.5.Marko Mäkelä2012-10-083-4/+24
|\ \ | |/ | | Also, add debug check for trx_id sanity to row_upd_rec_sys_fields().
| * Bug#14731482 UPDATE OR DELETE CORRUPTS A RECORD WITH A LONG PRIMARY KEYMarko Mäkelä2012-10-084-8/+42
| | | | | | | | | | | | | | | | | | | | | | | | We did not allocate enough bits for index->trx_id_offset, causing an UPDATE or DELETE of a table with a PRIMARY KEY longer than 1024 bytes to corrupt the PRIMARY KEY. dict_index_t: Allocate enough bits. dict_index_build_internal_clust(): Check for overflow of index->trx_id_offset. Trip a debug assertion when overflow occurs. rb:1380 approved by Jimmy Yang
* | Merge from mysql-5.1 to mysql-5.5. Annamalai Gurusami2012-09-283-79/+0
|\ \ | |/
| * Bug #13249921 ASSERT !BPAGE->FILE_PAGE_WAS_FREED, USUALLY IN Annamalai Gurusami2012-09-287-159/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | TRANSACTION ROLLBACK Description: During the rollback operation, a blob page is removed earlier than desired. Consider following scenario: 1. create table t1(a int primary key,b blob) engine=innodb; 2. insert into t1 values (1,repeat('b',9000)); 3. begin; 4. update t1 set b=concat(b,'b'); 5. update t1 set a=a+1; 6. insert into t1 values (1,repeat('b',9000)); 7. rollback; The update operation in line 5 produces 2 undo log record. The first undo record (TRX_UNDO_DEL_MARK_REC) goes to trx->update_undo and the second undo record (TRX_UNDO_INSERT_REC) goes to trx->insert_undo. During rollback, they are executed out of order. When the undo record TRX_UNDO_DEL_MARK_REC is applied/executed, the blob ownership is also reset. Because of this the blob page is released earlier than desired. This blob page must have been freed only as part of applying/executing the undo record TRX_UNDO_INSERT_REC. This problem can be avoided by executing the undo records in order. This patch will make innodb to execute the undo records in order. rb://1125 approved by Marko.
* | Bug#14594600 ASSERT FROM DROP TABLE CONCURRENT WITH IBUF MERGESInaam Rana2012-09-201-24/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | rb://1293 approved by: Marko Makela There is race when dropping a single table tablespace where a reader thread can initiate a read request before the delete flag is set and before it is finished the deleting thread can attempt to free the fil_node. This patch checks the status in fil_io() to make sure that the tablespace is not being deleted. If it is being deleted then an error is returned instead of attempting IO.
* | Merge mysql-5.1 to mysql-5.5.Marko Mäkelä2012-09-194-6/+36
|\ \ | |/
| * Bug#14636528 INNODB CHANGE BUFFERING IS NOT ENTIRELY CRASH-SAFEMarko Mäkelä2012-09-199-31/+86
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Delete-mark change buffer records when resorting to a pessimistic delete from the change buffer B-tree. Skip delete-marked records in the change buffer merge and when estimating whether an operation can be buffered. Without this fix, we could try to apply the same buffered changes multiple times if the server was killed at the right moment. In MySQL 5.5 and later: ibuf_get_volume_buffered_count_func(): Ignore delete-marked (already processed) records. ibuf_delete_rec(): Add a crash point before optimistic delete. If the optimistic delete fails, flag the record processed before mtr_commit(). ibuf_merge_or_delete_for_page(): Ignore delete-marked (already processed) records. Backport to 5.1: Rename btr_cur_del_unmark_for_ibuf() to btr_cur_set_deleted_flag_for_ibuf() and add a parameter. rb:1307 approved by Jimmy Yang
* | Merge mysql-5.1 to mysql-5.5.Marko Mäkelä2012-09-179-90/+164
|\ \ | |/
| * Bug#12701488 ASSERT PAGE_ZIP_VALIDATE, UNIV_ZIP_DEBUGMarko Mäkelä2012-09-179-88/+170
| | | | | | | | | | | | | | | | | | | | | | | | page_zip_validate(), page_zip_validate_low(): Add a parameter for the B-tree index. page_zip_validate_low(): If the page contents does not match, check that the record link chains match. Furthermore, if dict_index_t is passed, check that the records match. (This reduces coverage a bit: if index=NULL, we will ignore differences in record contents, that is, the page payload.) rb:1264 approved by Inaam Rana
* | Bug #14500557 CRASH WHEN USING LONG INNODB INDEXESAnnamalai Gurusami2012-09-042-4/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The ha_innobase table handler contained two search key buffers (srch_key_val1, srch_key_val2) of fixed size used to store the search key. The size of these buffers where fixed at REC_VERSION_56_MAX_INDEX_COL_LEN + 2. But this size is not sufficient to hold the search key. Hence the following assert in row_sel_convert_mysql_key_to_innobase() failed. 2438 /* Storing may use at most data_len bytes of buf */ 2439 2440 if (UNIV_LIKELY(!is_null)) { 2441 ut_a(buf + data_len <= original_buf + buf_len); 2442 row_mysql_store_col_in_innobase_format( 2443 dfield, buf, 2444 FALSE, /* MySQL key value format col */ 2445 key_ptr + data_offset, data_len, 2446 dict_table_is_comp(index->table)); 2447 buf += data_len; 2448 } The buffer size is now calculated with the formula MAX_KEY_LENGTH + MAX_REF_PARTS*2. This properly takes into account the extra bytes needed to store the length for each column. An index can contain a maximum of MAX_REF_PARTS columns in it, and for each column 2 bytes are needed to store length. rb://1238 approved by Marko and Vasil Dimov.
* | Merge from mysql-5.1 to mysql-5.5. Annamalai Gurusami2012-09-012-4/+34
|\ \ | |/
| * Bug #13453036 ERROR CODE 1118: ROW SIZE TOO LARGE - EVEN Annamalai Gurusami2012-08-312-4/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | THOUGH IT IS NOT. The following error message is misleading because it claims that the BLOB space is not counted. "ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs" When the ROW_FORMAT=compact or ROW_FORMAT=REDUNDANT is used, the BLOB prefix is stored inline along with the row. So the above error message is changed as follows depending on the row format used: For ROW_FORMAT=COMPRESSED or ROW_FORMAT=DYNAMIC, the error message is as follows: "ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline." For ROW_FORMAT=COMPACT or ROW_FORMAT=REDUNDANT, the error message is as follows: "ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline." rb://1252 approved by Marko Makela
* | Merge mysql-5.1 to mysql-5.5.Marko Mäkelä2012-08-303-2/+35
|\ \ | |/
| * Bug#14554000 CRASH IN PAGE_REC_GET_NTH_CONST(NTH=0) DURING COMPRESSEDMarko Mäkelä2012-08-304-2/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PAGE SPLIT page_rec_get_nth_const(): Map nth==0 to the page infimum. btr_compress(adjust=TRUE): Add a debug assertion for nth>0. The cursor should never be positioned on the page infimum. btr_index_page_validate(): Add test instrumentation for checking the return values of page_rec_get_nth_const() during CHECK TABLE, and for checking that the page directory slot 0 always contains only one record, the predefined page infimum record. page_cur_delete_rec(), page_delete_rec_list_end(): Add debug assertions guarding against accessing the page slot 0. page_copy_rec_list_start(): Clarify a comment about ret_pos==0. rb:1248 approved by Jimmy Yang
| * Bug#14547952: DEBUG BUILD FAILS ASSERTION IN RECORDS_IN_RANGE()Marko Mäkelä2012-08-301-1/+0
| | | | | | | | | | | | | | ha_innodb::records_in_range(): Remove a debug assertion that prohibits an open range (full table). The patch by Jorgen Loland only removed the assertion from the built-in InnoDB, not from the InnoDB Plugin.
| * Bug#14547952: DEBUG BUILD FAILS ASSERTION IN RECORDS_IN_RANGE()Jorgen Loland2012-08-281-1/+0
| | | | | | | | | | | | ha_innobase::records_in_range(): Remove a debug assertion that prohibits an open range (full table). This assertion catches unnecessary calls to this method, but such calls are not harming correctness.
* | Bug#14145950 AUTO_INCREMENT ON DOUBLE WILL FAIL ON WINDOWSAditya A2012-08-271-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Backport from mysql-5.6 the fix (revision-id sunny.bains@oracle.com-20120315045831-20rgfa4cozxmz7kz) Bug#13839886 - CRASH IN INNOBASE_NEXT_AUTOINC The assertion introduce in the fix for Bug#13817703 is too strong, a negative number can be greater than the column max value, when the column value is a negative number. rb://978 Approved by Jimmy Yang. rb:1236 approved by Marko Makela
* | Bug#13417440 : 63340: ARCHIVE FILE IO NOT INSTRUMENTEDMarc Alff2012-08-241-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | WARNING This patch is for mysql-5.5 only, to be null-merged to mysql-5.6 and mysql-trunk. This is a partial rollback of the file io instrumentation, removing the instrumentation for mysql_file_stat in the archive engine. See the bug comments for details.
* | Merge mysql-5.1 to mysql-5.5.Marko Mäkelä2012-08-212-6/+20
|\ \ | |/
| * Fix regression from Bug#12845774 OPTIMISTIC INSERT/UPDATE USES WRONGMarko Mäkelä2012-08-212-6/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | HEURISTICS FOR COMPRESSED PAGE SIZE The fix of Bug#12845774 was supposed to skip known-to-fail btr_cur_optimistic_insert() calls. There was only one such call, in btr_cur_pessimistic_update(). All other callers of btr_cur_pessimistic_insert() would release and reacquire the B-tree page latch before attempting the pessimistic insert. This would allow other threads to restructure the B-tree, allowing (and requiring) the insert to succeed as an optimistic (single-page) operation. Failure to attempt an optimistic insert before a pessimistic one would trigger an attempt to split an empty page. rb:1234 approved by Sunny Bains
* | Merge mysql-5.1 to mysql-5.5.Marko Mäkelä2012-08-163-33/+48
|\ \ | |/
| * Bug#12595091 POSSIBLY INVALID ASSERTION IN BTR_CUR_PESSIMISTIC_UPDATE()Marko Mäkelä2012-08-162-1/+12
| | | | | | | | | | | | | | | | | | Facebook got a case where the page compresses really well so that btr_cur_optimistic_update() returns DB_UNDERFLOW, but when a record gets updated, the compression rate radically changes so that btr_cur_insert_if_possible() can not insert in place despite reorganizing/recompressing the page, leading to the assertion failing. rb:1220 approved by Sunny Bains
| * Bug#12845774 OPTIMISTIC INSERT/UPDATE USES WRONG HEURISTICS FORMarko Mäkelä2012-08-163-20/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | COMPRESSED PAGE SIZE This was submitted as MySQL Bug 61456 and a patch provided by Facebook. This patch follows the same idea, but instead of adding a parameter to btr_cur_pessimistic_insert(), we simply remove the btr_cur_optimistic_insert() call there and add it to the only caller that needs it. btr_cur_pessimistic_insert(): Do not try btr_cur_optimistic_insert(). btr_insert_on_non_leaf_level_func(): Invoke btr_cur_optimistic_insert() before invoking btr_cur_pessimistic_insert(). btr_cur_pessimistic_update(): Clarify in a comment why it is not necessary to invoke btr_cur_optimistic_insert(). btr_root_raise_and_insert(): Assert that the root page is not empty. This could happen if a pessimistic insert (involving a split or merge) is performed without first attempting an optimistic (intra-page) insert. rb:1219 approved by Sunny Bains
| * Bug#13523839 ASSERTION FAILURES ON COMPRESSED INNODB TABLESMarko Mäkelä2012-08-163-13/+28
| | | | | | | | | | | | | | | | | | | | | | | | btr_cur_optimistic_insert(): Remove a bogus assertion. The insert may fail after reorganizing the page. btr_cur_optimistic_update(): Do not attempt to reorganize compressed pages, because compression may fail after reorganization. page_copy_rec_list_start(): Use page_rec_get_nth() to restore to the ret_pos, which may also be the page infimum. rb:1221
* | Merge mysql-5.1 to mysql-5.5.Marko Mäkelä2012-08-092-36/+45
|\ \ | |/
| * Bug#14399148 INNODB TABLES UNDER LOAD PRODUCE DUPLICATE COPIES OF ROWSMarko Mäkelä2012-08-094-73/+83
| | | | | | | | | | | | | | | | | | | | | | IN QUERIES This bug was caused by an incorrect fix of Bug#13807811 BTR_PCUR_RESTORE_POSITION() CAN SKIP A RECORD There was nothing wrong with btr_pcur_restore_position(), but with the use of it in the table scan during index creation. rb:1206 approved by Jimmy Yang
* | Bug #12876932 - INCORRECT SELECT RESULT ON FEDERATED TABLEVenkata Sidagam2012-07-261-1/+1
|\ \ | |/ | | Merged from mysql-5.1 to mysql-5.5
| * Bug #12876932 - INCORRECT SELECT RESULT ON FEDERATED TABLEVenkata Sidagam2012-07-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem description: Table 't' created with two colums having compound index on both the columns under innodb/myisam engine at remote machine. In the local machine same table is created undet the federated engine. A select having where clause with along 'AND' operation gives wrong results on local machine. Analysis: The given query at federated engine is wrongly transformed by federated::create_where_from_key() function and the same was sent to the remote machine. Hence the local machine is showing wrong results. Given query "select c1 from t where c1 <= 2 and c2 = 1;" Query transformed, after ha_federated::create_where_from_key() function is: SELECT `c1`, `c2` FROM `t` WHERE (`c1` IS NOT NULL ) AND ( (`c1` >= 2) AND (`c2` <= 1) ) and the same sent to real_query(). In the above the '<=' and '=' conditions were transformed to '>=' and '<=' respectively. ha_federated::create_where_from_key() function behaving as below: The key_range is having both the start_key and end_key. The start_key is used to get "(`c1` IS NOT NULL )" part of the where clause, this transformation is correct. The end_key is used to get "( (`c1` >= 2) AND (`c2` <= 1) )", which is wrong, here the given conditions('<=' and '=') are changed as wrong conditions('>=' and '<='). The end_key is having {key = 0x39fa6d0 "", length = 10, keypart_map = 3, flag = HA_READ_AFTER_KEY} The store_length is having value '5'. Based on store_length and length values the condition values is applied in HA_READ_AFTER_KEY switch case. The switch case 'HA_READ_AFTER_KEY' is applicable to only the last part of the end_key and for previous parts it is going to 'HA_READ_KEY_OR_NEXT' case, here the '>=' is getting added as a condition instead of '<='. Fix: Updated the 'if' condition in 'HA_READ_AFTER_KEY' case to affect for all parts of the end_key. i.e 'i > 0' will used for end_key, Hence added it in the if condition.
| * Bug #13113026 INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRUFROM 5.6 BACKPORTAnnamalai Gurusami2012-07-2510-10/+2030
| | | | | | | | | | | | | | | | Backporting the WL#5716, "Information schema table for InnoDB buffer pool information". Backporting revisions 2876.244.113, 2876.244.102 from mysql-trunk. rb://1175 approved by Jimmy Yang.
* | Bug #13113026 INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRUFROM 5.6 BACKPORTAnnamalai Gurusami2012-07-258-12/+1924
| | | | | | | | | | | | | | | | Backporting the WL#5716, "Information schema table for InnoDB buffer pool information". Backporting revisions 2876.244.113, 2876.244.102 from mysql-trunk. rb://1177 approved by Jimmy Yang.
* | BUG#13555854: CHECK AND REPAIR TABLE SHOULD BE MORE ROBUST [1]Ashish Agarwal2012-07-231-1/+2
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ISSUE: Incorrect key file. Key file is corrupted, Reading incorrect key information (keyseg) from index file. Key definition in .MYI and .FRM file differs. Starting pointer to read the keyseg information is changed to a value greater than the pack_reclength. Memcpy tries to read keyseg information from unallocated memory which causes the crash. SOLUTION: One more check added to compare the the key definition in .MYI and .FRM file. If the definition differ, server produces an error.
| * | BUG#13555854: CHECK AND REPAIR TABLE SHOULD BE MORE ROBUST [1]Ashish Agarwal2012-07-021-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ISSUE: Incorrect key file. Key file is corrupted, Reading incorrect key information (keyseg) from index file. Key definition in .MYI and .FRM file differs. Starting pointer to read the keyseg information is changed to a value greater than the pack_reclength. Memcpy tries to read keyseg information from unallocated memory which causes the crash. SOLUTION: One more check added to compare the the key definition in .MYI and .FRM file. If the definition differ, server produces an error.
* | | Bug#12623923 Server can crash after failure to createJon Olav Hauglid2012-07-102-11/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | primary key with innodb tables The bug was triggered if a single ALTER TABLE statement both added and dropped indexes and ALTER TABLE failed during drop (e.g. because the index was needed in a foreign key constraint). In such cases, the server index information would get out of sync with InnoDB - the added index would be present inside InnoDB, but not in the server. This could then lead to InnoDB error messages and/or server crashes. The root cause is that new indexes are added before old indexes are dropped. This means that if ALTER TABLE fails while dropping indexes, index changes will be reverted in the server but not inside InnoDB. This patch fixes the problem by dropping any added indexes if drop fails (for ALTER TABLE statements that both adds and drops indexes). However, this won't work if we added a primary key as this key might not be possible to drop inside InnoDB. Therefore, we resort to the copy algorithm if a primary key is added by an ALTER TABLE statement that also drops an index. In 5.6 this bug is more properly fixed by the handler interface changes done in the scope of WL#5534 "Online ALTER".
* | | Bug#14238406 NEW COMPILATION WARNINGS WITH GCC 4.7 (-WERROR=NARROWING)Jon Olav Hauglid2012-06-291-6/+6
|\ \ \ | | |/ | |/| Manual merge from mysql-5.1 to mysql-5.5
| * | Bug#14238406 NEW COMPILATION WARNINGS WITH GCC 4.7 (-WERROR=NARROWING)Jon Olav Hauglid2012-06-292-10/+10
| | | | | | | | | | | | | | | This patch fixes various compilation warnings of the type "error: narrowing conversion of 'x' from 'datatype1' to 'datatype2'
| * | Bug #13933132: [ERROR] GOT ERROR -1 WHEN READING TABLE APPEAREDAnnamalai Gurusami2012-06-011-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | WHEN KILLING Suppose there is a query waiting for a lock. If the user kills this query, then "Got error -1 when reading table" error message must not be logged in the server log file. Since this is a user requested interruption, no spurious error message must be logged in the server log. This patch will remove the error message from the log. approved by joh and tatjana
* | | Bug#14251529 : FIX FOR BUG 13704145 CREATES POSSIBLE RACE CONDITIONYasufumi Kinoshita2012-06-294-6/+70
| |/ |/| | | | | | | make buf_read_page_low() to treat DB_TABLESPACE_DELETED error correctly rb#1129 approved by Inaam
* | WL#6161 Integrating with InnoDB codebase in MySQL 5.5Narayanan Venkateswaran2012-06-0722-38/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Changes in the InnoDB codebase required to compile and integrate the MEB codebase with MySQL 5.5. @ storage/innobase/btr/btr0btr.c Excluded buffer pool usage from MEB build. buf_pool_from_bpage calls are in buf0buf.ic, and the buffer pool functions from that file are disabled in MEB. @ storage/innobase/buf/buf0buf.c Disabling more buffer pool functions unused in MEB. @ storage/innobase/dict/dict0dict.c Disabling dict_ind_free that is unused in MEB. @ storage/innobase/dict/dict0mem.c The include #include "ha_prototypes.h" Was causing conflicts with definitions in my_global.h Linking C executable mysqlbackup libinnodb.a(dict0mem.c.o): In function `dict_mem_foreign_table_name_lookup_set': dict0mem.c:(.text+0x91c): undefined reference to `innobase_get_lower_case_table_names' libinnodb.a(dict0mem.c.o): In function `dict_mem_referenced_table_name_lookup_set': dict0mem.c:(.text+0x9fc): undefined reference to `innobase_get_lower_case_table_names' libinnodb.a(dict0mem.c.o): In function `dict_mem_foreign_table_name_lookup_set': dict0mem.c:(.text+0x96e): undefined reference to `innobase_casedn_str' libinnodb.a(dict0mem.c.o): In function `dict_mem_referenced_table_name_lookup_set': dict0mem.c:(.text+0xa4e): undefined reference to `innobase_casedn_str' collect2: ld returned 1 exit status make[2]: *** [mysqlbackup] Error 1 innobase_get_lower_case_table_names innobase_casedn_str are functions that are part of ha_innodb.cc that is not part of the build dict_mem_foreign_table_name_lookup_set function is not there in the current codebase, meaning we do not use it in MEB. @ storage/innobase/fil/fil0fil.c The srv_fast_shutdown variable is declared in srv0srv.c that is not compiled in the mysqlbackup codebase. This throws an undeclared error. From the Manual --------------- innodb_fast_shutdown -------------------- The InnoDB shutdown mode. The default value is 1 as of MySQL 3.23.50, which causes a “fast� shutdown (the normal type of shutdown). If the value is 0, InnoDB does a full purge and an insert buffer merge before a shutdown. These operations can take minutes, or even hours in extreme cases. If the value is 1, InnoDB skips these operations at shutdown. This ideally does not matter from mysqlbackup @ storage/innobase/ha/ha0ha.c In file included from /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/ha/ha0ha.c:34:0: /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/include/btr0sea.h:286:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token make[2]: *** [CMakeFiles/innodb.dir/home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/ha/ha0ha.c.o] Error 1 make[1]: *** [CMakeFiles/innodb.dir/all] Error 2 make: *** [all] Error 2 # include "sync0rw.h" is excluded from hotbackup compilation in dict0dict.h This causes extern rw_lock_t* btr_search_latch_temp; to throw a failure because the definition of rw_lock_t is not found. @ storage/innobase/include/buf0buf.h Excluding buffer pool functions that are unused from the MEB codebase. @ storage/innobase/include/buf0buf.ic replicated the exclusion of #include "buf0flu.h" #include "buf0lru.h" #include "buf0rea.h" by looking at the current codebase in <meb-trunk>/src/innodb @ storage/innobase/include/dict0dict.h dict_table_x_lock_indexes, dict_table_x_unlock_indexes, dict_table_is_corrupted, dict_index_is_corrupted, buf_block_buf_fix_inc_func are unused in MEB and was leading to compilation errors and hence excluded. @ storage/innobase/include/dict0dict.ic dict_table_x_lock_indexes, dict_table_x_unlock_indexes, dict_table_is_corrupted, dict_index_is_corrupted, buf_block_buf_fix_inc_func are unused in MEB and was leading to compilation errors and hence excluded. @ storage/innobase/include/log0log.h /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/include/log0log.h: At top level: /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/include/log0log.h:767:2: error: expected specifier-qualifier-list before â⠂¬Ëœmutex_t’ mutex_t definitions were excluded as seen from ambient code hence excluding definition for log_flush_order_mutex also. @ storage/innobase/include/os0file.h Bug in InnoDB code, create_mode should have been create. @ storage/innobase/include/srv0srv.h In file included from /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/buf/buf0buf.c:50:0: /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/include/srv0srv.h: At top level: /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/include/srv0srv.h:120:16: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘srv_use_native_aio’ srv_use_native_aio - we do not use native aio of the OS anyway from MEB. MEB does not compile InnoDB with this option. Hence disabling it. @ storage/innobase/include/trx0sys.h [ 56%] Building C object CMakeFiles/innodb.dir/home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/trx/trx0sys.c.o /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/trx/trx0sys.c: In function ‘trx_sys_read_file_format_id’: /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/trx/trx0sys.c:1499:20: error: ‘TRX_SYS_FILE_FORMAT_TAG_MAGIC_N’ undeclared (first use in this function) /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/trx/trx0sys.c:1499:20: note: each undeclared identifier is reported only once for each function it appears in /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/trx/trx0sys.c: At top level: /home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/include/buf0buf.h:607:1: warning: ‘buf_block_buf_fix_inc_func’ declared ‘static’ but never defined make[2]: *** [CMakeFiles/innodb.dir/home/narayanan/mysql-server/mysql-5.5-meb-rel3.8-innodb-integration-1/storage/innobase/trx/trx0sys.c.o] Error 1 unused calls excluded to enable compilation @ storage/innobase/mem/mem0dbg.c excluding #include "ha_prototypes.h" that lead to definitions in ha_innodb.cc @ storage/innobase/os/os0file.c InnoDB not compiled with aio support from MEB anyway. Hence excluding this from the compilation. @ storage/innobase/page/page0zip.c page0zip.c:(.text+0x4e9e): undefined reference to `buf_pool_from_block' collect2: ld returned 1 exit status buf_pool_from_block defined in buf0buf.ic, most of the file is excluded for compilation of MEB @ storage/innobase/ut/ut0dbg.c excluding #include "ha_prototypes.h" since it leads to definitions in ha_innodb.cc innobase_basename(file) is defined in ha_innodb.cc. Hence excluding that also. @ storage/innobase/ut/ut0ut.c cal_tm unused from MEB, was leading to earnings, hence disabling for MEB.
* | Bug#13982017: ALTER TABLE RENAME ENDS UP WITH ERROR 1050 (42S01)Jon Olav Hauglid2012-06-011-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed by backport of: ------------------------------------------------------------ revno: 3402.50.156 committer: Jon Olav Hauglid <jon.hauglid@oracle.com> branch nick: mysql-trunk-test timestamp: Wed 2012-02-08 14:10:23 +0100 message: Bug#13417754 ASSERT IN ROW_DROP_DATABASE_FOR_MYSQL DURING DROP SCHEMA This assert could be triggered if an InnoDB table was being moved to a different database using ALTER TABLE ... RENAME, while this database concurrently was being dropped by DROP DATABASE. The reason for the problem was that no metadata lock was taken on the target database by ALTER TABLE ... RENAME. DROP DATABASE was therefore not blocked and could remove the database while ALTER TABLE ... RENAME was executing. This could cause the assert in InnoDB to be triggered. This patch fixes the problem by taking a IX metadata lock on the target database before ALTER TABLE ... RENAME starts moving a table to a different database. Note that this problem did not occur with RENAME TABLE which already takes the correct metadata locks. Also note that this patch slightly changes the behavior of ALTER TABLE ... RENAME. Before, the statement would abort and return an error if a lock on the target table name could not be taken immediately. With this patch, ALTER TABLE ... RENAME will instead block and wait until the lock can be taken (or until we get a lock timeout). This also means that it is possible to get ER_LOCK_DEADLOCK errors in this situation since we allow ALTER TABLE ... RENAME to wait and not just abort immediately.
* | Merge from mysql-5.1 to mysql-5.5. Annamalai Gurusami2012-06-011-0/+1
|\ \