Commit graph

176715 commits

Author SHA1 Message Date
Marko Mäkelä
a80af35a85 MDEV-12396 IMPORT cleanup: ROW_FORMAT=COMPRESSED
Initialize block.page.zip only once.

PageConverter::update(): Initialize m_page_zip_ptr
as late as possible.
(We should really remove it at some point.)

PageConverter::operator(): Refer to block->page.zip instead of
m_page_zip_ptr.

AbstractCallback::get_frame(): Define static. Refer
to block->page.zip.data directly.

fil_iterate(): Refer to block->page.zip.data directly.

fil_tablespace_iterate(): Initialize block.page.zip.data as soon
as possible.
2018-03-20 15:31:39 +02:00
Marko Mäkelä
eaa7bfb59f MDEV-12396 IMPORT TABLESPACE: Simplify validation
fil_iterate(): Validate the pages directly.

import_page_status_t, PageConverter::validate(): Remove.

AbstractCallback::filename(): New accessor.

AbstractCallback::is_interrupted(): Replaces periodic_check().

PageConverter::trigger_corruption(): Remove.
2018-03-20 15:31:39 +02:00
Marko Mäkelä
6247c64c2a MDEV-12396 IMPORT TABLESPACE cleanup
Reduce unnecessary inter-module calls for IMPORT TABLESPACE.
Move some IMPORT-related code from fil0fil.cc to row0import.cc.

PageCallback: Remove. Make AbstractCallback the base class.

PageConverter: Define some member functions inline.
2018-03-20 15:31:39 +02:00
Thirunarayanan Balathandayuthapani
eee73ddfbb MDEV-12255 innodb_prefix_index_cluster_optimization hits debug build
assert on UTF-8 columns

Problem:
=======
(1) Multi-byte character cases are not considered during prefix index
cluster optimization check. It leads to fetch of improper results during
read operation.
(2) Strict assert in row_sel_field_store_in_mysql_format_func and it asserts
for prefix index record to mysql conversion.

Solution:
========
(1) Consider the case of multi-byte character during prefix index
cluster optimization check.
(2) Relax the assert in row_sel_field_store_in_mysql_format_func to allow
prefix index record to mysql format conversion.

The patch is taken from
1eee538087
2018-03-20 17:53:33 +05:30
Jan Lindström
bc2e7d7889 Fix test case MW-329. 2018-03-20 12:10:41 +02:00
Philip Stoev
33028f7c4b Refs: MW-245 - Adjust tests to account for the new behavior. 2018-03-20 12:10:41 +02:00
sjaakola
9a89614857 Refs: MW-245 - changed logic so that in non primary node it is possible to do SET + SHOW + SELECT from information and pfs schema, when dirty reads are not enabled - however, non table selects are not allowed (e.g. SELECT 1) 2018-03-20 12:10:41 +02:00
sjaakola
c5dd2abf4c Refs MW-245 - logic was wrong in detecting if queries are allowed in non primary node. it allowed select with no table list to execute even if dirty reads was not specified 2018-03-20 12:10:41 +02:00
Philip Stoev
84d4ab5be1 refs MW-245: Galera MTR Tests: additional tests for wsrep_reject_queries, wsrep_dirty_reads 2018-03-20 12:10:41 +02:00
sjaakola
8f717ed360 refs MW-245 - allowing USE <database> with dirty reads configuration - fix for logic of setting wsrep ready status 2018-03-20 12:10:41 +02:00
sjaakola
2a729b5f4b refs MW-245 - merged wsrep_dirty_reads and wsrep_reject_queries from PXC 2018-03-20 12:10:41 +02:00
Eugene Kosov
5a8f8f89d6 honor alignment rules and xtradb too 2018-03-20 10:46:57 +03:00
Varun Gupta
e390f7b675 MDEV-12737: tokudb_mariadb.mdev6657 fails in buildbot with different plan, and outside with valgrind warnings
Fixing the test by adding replace column for the rows column in the explain.
2018-03-20 11:05:28 +05:30
Jacob Mathew
7cf2428db3 MDEV-10991: Server crashes in spider_udf_direct_sql_create_conn - tests in spider/oracle* suites crash the server
The crash occurs due to code that is #ifdef'd out with HAVE_ORACLE_OCI that
pertains to the use of Spider with an Oracle data tier. Enabling this code
eliminates the crash.

