Commit graph

1612 commits

Author SHA1 Message Date
Jan Lindström
862b034488 Fixed compiler errors. 2014-02-04 20:08:59 +02:00
Jan Lindström
55fab3dbf4 Fixed issue on atomic writes on startup, removed incorrect assert.
Fixed issue on file space extend when posix_fallocate is used.

Merged second iteration of multi-threaded flush code.
2014-02-04 14:52:02 +02:00
Jan Lindström
8c5d5bc5de Fixed merge error on InnoDB page compression level handling.
Merged page compression feature to XtraDB storage engine.

Added feature where page compression can use lz4 compression
method (innodb_use_lz4, default OFF).
2014-02-03 10:08:15 +02:00
Jan Lindström
febe99ec8d Merge lp:maria/10.0 10.0.7 revision 3961 2014-01-27 13:00:36 +02:00
Jan Lindström
58ce55134f Removed some unnecessary assertions to debug build and enhanced the page_compression and page_compression_level fetch. 2014-01-13 15:02:31 +02:00
Jan Lindström
ec8257216e Enhancement: Change atomic_writes table option to enum type. Now every file can either use atomic writes, not use it or use default.
SYNTAX: ATOMIC_WRITES=['DEFAULT','ON','OFF']

Idea here is to be able to define innodb_doublewrite = 1 but with following rules:

ATOMIC_WRITES='DEFAULT' - if innodb_use_atomic_writes = 1, we do not write to doublewrite buffer the changes
                          if innodb_use_atomic_writes = 0, we write to doublewrite buffer
ATOMIC_WRITES='ON'      - do not write to doublewrite buffer
ATOMIC_WRITES='OFF'     - write to doublewrite buffer

Note that doublewrite buffer can't be used if innodb_doublewrite = 0.
2014-01-10 12:11:36 +02:00
Jan Lindström
2b5a0a2280 Feature: In first write if we trim we set write_size to actual bytes
written and rest of the page is trimmed. In following writes
there is no need to trim again if write_size only increases
because rest of the page is already trimmed. If actual write
size decreases we need to trim again. Need to research if this
can happen frequently enough to make any effect.
2014-01-09 12:33:29 +02:00
Jan Lindström
e80f2468b4 Fixed issues with atomic writes and compressed pages.
Temporal solution: In directFS using atomic writes
we must use posix_fallocate to extend the file because
pwrite past end of file fails but when compression is
used the file pages must be physically initialized with
zeroes, thus after file extend with posix_fallocate
we still write empty pages to file.
2014-01-09 08:30:09 +02:00
Sergei Golubchik
90a3c97162 merge 2013-12-22 17:20:23 +01:00
Sergei Golubchik
ffa8c4cfcc Percona-Server-5.6.14-rel62.0 merge
support ha_innodb.so as a dynamic plugin.
* remove obsolete *,innodb_plugin.rdiff files
* s/--plugin-load=/--plugin-load-add=/
* MYSQL_PLUGIN_IMPORT glob_hostname[]
* use my_error instead of push_warning_printf(ER_DEFAULT)
* don't use tdc_size and tc_size in a module

update test cases (XtraDB is 5.6.14, InnoDB is 5.6.10)
* copy new tests over
* disable some tests for (old) InnoDB
* delete XtraDB tests that no longer apply

small compatibility changes:
* s/HTON_EXTENDED_KEYS/HTON_SUPPORTS_EXTENDED_KEYS/
* revert unnecessary InnoDB changes to make it a bit closer to the upstream

fix XtraDB to compile on Windows (both as a static and a dynamic plugin)

disable XtraDB on Windows (deadlocks) and where no atomic ops are available (e.g. CentOS 5)


storage/innobase/handler/ha_innodb.cc:
  revert few unnecessary changes to make it a bit closer to the original InnoDB
storage/innobase/include/univ.i:
  correct the version to match what it was merged from
2013-12-22 17:06:50 +01:00
Jan Lindström
f6a196555e Temporally disable posix_fallocate on os_file_set_size because
currently Fusion-io SSD drive does not support setting file
size without fysically writing pages with zeroes when fallocate
with PUCH_HOLE is used.

Added additional error message if atomic write setup does not
succeed.
2013-12-20 08:59:34 +02:00
Jan Lindström
f023715fe8 Need to disable fast file extension with posix_fallocate
for Fusion-io currently.
2013-12-20 06:50:58 +02:00
Jan Lindström
9ba590930a Atomic writes require also atomic_blobs. Add that missing flag to
dictionary setting and from there it will be stored to table space.
2013-12-19 18:04:26 +02:00
Jan Lindström
5e55d1ced5 Changes for Fusion-io multi-threaded flush, page compressed tables and
tables using atomic write/table.

