mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
Applying InnoDB Plugin 1.0.5 snapshot, part 10
From r5917 to r5940 Detailed revision comments: r5917 | marko | 2009-09-16 04:56:23 -0500 (Wed, 16 Sep 2009) | 1 line branches/zip: innobase_get_cset_width(): Cache the value of current_thd. r5919 | vasil | 2009-09-16 13:37:13 -0500 (Wed, 16 Sep 2009) | 4 lines branches/zip: Whitespace cleanup in the ChangeLog. r5920 | vasil | 2009-09-16 13:47:22 -0500 (Wed, 16 Sep 2009) | 4 lines branches/zip: Add ChangeLog entries for r5916. r5922 | marko | 2009-09-17 01:32:08 -0500 (Thu, 17 Sep 2009) | 4 lines branches/zip: innodb-zip.test: Make the test work with zlib 1.2.3.3. Apparently, the definition of compressBound() has slightly changed. This has been filed as Mantis Issue #345. r5924 | vasil | 2009-09-17 23:59:30 -0500 (Thu, 17 Sep 2009) | 4 lines branches/zip: White space and formatting cleanup in the ChangeLog r5934 | vasil | 2009-09-18 12:06:46 -0500 (Fri, 18 Sep 2009) | 4 lines branches/zip: Fix typo. r5935 | calvin | 2009-09-18 16:08:02 -0500 (Fri, 18 Sep 2009) | 6 lines branches/zip: fix bug#44338; minor non-functional changes Bug#44338 innodb has message about non-existing option innodb_max_files_open. Change the option to innodb_open_files. The fix was committed into 6.0 branch. r5938 | calvin | 2009-09-19 02:14:25 -0500 (Sat, 19 Sep 2009) | 41 lines branches/zip: Merge revisions 2584:2956 from branches/6.0, except c2932. Bug#37232 and bug#31183 were fixed in the 6.0 branch only. They should be fixed in the plugin too, specially MySQL 6.0 is discontinued at this point. ------------------------------------------------------------------------ r2604 | inaam | 2008-08-21 09:37:06 -0500 (Thu, 21 Aug 2008) | 8 lines branches/6.0 bug#37232 Relax locking behaviour for REPLACE INTO t SELECT ... FROM t1. Now SELECT on t1 is performed as a consistent read when the isolation level is set to READ COMMITTED. Reviewed by: Heikki ------------------------------------------------------------------------ r2605 | inaam | 2008-08-21 09:59:33 -0500 (Thu, 21 Aug 2008) | 7 lines branches/6.0 Added a comment to clarify why distinct calls to read MySQL binary log file name and log position do not entail any race condition. Suggested by: Heikki ------------------------------------------------------------------------ r2956 | inaam | 2008-11-04 04:47:30 -0600 (Tue, 04 Nov 2008) | 11 lines branches/6.0 bug#31183 If the system tablespace runs out of space because 'autoextend' is not specified with innodb_data_file_path there was no error message printed to the error log. The client would get 'table full' error. This patch prints an appropriate error message to the error log. rb://43 Approved by: Marko ------------------------------------------------------------------------ r5940 | vasil | 2009-09-21 00:26:04 -0500 (Mon, 21 Sep 2009) | 4 lines branches/zip: Add ChangeLog entries for c5938.
This commit is contained in:
parent
15fd02cb02
commit
8fffb92862
10 changed files with 195 additions and 25 deletions
35
mysql-test/suite/innodb/r/innodb-consistent.result
Normal file
35
mysql-test/suite/innodb/r/innodb-consistent.result
Normal file
|
@ -0,0 +1,35 @@
|
|||
drop table if exists t1;
|
||||
set session transaction isolation level read committed;
|
||||
create table t1(a int not null) engine=innodb DEFAULT CHARSET=latin1;
|
||||
create table t2 like t1;
|
||||
insert into t2 values (1),(2),(3),(4),(5),(6),(7);
|
||||
set autocommit=0;
|
||||
begin;
|
||||
replace into t1 select * from t2;
|
||||
set session transaction isolation level read committed;
|
||||
set autocommit=0;
|
||||
delete from t2 where a=5;
|
||||
commit;
|
||||
delete from t2;
|
||||
commit;
|
||||
commit;
|
||||
begin;
|
||||
insert into t1 select * from t2;
|
||||
set session transaction isolation level read committed;
|
||||
set autocommit=0;
|
||||
delete from t2 where a=5;
|
||||
commit;
|
||||
delete from t2;
|
||||
commit;
|
||||
commit;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
drop table t1;
|
||||
drop table t2;
|
|
@ -141,7 +141,7 @@ drop table t1;
|
|||
CREATE TABLE t1(c TEXT, PRIMARY KEY (c(440)))
|
||||
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII;
|
||||
ERROR 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
|
||||
CREATE TABLE t1(c TEXT, PRIMARY KEY (c(439)))
|
||||
CREATE TABLE t1(c TEXT, PRIMARY KEY (c(438)))
|
||||
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII;
|
||||
INSERT INTO t1 VALUES(REPEAT('A',512)),(REPEAT('B',512));
|
||||
DROP TABLE t1;
|
||||
|
|
1
mysql-test/suite/innodb/t/innodb-consistent-master.opt
Normal file
1
mysql-test/suite/innodb/t/innodb-consistent-master.opt
Normal file
|
@ -0,0 +1 @@
|
|||
--innodb_lock_wait_timeout=2
|
59
mysql-test/suite/innodb/t/innodb-consistent.test
Normal file
59
mysql-test/suite/innodb/t/innodb-consistent.test
Normal file
|
@ -0,0 +1,59 @@
|
|||
-- source include/not_embedded.inc
|
||||
-- source include/have_innodb.inc
|
||||
-- source suite/innodb/include/have_innodb_plugin.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
# REPLACE INTO ... SELECT and INSERT INTO ... SELECT should do
|
||||
# a consistent read of the source table.
|
||||
|
||||
connect (a,localhost,root,,);
|
||||
connect (b,localhost,root,,);
|
||||
connection a;
|
||||
set session transaction isolation level read committed;
|
||||
create table t1(a int not null) engine=innodb DEFAULT CHARSET=latin1;
|
||||
create table t2 like t1;
|
||||
insert into t2 values (1),(2),(3),(4),(5),(6),(7);
|
||||
set autocommit=0;
|
||||
|
||||
# REPLACE INTO ... SELECT case
|
||||
begin;
|
||||
# this should not result in any locks on t2.
|
||||
replace into t1 select * from t2;
|
||||
|
||||
connection b;
|
||||
set session transaction isolation level read committed;
|
||||
set autocommit=0;
|
||||
# should not cuase a lock wait.
|
||||
delete from t2 where a=5;
|
||||
commit;
|
||||
delete from t2;
|
||||
commit;
|
||||
connection a;
|
||||
commit;
|
||||
|
||||
# INSERT INTO ... SELECT case
|
||||
begin;
|
||||
# this should not result in any locks on t2.
|
||||
insert into t1 select * from t2;
|
||||
|
||||
connection b;
|
||||
set session transaction isolation level read committed;
|
||||
set autocommit=0;
|
||||
# should not cuase a lock wait.
|
||||
delete from t2 where a=5;
|
||||
commit;
|
||||
delete from t2;
|
||||
commit;
|
||||
connection a;
|
||||
commit;
|
||||
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
|
||||
connection default;
|
||||
disconnect a;
|
||||
disconnect b;
|
|
@ -106,7 +106,7 @@ drop table t1;
|
|||
--error ER_TOO_BIG_ROWSIZE
|
||||
CREATE TABLE t1(c TEXT, PRIMARY KEY (c(440)))
|
||||
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII;
|
||||
CREATE TABLE t1(c TEXT, PRIMARY KEY (c(439)))
|
||||
CREATE TABLE t1(c TEXT, PRIMARY KEY (c(438)))
|
||||
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII;
|
||||
INSERT INTO t1 VALUES(REPEAT('A',512)),(REPEAT('B',512));
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -1,10 +1,53 @@
|
|||
2009-09-19 The InnoDB Team
|
||||
|
||||
* handler/ha_innodb.cc, mysql-test/innodb-consistent-master.opt,
|
||||
mysql-test/innodb-consistent.result,
|
||||
mysql-test/innodb-consistent.test:
|
||||
Fix Bug#37232 Innodb might get too many read locks for DML with
|
||||
repeatable-read
|
||||
|
||||
2009-09-19 The InnoDB Team
|
||||
|
||||
* fsp/fsp0fsp.c:
|
||||
Fix Bug#31183 Tablespace full problems not reported in error log,
|
||||
error message unclear
|
||||
|
||||
2009-09-17 The InnoDB Team
|
||||
|
||||
* mysql-test/innodb-zip.result, mysql-test/innodb-zip.test:
|
||||
Make the test pass with zlib 1.2.3.3. Apparently, the definition
|
||||
of compressBound() has changed between zlib versions, and the
|
||||
maximum record size of a table with 1K compressed page size has
|
||||
been reduced by one byte. This is an arbitrary test. In practical
|
||||
applications, for good write performance, the compressed page size
|
||||
should be chosen to be bigger than the absolute minimum.
|
||||
|
||||
2009-09-16 The InnoDB Team
|
||||
|
||||
* handler/ha_innodb.cc:
|
||||
Fix Bug#46256 drop table with unknown collation crashes innodb
|
||||
|
||||
2009-09-16 The InnoDB Team
|
||||
|
||||
* dict/dict0dict.c, handler/ha_innodb.cc,
|
||||
mysql-test/innodb_bug44369.result, mysql-test/innodb_bug44369.test,
|
||||
row/row0mysql.c:
|
||||
Fix Bug#44369 InnoDB: Does not uniformly disallow disallowed column
|
||||
names
|
||||
|
||||
2009-09-16 The InnoDB Team
|
||||
|
||||
* handler/ha_innodb.cc, include/db0err.h,
|
||||
mysql-test/innodb_bug46000.result, mysql-test/innodb_bug46000.test:
|
||||
Fix Bug#46000 using index called GEN_CLUST_INDEX crashes server
|
||||
|
||||
2009-09-02 The InnoDB Team
|
||||
|
||||
* include/lock0lock.h, include/row0mysql.h, lock/lock0lock.c,
|
||||
row/row0mysql.c:
|
||||
Fix a regression introduced by the fix for MySQL bug#26316. We check
|
||||
whether a transaction holds any AUTOINC locks before we acquire
|
||||
the kernel mutex and release those locks.
|
||||
the kernel mutex and release those locks.
|
||||
|
||||
2009-08-27 The InnoDB Team
|
||||
|
||||
|
@ -16,29 +59,29 @@
|
|||
|
||||
* row/row0merge.c:
|
||||
Fix a bug in the merge sort that can corrupt indexes in fast index
|
||||
creation. Add some consistency checks. Check that the number of
|
||||
creation. Add some consistency checks. Check that the number of
|
||||
records remains constant in every merge sort pass.
|
||||
|
||||
2009-08-27 The InnoDB Team
|
||||
|
||||
* buf/buf0buf.c, buf/buf0lru.c, buf/buf0rea.c,
|
||||
handler/ha_innodb.cc, include/buf0buf.h, include/buf0buf.ic,
|
||||
include/buf0lru.h, include/ut0ut.h, ut/ut0ut.c:
|
||||
* buf/buf0buf.c, buf/buf0lru.c, buf/buf0rea.c, handler/ha_innodb.cc,
|
||||
include/buf0buf.h, include/buf0buf.ic, include/buf0lru.h,
|
||||
include/ut0ut.h, ut/ut0ut.c:
|
||||
Make it possible to tune the buffer pool LRU eviction policy to be
|
||||
more resistant against index scans. Introduce the settable global
|
||||
more resistant against index scans. Introduce the settable global
|
||||
variables innodb_old_blocks_pct and innodb_old_blocks_time for
|
||||
controlling the buffer pool eviction policy. The parameter
|
||||
controlling the buffer pool eviction policy. The parameter
|
||||
innodb_old_blocks_pct (5..95) controls the desired amount of "old"
|
||||
blocks in the LRU list. The default is 37, corresponding to the
|
||||
old fixed ratio of 3/8. Each time a block is accessed, it will be
|
||||
blocks in the LRU list. The default is 37, corresponding to the
|
||||
old fixed ratio of 3/8. Each time a block is accessed, it will be
|
||||
moved to the "new" blocks if its first access was at least
|
||||
innodb_old_blocks_time milliseconds ago (default 0, meaning every
|
||||
block). The idea is that in index scans, blocks will be accessed
|
||||
block). The idea is that in index scans, blocks will be accessed
|
||||
a few times within innodb_old_blocks_time, and they will remain in
|
||||
the "old" section of the LRU list. Thus, when
|
||||
innodb_old_blocks_time is nonzero, blocks retrieved for one-time
|
||||
index scans will be more likely candidates for eviction than
|
||||
blocks that are accessed in random patterns.
|
||||
the "old" section of the LRU list. Thus, when innodb_old_blocks_time
|
||||
is nonzero, blocks retrieved for one-time index scans will be more
|
||||
likely candidates for eviction than blocks that are accessed in
|
||||
random patterns.
|
||||
|
||||
2009-08-26 The InnoDB Team
|
||||
|
||||
|
|
|
@ -955,7 +955,7 @@ close_more:
|
|||
" while the maximum\n"
|
||||
"InnoDB: allowed value would be %lu.\n"
|
||||
"InnoDB: You may need to raise the value of"
|
||||
" innodb_max_files_open in\n"
|
||||
" innobase_open_files in\n"
|
||||
"InnoDB: my.cnf.\n",
|
||||
(ulong) fil_system->n_open,
|
||||
(ulong) fil_system->max_n_open);
|
||||
|
@ -1535,7 +1535,7 @@ fil_open_log_and_system_tablespace_files(void)
|
|||
fprintf(stderr,
|
||||
"InnoDB: Warning: you must"
|
||||
" raise the value of"
|
||||
" innodb_max_open_files in\n"
|
||||
" innobase_open_files in\n"
|
||||
"InnoDB: my.cnf! Remember that"
|
||||
" InnoDB keeps all log files"
|
||||
" and all system\n"
|
||||
|
|
|
@ -231,6 +231,9 @@ the extent are free and which contain old tuple version to clean. */
|
|||
/* Offset of the descriptor array on a descriptor page */
|
||||
#define XDES_ARR_OFFSET (FSP_HEADER_OFFSET + FSP_HEADER_SIZE)
|
||||
|
||||
/* Flag to indicate if we have printed the tablespace full error. */
|
||||
static ibool fsp_tbs_full_error_printed = FALSE;
|
||||
|
||||
#ifndef UNIV_HOTBACKUP
|
||||
/**********************************************************************//**
|
||||
Returns an extent to the free list of a space. */
|
||||
|
@ -1218,6 +1221,19 @@ fsp_try_extend_data_file(
|
|||
|
||||
if (space == 0 && !srv_auto_extend_last_data_file) {
|
||||
|
||||
/* We print the error message only once to avoid
|
||||
spamming the error log. Note that we don't need
|
||||
to reset the flag to FALSE as dealing with this
|
||||
error requires server restart. */
|
||||
if (fsp_tbs_full_error_printed == FALSE) {
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: Data file(s) ran"
|
||||
" out of space.\n"
|
||||
"Please add another data file or"
|
||||
" use \'autoextend\' for the last"
|
||||
" data file.\n");
|
||||
fsp_tbs_full_error_printed = TRUE;
|
||||
}
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
|
|
|
@ -968,8 +968,9 @@ innobase_get_cset_width(
|
|||
*mbminlen = cs->mbminlen;
|
||||
*mbmaxlen = cs->mbmaxlen;
|
||||
} else {
|
||||
if (current_thd
|
||||
&& (thd_sql_command(current_thd) == SQLCOM_DROP_TABLE)) {
|
||||
THD* thd = current_thd;
|
||||
|
||||
if (thd && thd_sql_command(thd) == SQLCOM_DROP_TABLE) {
|
||||
|
||||
/* Fix bug#46256: allow tables to be dropped if the
|
||||
collation is not found, but issue a warning. */
|
||||
|
@ -2496,6 +2497,19 @@ retry:
|
|||
}
|
||||
}
|
||||
|
||||
/* The following calls to read the MySQL binary log
|
||||
file name and the position return consistent results:
|
||||
1) Other InnoDB transactions cannot intervene between
|
||||
these calls as we are holding prepare_commit_mutex.
|
||||
2) Binary logging of other engines is not relevant
|
||||
to InnoDB as all InnoDB requires is that committing
|
||||
InnoDB transactions appear in the same order in the
|
||||
MySQL binary log as they appear in InnoDB logs.
|
||||
3) A MySQL log file rotation cannot happen because
|
||||
MySQL protects against this by having a counter of
|
||||
transactions in prepared state and it only allows
|
||||
a rotation when the counter drops to zero. See
|
||||
LOCK_prep_xids and COND_prep_xids in log.cc. */
|
||||
trx->mysql_log_file_name = mysql_bin_log_file_name();
|
||||
trx->mysql_log_offset = (ib_int64_t) mysql_bin_log_file_pos();
|
||||
|
||||
|
@ -8517,6 +8531,7 @@ ha_innobase::store_lock(
|
|||
&& isolation_level != TRX_ISO_SERIALIZABLE
|
||||
&& (lock_type == TL_READ || lock_type == TL_READ_NO_INSERT)
|
||||
&& (sql_command == SQLCOM_INSERT_SELECT
|
||||
|| sql_command == SQLCOM_REPLACE_SELECT
|
||||
|| sql_command == SQLCOM_UPDATE
|
||||
|| sql_command == SQLCOM_CREATE_TABLE)) {
|
||||
|
||||
|
@ -8524,10 +8539,11 @@ ha_innobase::store_lock(
|
|||
option set or this session is using READ COMMITTED
|
||||
isolation level and isolation level of the transaction
|
||||
is not set to serializable and MySQL is doing
|
||||
INSERT INTO...SELECT or UPDATE ... = (SELECT ...) or
|
||||
CREATE ... SELECT... without FOR UPDATE or
|
||||
IN SHARE MODE in select, then we use consistent
|
||||
read for select. */
|
||||
INSERT INTO...SELECT or REPLACE INTO...SELECT
|
||||
or UPDATE ... = (SELECT ...) or CREATE ...
|
||||
SELECT... without FOR UPDATE or IN SHARE
|
||||
MODE in select, then we use consistent read
|
||||
for select. */
|
||||
|
||||
prebuilt->select_lock_type = LOCK_NONE;
|
||||
prebuilt->stored_select_lock_type = LOCK_NONE;
|
||||
|
|
|
@ -50,7 +50,7 @@ Created 1/20/1994 Heikki Tuuri
|
|||
|
||||
/* The following is the InnoDB version as shown in
|
||||
SELECT plugin_version FROM information_schema.plugins;
|
||||
calculated in in make_version_string() in sql/sql_show.cc like this:
|
||||
calculated in make_version_string() in sql/sql_show.cc like this:
|
||||
"version >> 8" . "version & 0xff"
|
||||
because the version is shown with only one dot, we skip the last
|
||||
component, i.e. we show M.N.P as M.N */
|
||||
|
|
Loading…
Add table
Reference in a new issue