The reason that MariaDB needs to support Oracle storage at the data tier is
to help customers migrate from Oracle. It is necessary to build Spider with
the additional build flag -DHAVE_ORACLE_OCI, and install and start Oracle
before running the Oracle test suite or any tests within it. Nevertheless,
if Spider is built normally and Oracle has not been started, these tests
should not cause the MariaDB server to crash. The bug fix replaces the
crash with the following error:
  ERROR 12501 (HY000) at line 4: The connect info 'ORACLE' is invalid

Author:
  Jacob Mathew.

Reviewer:
  Kentoku Shiba.
2018-03-19 12:49:22 -07:00
Vicențiu Ciorbaru
24b353162f Merge branch '10.0-galera' into 10.1 2018-03-19 15:21:01 +02:00
Eugene Kosov
75c76dbb06 MDEV-15030 Add ASAN instrumentation
Learn both valgrind and asan to catch this bug:

  mem_heap_t* heap = mem_heap_create(1024);
  byte* p = reinterpret_cast<byte*>(heap) + sizeof(mem_heap_t);
  *p = 123;

Overflows of the last allocation in a block will be catched too.

mem_heap_create_block(): poison newly allocated memory
2018-03-19 16:18:53 +03:00
Alexander Barkov
f538a64817 MDEV-15005 ASAN: stack-buffer-overflow in my_strnncollsp_simple
cmp_item_sort_string::store_value() did not cache the string returned
from item->val_str(), whose result can point to various private members
such as Item_char_typecast::tmp_value.

- cmp_item_sort_string::store_value() remembered the pointer returned
  from item->val_str() poiting to tmp_value into cmp_item_string::value_res.
- Later, cmp_item_real::store_value() was called, which called
  Item_str_func::val_real(), which called Item_char_typecast::val_str(&tmp)
  using a local stack variable "String tmp". Item_char_typecast::tmp_value
  was overwritten and become a link to "tmp":
  tmp_value.Ptr freed its own buffer and set to point to the buffer
  owned by "tmp".
- On return from Item_str_func::val_real(), "String tmp" was destructed,
  but "tmp_value" still pointed to the buffer owned by "tmp",
  So tmp_value.Ptr became invalid.
- Then cmp_item_sort_string() passed cmp_item_string::value_res to sortcmp().
  At this point, value_res still pointed to an invalid value of
  Item_char_typecast::tmp_value.

Fix:
changing cmp_item_sort_string::store_value() to force copying
to cmp_item_string::value if item->val_str(&value) returned
a different pointer (instead of &value).
2018-03-19 13:07:41 +04:00
Jan Lindström
31e2ab513d MDEV-13549: Galera test failures
Fix test failure on galera_flush_local.
2018-03-19 10:01:40 +02:00
Jan Lindström
f46155a31b MDEV-13549: Galera test failures
Fix test failure on galera_concurrent_ctas
2018-03-19 09:09:02 +02:00
Jan Lindström
e5e83249c1 MDEV-14875: galera_new_cluster crashes mysqld when existing server contains databases
Fortify wsrep_hton so that wsrep calls are not done to NULL-pointers.
2018-03-19 08:48:14 +02:00
Varun Gupta
e3dd9a95e5 MDEV-6736: Valgrind warnings 'Invalid read' in subselect_engine::calc_const_tables with SQ in WHERE and
HAVING, ORDER BY, materialization+semijoin

During cleanup a pointer to the materialised table that was freed was not set to NULL
2018-03-17 10:51:19 +05:30
Varun Gupta
a0c722d853 MDEV-15321:different results when using value of optimizer_use_condition_selectivity=4 and =1
To disallow equality propagation for DATETIME with non-zero YYYYMMDD part we were setting null_value to true.
This caused issues when we were calculating selectivity for a condition as this returned IMPOSSIBLE WHERE.

The issue is resolved by not setting null_value to true for DATETIME with non-zero YYYYMMDD.
2018-03-16 18:35:41 +05:30
Sergey Vojtovich
0a534348c7 MDEV-14265 - RPMLint warning: shared-lib-calls-exit
Eliminated last exit() call from libmysqld.
2018-03-16 13:26:52 +04:00
Marko Mäkelä
7033af9e81 Conditionally define TRX_WSREP_ABORT 2018-03-16 08:38:48 +02:00
Marko Mäkelä
ca40330d1d Fix a deadlock in thd_report_wait_for()
Unlike commit a54abf0175 claimed,
the caller of THD::awake() may actually hold the InnoDB lock_sys->mutex.
That commit introduced a deadlock of threads in the replication slave
when running the test rpl.rpl_parallel_optimistic_nobinlog.