This is work in progress and some parts are at most POC quality.
2013-12-19 14:36:38 +02:00
Elena Stepanova
71f4a24d06 MDEV-5452 10.0 does not build on openSUSE 13.1
Also known as MySQL#70047 and BUG#17316314 (srv_buf_size not declared).
The workaround is taken from MySQL 5.6 tree: 

  BUG#17316314 - SRV_BUF_SIZE NOT DECLARED
  Temporary fix. Disabling FALLOC_FL_PUNCH_HOLE for now
2013-12-17 14:40:56 +04:00
Sergei Golubchik
d28d3ba40d 10.0-base merge 2013-12-16 13:02:21 +01:00
Sergei Golubchik
6bf10fac44 5.5 merge 2013-12-15 15:57:26 +01:00
Sergei Golubchik
c6d30805db 5.5 merge 2013-11-23 00:50:54 +01:00
Alexander Barkov
1345a75922 MroongaSE: addint thd_autoinc and thd_error_context plugin services 2013-12-12 19:18:49 +04:00
Elena Stepanova
253ed701e9 A fix for MySQL#65146 introduced a new warning.
Minor wording changes in skip messages.
2013-11-28 19:54:07 +04:00
Sergei Golubchik
fa3f8a18b2 mysql-5.5.34 merge
(some patches reverted, test case added)
2013-11-19 13:16:25 +01:00
Sergei Golubchik
c155890af9 MDEV-5248 Serious incompatibility and data corruption of DATETIME and DATE types due to get_innobase_type_from_mysql_type refactor combined with InnoDB Online DDL
restore old innodb get_innobase_type_from_mysql_type() function,
record all mysql_type->innodb_type mapping
(as generated by mysql-5.6).
add safety code to disable online alter when internal types don't match

storage/innobase/dict/dict0stats.cc:
  revert to 5.6 state
2013-11-13 22:58:19 +01:00
Elena Stepanova
ae62e19f27 Various changes coming from 5.6 2013-11-08 23:25:06 +04:00
Elena Stepanova
317efa2a45 Semantics of ALTER ONLINE changed to mirror ALTER .. LOCK=NONE 2013-11-08 23:23:35 +04:00
Elena Stepanova
cb8889756a Virtual columns are supported in InnoDB 2013-11-08 23:22:59 +04:00
Elena Stepanova
5920d03d3f Fulltext search is supported in InnoDB 2013-11-08 23:22:25 +04:00
Elena Stepanova
66ed34d6ed More comprehensive error messages and codes 2013-11-08 23:21:26 +04:00
Elena Stepanova
949cb948de InnoDB is built-in until XtraDB is merged 2013-11-08 23:20:50 +04:00
unknown
273bcb92c1 Merge 10.0-base to 10.0 2013-11-07 07:52:40 +01:00
Elena Stepanova
411761106e More engine names are now obfuscated 2013-11-07 04:12:50 +04:00
Elena Stepanova
cdecd86a53 More verbose error messages 2013-11-07 03:36:53 +04:00
Sergei Golubchik
ba55e5e02b merge mdev-4506 into 10.0 2013-11-04 00:45:27 +01:00
unknown
57a267a8c0 Merge from 10.0-base to 10.0 the feature MDEV-4506: Parallel replication.
The merge is still missing a few hunks related to temporary tables and
InnoDB log file size. The associated code did not seem to exist in
10.0, so the merge of that needs more work. Until this is fixed, there
are a number of test failures as a result.
2013-11-01 12:00:11 +01:00
unknown
cb86ce60b9 Merge MDEV-4506: Parallel replication into 10.0-base. 2013-11-01 09:17:06 +01:00
Sergei Golubchik
6882f9fa67 MDEV-4024 Found Index PRIMARY whose column info does not match that of MySQL
For compatibility purposes let InnoDB use DATA_INT for MYSQL_TYPE_ENUM and MYSQL_TYPE_SET.
Silence the warning for these types and let the index translation table to be built anyway.

Test case by Jeremy Cole.
2013-10-31 23:20:05 +01:00
unknown
2842f6b5dc MDEV-4506: Parallel replication: error handling.
Add an error code to the wait_for_commit facility.

Now, when a transaction fails, it can signal the error to
any subsequent transaction that is waiting for it to commit.
The waiting transactions then receive the error code back from
wait_for_prior_commit() and can handle the error appropriately.

Also fix one race that could cause crash if @@slave_parallel_threads
were changed several times quickly in succession.
2013-10-14 15:28:16 +02:00
Michael Widenius
3784432256 Give a warning, not an error, if the log file size in innodb doesn't match what is on disk
This helps when moving from MariaDB 5.5 to MariaDB 10.0 as sometimes the log file size is rounded differently.

storage/innobase/srv/srv0start.c:
  Give a warning, not an error, if the log file size in innodb doesn't match what is on disk
storage/xtradb/srv/srv0start.c:
  Give a warning, not an error, if the log file size in innodb doesn't match what is on disk