lock_trx_handle_wait(): Expect the callers to acquire and release
lock_sys->mutex and trx->mutex.

innobase_kill_query(): Restore the logic for conditionally acquiring
and releasing the mutexes. THD::awake() can be called from inside
InnoDB while holding one or both mutexes, via thd_report_wait_for() and
via wsrep_innobase_kill_one_trx().
2018-03-16 08:23:56 +02:00
Marko Mäkelä
dbb3960ad8 Follow-up to MDEV-11236/MDEV-14846 debug assertion
ha_innobase::unlock_row(): Use a relaxed version of the
trx_state_eq() debug assertion, because rr_unlock_row()
may be invoked after an error has been already reported
and the transaction has been rolled back.
2018-03-15 19:48:29 +02:00
Marko Mäkelä
723f87e9d3 lock_table_create(), lock_rec_create(): Clean up the WSREP code
By definition, c_lock->trx->lock.wait_lock==c_lock cannot hold.
That is, the owner transaction of a lock cannot be waiting for that
particular lock. It must have been waiting for some other lock.
Remove the dead code related to that. Also, test c_lock for NULLness
only once.
2018-03-15 19:44:24 +02:00
Marko Mäkelä
a54abf0175 innobase_kill_query(): Use lock_trx_handle_wait()
The caller of THD::awake() should never hold any InnoDB mutexes,
so we can always acquire lock_sys->mutex and trx->mutex.
2018-03-15 19:44:24 +02:00
Jan Lindström
4d248974e0
Merge pull request from codership/MDEV-13549-fixes-for-galera_var_slave_threads
MDEV-13549 Fix and re-enable test galera.galera_var_slave_threads
2018-03-15 17:28:08 +02:00
Daniele Sciascia
ba6cf25396 MDEV-13549 Fix and re-enable test galera.galera_var_slave_threads
Two changes were made to the test:

1) Suppress warning "Refusing exit for the last slave thread."
   This warning was already suppressed, but on the wrong node.

2) The test occasionally fails because it expects that the
   number of applier threads changes immediately after
   changing the value of ```variable wsrep_slave_threads```.
   Which is not true. This patch turns snippets like this:

   ```
   SET GLOBAL wsrep_slave_threads = x;
   SELECT COUNT(*) = x FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user';
   ```

   Into proper wait_conditions:

   ```
   SET GLOBAL wsrep_slave_threads = x;
   let $wait_condition = SELECT COUNT(*) = x FROM ...;
   --source include/wait_condition.inc
   ```
2018-03-15 16:03:25 +01:00
Jan Lindström
1bec0c4595
Merge pull request from codership/MDEV-14144
MDEV-14144 Fix for MTR tests complaining "Query didn't return a result set"
2018-03-15 13:58:46 +02:00
Jan Lindström
c7c52ef1e8
Merge branch '10.1' into MDEV-14144 2018-03-15 13:58:14 +02:00
Jan Lindström
de3725a7db
Merge pull request from codership/MDEV-13549-fixes-for-galera_var_max_ws_rows
MDEV-13549 Fix for test galera.galera_var_max_ws_rows
2018-03-15 13:57:31 +02:00
Jan Lindström
59c313c698
Merge branch '10.1' into MDEV-13549-fixes-for-galera_var_max_ws_rows 2018-03-15 13:57:01 +02:00
Jan Lindström
866ddbec25
Merge pull request from codership/MDEV-13549-fixes-for-MW-366
MDEV-13549 Fix and re-enable MTR test galera.MW-366
2018-03-15 13:54:50 +02:00
Jan Lindström
ff172467ec
Merge pull request from codership/MDEV-13549-fixes-for-galera_bf_abort_for_update
MDEV-13549 Fix and re-enable test galera.galera_bf_abort_for_update
2018-03-15 12:55:03 +02:00
Jan Lindström
047abdac3e
Merge pull request from codership/MDEV-13549-fixes-for-MW-286
MDEV-13549 Fix and re-enable test galera.MW-286
2018-03-15 12:52:41 +02:00
Daniele Sciascia
0368e75a55 MDEV-13549 Re-enable tests MW-328A, MW-328B, MW-328C and MW-329
These tests were also subject to error "Wrong usage of mutex
'LOCK_wsrep_thd' and 'LOCK_thd_kill'".
2018-03-15 11:36:36 +01:00
Daniel Black
8b54c31486 MDEV-8743: where O_CLOEXEC is available, use for innodb buf_dump
As this is the only moderately critical fopened for writing file,
create an alternate path to use open and fdopen for non-glibc platforms
that support O_CLOEXEC (BSDs).

Tested on Linux (by modifing the GLIBC defination) to take this
alternate path:

$ cd /proc/23874
$ more fdinfo/71
pos:    0
flags:  02100001
mnt_id: 24
$ ls -la fd/71
l-wx------. 1 dan dan 64 Mar 14 13:30 fd/71 -> /dev/shm/var_auto_i7rl/mysqld.1/data/ib_buffer_pool.incomplete
2018-03-15 12:07:43 +02:00
Alexander Barkov
efb9dec2b9 A 32bit cleanup for MDEV-14452 Precision in INTERVAL xxx DAY_MICROSECOND parsed wrong?
"mtr func_date_add" failed on 32-bit platforms. Removing a wrong case to "long".
Both values[] and log_10_int[] are arrays of "ulonglong", no cast is needed.
2018-03-15 10:23:42 +04:00
Vicențiu Ciorbaru
8152c52e1a Merge remote-tracking branch '10.0' into 10.1 2018-03-15 03:45:28 +02:00
Vladislav Vaintroub
0943b33de3 MDEV-12190 YASSL isn't able to negotiate TLS version correctly
Backport from 10.2
2018-03-14 14:35:27 +00:00
Timo Teräs
782fb1e016 fix ucontext configure check
musl ships the header for other purposes, but makecontext is not
implemented. fix the check to detect if makecontext is implemented
before enabling code using it.
2018-03-14 15:16:03 +04:00
Alexander Barkov
38579cefa9 MDEV-14452 Precision in INTERVAL xxx DAY_MICROSECOND parsed wrong? 2018-03-14 14:46:23 +04:00
Vicențiu Ciorbaru
3d5dff6cae Merge branch '5.5' into 10.0 2018-03-14 12:10:31 +02:00
Daniele Sciascia
9a21fd34af MDEV-13549 Re-enable test galera.galera_bf_abort_for_update
Test passes reliably after applying missing commit from upstream.
2018-03-14 10:27:31 +01:00
Vasil Dimov
fe66f766bb Fix and enable galera.galera_bf_abort_for_update
The test was not deterministic as it would not wait for the second
INSERT to be applied (and thus the victim transaction rolled back).
2018-03-14 10:26:02 +01:00
Jan Lindström
930682c487
Merge pull request from grooverdan/10.0-galera-MDEV-8743-linux-aio-ib_logfile0
MDEV-8743: ib_logfile0 Use O_CLOEXEC so galera SST scripts don't get fd
2018-03-14 09:38:04 +02:00
Daniele Sciascia
9953588ac4 MDEV-13549 Fix and re-enable MTR test galera.MW-366
Test galera.MW-366 is not deterministic and depends on timing assumptions.
The test occasionally fails after checking the number of 'system user'
processes in processlist after changing the value of variable global
wsrep_slave_threads, like this:
```
SET GLOBAL wsrep_slave_threads = x;
--sleep 0.5
SELECT COUNT(*) = x FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user';
```

The problem is that the number of slave threads is internally adjusted
'asynchronously', and it may take some time to spawn/kill new threads,
especially in a heavily loaded system.

This patch removes the '--sleep 0.5' statements from the test and replaces
those with appropriate wait conditions, like this:
```
SET GLOBAL wsrep_slave_threads = x;
let $wait_condition = SLECT COUNT(*) = x FROM ...;
--source include/wait_condition.inc
```
2018-03-13 14:27:44 +01:00
Daniele Sciascia
9ee39d2b9b MDEV-13549 Fix for test galera.galera_var_max_ws_rows
This patch re-enables test galera.galera_var_max_ws_rows.
The test did not work because there were two distinct places where
the server was incrementing member THD::wsrep_affected_rows before
enforcing wsrep_max_ws_rows. Essentially, the test would fail because
every inserted row was counted twice.
The patch removes the extra code.
2018-03-13 11:21:28 +01:00