2013-10-13 23:20:57 +03:00
Jan Lindström
c75e92fd6f MDEV-5141: Failing assertion: ib_table->stat_initialized in file ha_innodb.cc line 11042 on concurrent ALTER and SELECT from I_S
Analysis: After ALTER TABLE the table statistics needs to be rebuilt and therefore stat_initialized is set false.  It will be rebuilt when the table is loaded again and table is closed when alter table is completed. However, during alter table table could be used by concurrent SELECT from I_S. Therefore, we need to rebuild transient table statistics meanwhile until table can be reloaded.
2013-10-17 12:17:32 +03:00
Jan Lindström
9538bbfce9 MDEV-4808: Assertion: trx->start_file != 0 fails in trx0trx.cc on killing CREATE TABLE query.
Analysis: There is debug assertion ut_ad(trx->start_file != 0); and ut_ad(trx->start_line != 0); on trx_start_low funcition at trx0trx.cc. These fields are initialized on include/trx0trx.h at function trx_start_if_not_started_xa. Thus at trx_prepare_for_mysql function should call trx_start_if_not_started_xa(trx); not trx_start_if_not_started_xa_low(trx) directly;
2013-10-01 13:24:52 +03:00
Sergei Golubchik
9af177042e 10.0-base merge.
Partitioning/InnoDB changes are *not* merged (they'll come from 5.6)
TokuDB does not compile (not updated to 10.0 SE API)
2013-09-21 10:14:42 +02:00
Sergei Golubchik
4ec2e9d7ed 5.5 merge and fixes for compiler/test errors 2013-09-18 13:07:31 +02:00
Sergei Golubchik
b838d081ad mysql-5.5.33 merge 2013-09-06 22:31:30 +02:00
Sergei Golubchik
a73972bfea don't decide on extended keys by DB_TYPE_INNODB, use hton->flags 2013-08-26 21:13:17 +04:00
Jan Lindström
c8b87ca16f MDEV-4133: Review InnoDB tablespace allocation patch by Toshikuni Fukaya. If innodb_use_posix_fallocate is set we use posix_fallocate call to extent tablespace allocation instead of pwrite. 2013-08-23 09:03:57 +03:00
Marko Mäkelä
1676823e01 Merge mysql-5.1 to mysql-5.5. 2013-08-21 08:48:04 +03:00
unknown
35b2883643 merge 5.5 -> 10.0-base 2013-08-20 14:48:29 +03:00
Marko Mäkelä
553988a26e Merge mysql-5.1 to mysql-5.5. 2013-08-16 15:49:13 +03:00
Marko Mäkelä
fb2a2d2562 Bug#17312846 CHECK TABLE ASSERTION FAILURE
DICT_TABLE_GET_FORMAT(CLUST_INDEX->TABLE) >= 1

The function row_sel_sec_rec_is_for_clust_rec() was incorrectly
preparing to compare a NULL column prefix in a secondary index with a
non-NULL column in a clustered index.

This can trigger an assertion failure in 5.1 plugin and later. In the
built-in InnoDB of MySQL 5.1 and earlier, we would apparently only do
some extra work, by trimming the clustered index field for the
comparison.

The code might actually have worked properly apart from this debug
assertion failure. It is merely doing some extra work in fetching a
BLOB column, and then comparing it to NULL (which would return the
same result, no matter what the BLOB contents is).

While the test case involves CHECK TABLE, this could theoretically
occur during any read that uses a secondary index on a column prefix
of a column that can be NULL.

rb#3101 approved by Mattias Jonsson
2013-08-16 15:45:41 +03:00
Marko Mäkelä
49ffda0969 Merge mysql-5.1 to mysql-5.5. 2013-08-15 15:34:12 +03:00
Marko Mäkelä
318096074e Bug#17302896 DOUBLE PURGE ON ROLLBACK OF UPDATING A DELETE-MARKED RECORD
There was a race condition in the rollback of TRX_UNDO_UPD_DEL_REC.

Once row_undo_mod_clust() has rolled back the changes by the rolling-back
transaction, it attempts to purge the delete-marked record, if possible, in a
separate mini-transaction.

However, row_undo_mod_remove_clust_low() fails to check if the DB_TRX_ID of
the record that it found after repositioning the cursor, is still the same.
If it is not, it means that the record was purged and another record was
inserted in its place.

So, the rollback would have performed an incorrect purge, breaking the
locking rules and causing corruption.

The problem was found by creating a table that contains a unique
secondary index and a primary key, and two threads running REPLACE
with only one value for the unique column, so that the uniqueness
constraint would be violated all the time, leading to statement
rollback.

This bug exists in all InnoDB versions (I checked MySQL 3.23.53).
It has become easier to repeat in 5.5 and 5.6 thanks to scalability
improvements and a dedicated purge thread.

rb#3085 approved by Jimmy Yang
2013-08-15 15:23:23 +03:00