Commit graph

178160 commits

Author SHA1 Message Date
Marko Mäkelä
825b6a354a MDEV-13452 Assertion `!recv_no_log_write' failed at startup
The previous fix (commit dcdc1c6d09)
should have removed the assertion from log_close(), because every
caller that requires this assertion is already asserting that log
writes are allowed. When fil_names_clear() is called, it must be
able to write the MLOG_CHECKPOINT records. The purpose of the debug
variable recv_no_log_write is to prevent the creation of page-level
redo log records, or modifications to persistent data.
2017-08-23 08:13:56 +03:00
Sergei Petrunia
ef8e1a35cc Fix rocksdb.bulk_load test
- Remove the merge error
- Update test results
2017-08-21 16:12:09 +03:00
Sergei Petrunia
4f34ec26fa MDEV-13600: Update test results for rocksdb.bulk_load_rev_cf 2017-08-21 15:26:21 +03:00
Marko Mäkelä
86fc5ece26 MDEV-13559 encryption.innodb-redo-badkey failed in buildbot
Add suppressions for the read and decompression errors.
This may be 10.3 specific and related to MDEV-13536 which increases
purge activity. But it does not hurt to suppress rarely occurring
and plausible error messages for this fault-injection test already in 10.2.
2017-08-18 21:42:33 +03:00
Marko Mäkelä
8a9e9d896e MDEV-13570 Assertion failure !srv_read_only_mode in --innodb-read-only shutdown when buf_resize_thread is active
logs_empty_and_mark_files_at_shutdown(): Skip the debug assertion
when the buf_resize_thread is active.
2017-08-18 21:42:33 +03:00
Marko Mäkelä
8a3e2970ad MDEV-13575 On failure, Mariabackup --backup --safe-slave-backup may forget to START SLAVE SQL_THREAD
backup_release(): New function, refactored from backup_finish().
Release some resources that may have been acquired by backup_startup()
and should be released even after a failed operation.

xtrabackup_backup_low(): Refactored from xtrabackup_backup_func().

xtrabackup_backup_func(): Always call backup_release() after calling
backup_start().
2017-08-18 21:42:33 +03:00
Daniel Bartholomew
72ac85cdda bump the VERSION 2017-08-18 12:51:28 -04:00
Marko Mäkelä
605b835220 MDEV-13754 Memory leak in mariabackup.incremental_backup
The test mariabackup.incremental_backup revealed a memory leak
in have_queries_to_wait_for(). The problem is that
xb_mysql_query() is being invoked with bool use_result=true
but the result is not being freed by mysql_store_result().
There are similar leaks in other functions.

have_queries_to_wait_for(): Invoke mysql_free_result() to
clean up after the mysql_store_result() that was invoked
by xb_mysql_query().

select_incremental_lsn_from_history(): Plug the leak on failure.

kill_long_queries(): Plug the memory leak.
(This function always leaked memory when it was called.)
2017-08-18 10:31:09 +03:00
Marko Mäkelä
74ce0cf148 MDEV-13574 related Mariabackup code cleanup (non-functional change)
have_queries_to_wait_for(), kill_long_queries(): Declare and initialize
variables in one go.
2017-08-18 10:18:26 +03:00
Marko Mäkelä
e9e051d297 Follow-up fix to MDEV-12988 backup fails if innodb_undo_tablespaces>0
The fix broke mariabackup --prepare --incremental.

The restore of an incremental backup starts up (parts of) InnoDB twice.
First, all data files are discovered for applying .delta files. Then,
after the .delta files have been applied, InnoDB will be restarted
more completely, so that the redo log records will be applied via the
buffer pool.

During the first startup, the buffer pool is not initialized, and thus
trx_rseg_get_n_undo_tablespaces() must not be invoked. The apply of
the .delta files will currently assume that the --innodb-undo-tablespaces
option correctly specifies the number of undo tablespace files, just
like --backup does.

The second InnoDB startup of --prepare for applying the redo log will
properly invoke trx_rseg_get_n_undo_tablespaces().

enum srv_operation_mode: Add SRV_OPERATION_RESTORE_DELTA for
distinguishing the apply of .delta files from SRV_OPERATION_RESTORE.

srv_undo_tablespaces_init(): In mariabackup --prepare --incremental,
in the initial SRV_OPERATION_RESTORE_DELTA phase, do not invoke
trx_rseg_get_n_undo_tablespaces() because the buffer pool or the
redo logs are not available. Instead, blindly rely on the parameter
--innodb-undo-tablespaces.
2017-08-18 09:12:04 +03:00
Elena Stepanova
f269915381 Updated list of unstable tests for 10.2.8 2017-08-18 02:51:30 +03:00
Elena Stepanova
bcd5622ebb gcol.gcol_rollback could fail with errors in server log
If previous tests opened system tables, the test could fail because
it crashes the server. Added FLUSH TABLES to avoid it
2017-08-18 02:48:43 +03:00
Vladislav Vaintroub
edf77043ba MDEV-12948 : do not spam error log, if DeviceIoControl(IOCTL_STORAGE_QUERY_PROPERTY)
fails with ERROR_INVALID_FUNCTION

This DeviceIoControl seems to happen on different boxes from time to time,
and there is not much user can do about it.
Instead of error, log a single INFO message, so it does not disturb users
much.
2017-08-17 17:36:39 +00:00
Marko Mäkelä
e6971011c3 MDEV-12988 backup fails if innodb_undo_tablespaces>0
srv_undo_tablespaces_init(): In Mariabackup backup and restore modes,
do initialize the array of undo_tablespace_ids[].
2017-08-17 16:30:37 +03:00
Oleksandr Byelkin
c548fb0667 MDEV-11240: Server crashes in check_view_single_update or Assertion `derived->table' failed in mysql_derived_merge_for_insert
Before "merge" view shoud be inited to maintaing transitive attributes like "multitable".
2017-08-17 11:41:46 +02:00
Sergei Golubchik
cb1e76e4de Merge branch '10.1' into 10.2 2017-08-17 11:38:34 +02:00
Sergei Golubchik
a4885dde4c MDEV-13535 Query on MyISAM table corrupts the table
don't assume that the table always has a primary key,
head->s->primary_key might be MAX_KEY, which won't start keyread.
2017-08-16 18:44:17 +02:00
Sergei Golubchik
1b7e55900a CONNECT: compilation fix
tabtyp was defined under ODBC_SUPPORT, but used
outside of it too (under JDBC_SUPPORT).
2017-08-16 18:17:07 +02:00
Sergei Golubchik
158f96f6e3 CONNECT: fix the test to use tcp not unix socket
(socket connection ignores the port and CONNECT connects to the wrong host)
2017-08-16 18:17:03 +02:00
Sergei Golubchik
678fb208e4 Merge branch 'connect/10.2' into 10.2 2017-08-16 18:16:50 +02:00
Sergei Golubchik
58b56f14a0 cleanup: remove ha_innopart.cc
we'll copy it from 5.7 when we'll need it
2017-08-16 18:14:26 +02:00
Sergei Petrunia
b3a4bc481b MDEV-13513: rocksdb.drop_table fails in buidbot with assertion failure
Apply this patch from upstream:

commit 2c8deddfb67f1cd41ea3d1ac95aa1aa9327e3406
Author: Yoshinori Matsunobu <yoshinorim@users.noreply.github.com>
Date:   Tue Aug 15 16:21:58 2017 -0700

    Set exclusive_manual_compaction = false on manual compactions

    Summary:
    Combining exclusive manual compaction and
    non-exclusive manual compaction may hit rocksdb assertion errors.
    This diff makes all MyRocks internal manual compactions non exclusive.
    Closes https://github.com/facebook/mysql-5.6/pull/682

    Differential Revision: D5633619

    Pulled By: yoshinorim

    fbshipit-source-id: a90786d
2017-08-16 14:36:03 +03:00
Igor Babaev
a28152aafc Fixed the bug mdev-13346.
The bug was caused by a defect of the patch for the bug 11081.
The patch was actually a port of the fix this bug from the mysql
code line. Later a correction of this fix was added to the
mysql code. Here's the comment this correction was provided with:

  Bug#16499751: Opening cursor on SELECT in stored procedure causes segfault
  This is a regression from the fix of bug#14740889.
  The fix started using another set of expressions as the source for
  the temporary table used for the materialized cursor. However,
  JOIN::make_tmp_tables_info() calls setup_copy_fields() which creates
  an Item_copy wrapper object on top of the function being selected.
  The Item_copy objects were not properly handled by create_tmp_table -
  they were simply ignored. This patch creates temporary table fields
  based on the underlying item of the Item_copy objects.

The test case for the bug 13346 was taken from mdev-13380.
2017-08-15 16:20:48 -07:00
Sergei Petrunia
c354cb66b0 MDEV-13515: rocksdb.use_direct_reads_writes fails in buildbot with not found pattern
The test mis-used MTR's "restart the server if it crashed or exited"
feature to try starting MyRocks plugin with invalid arguments.

Changed the test to use the --default-storage-engine=myisam which
allows the server to start when MyRocks fails to start.

This removes the need to "start the server with the arguments which
will caused it to fail to start", and so removes the race conditions
with MTR server restart code and  mysqld.*.expect file.
2017-08-15 16:42:11 +03:00
Marko Mäkelä
5d1c0d0086 MDEV-13331 FK DELETE CASCADE does not honor innodb_lock_wait_timeout
row_ins_check_foreign_constraint(): On timeout,
return DB_LOCK_WAIT_TIMEOUT instead of DB_LOCK_WAIT,
so that the lock wait will be properly terminated.
Also, replace some redundant assignments.

It looks like this bug was introduced in MySQL 5.7.8 by:

    commit a97f6b91227c7e0fc3151cfe5421891e79c12d19
    Author: Annamalai Gurusami <annamalai.gurusami@oracle.com>
    Date:   Tue Jun 9 16:02:31 2015 +0530

        Bug #20953265 INNODB: FAILING ASSERTION: RESULT != FTS_INVALID
2017-08-15 10:51:43 +03:00
Marko Mäkelä
2f342c4507 MDEV-13498 DELETE with CASCADE constraints takes long time / MDEV-13246
MDEV-13498 is a performance regression that was introduced in MariaDB 10.2.2
by commit fec844aca8
which introduced some Galera-specific conditions that were being
evaluated even if the write-set replication was not enabled.

MDEV-13246 Stale rows despite ON DELETE CASCADE constraint
is a correctness regression that was introduced by the same commit.

Especially the subcondition
	!(parent && que_node_get_type(parent) == QUE_NODE_UPDATE)
which is equivalent to
	!parent || que_node_get_type(parent) != QUE_NODE_UPDATE
makes little sense. If parent==NULL, the evaluation would proceed to the
std::find() expression, which would dereference parent. Because no SIGSEGV
was observed related to this, we can conclude that parent!=NULL always
holds. But then, the condition would be equivalent to
	que_node_get_type(parent) != QUE_NODE_UPDATE
which would not make sense either, because the std::find() expression
is actually assuming the opposite when casting parent to upd_node_t*.

It looks like this condition never worked properly, or that
it was never properly tested, or both.

wsrep_must_process_fk(): Helper function to check if FOREIGN KEY
constraints need to be processed. Only evaluate the costly std::find()
expression when write-set replication is enabled.

Also, rely on operator<<(std::ostream&, const id_name_t&) and
operator<<(std::ostream&, const table_name_t&) for pretty-printing
index and table names.

row_upd_sec_index_entry(): Add !wsrep_thd_is_BF() to the condition.
This is applying part of "Galera MW-369 FK fixes"
f37b79c6da
that is described by the following part of the commit comment:
    additionally: skipping wsrep_row_upd_check_foreign_constraint if thd has
    BF, essentially is applier or replaying
    This FK check would be needed only for populating parent row FK keys
    in write set, so no use for appliers
2017-08-15 10:51:43 +03:00
Marko Mäkelä
b4f6b678a6 MDEV-13520 InnoDB attempts UPDATE with DB_TRX_ID=0 if innodb_force_recovery=3
trx_set_rw_mode(): Check the flag high_level_read_only instead
of testing srv_force_recovery (innodb_force_recovery) directly.
There is no need to prevent the creation of read-write transactions
if innodb_force_recovery=3 is used. Yes, in that mode any recovered
incomplete transactions will not be rolled back, but these transactions
will continue to hold locks on the records that they have modified.
If the new read-write transactions hit conflicts with already existing
(possibly recovered) transactions, the lock wait timeout mechanism
will work just fine.
2017-08-15 10:51:42 +03:00
Marko Mäkelä
a5e4365eb9 Fix a test result 2017-08-15 10:51:42 +03:00
Sergei Golubchik
48fe832650 Merge branch '10.0' into 10.1 2017-08-15 09:50:31 +02:00
Sergei Golubchik
c724fcd7a0 MDEV-13525 mtr and mysql-test-run symlinks are not installed anymore
Install mtr and mysql-test-run symlinks in case of the out-of-source
build. This was broken in c872b10022
2017-08-15 09:47:03 +02:00
Sergey Vojtovich
3e20a42bfb MDEV-8579 - Some sysvars in I_S are missing any meaningful help (comment) text
Follow-up to original patch: fixing test cases.
2017-08-15 10:13:57 +04:00
=Ian Gilfillan
f066c89a97 MDEV-8579 Expand system variable documentation 2017-08-15 10:13:57 +04:00
Elena Stepanova
88879b37fc Changes to RocksDB tests after the engine merge 2017-08-14 23:39:35 +03:00
Sergei Petrunia
d24f76e1a8 MDEV-13522: rocksdb.rocksdb_parts failed in buildbot
Make test result stable
2017-08-14 23:12:35 +03:00
Sergei Golubchik
fa7016cec1 un-disable a bunch of funcs_1 tests 2017-08-14 19:45:59 +02:00
Sergei Golubchik
b2af0ddcf9 enable innodb tests for virtual indexed columns (sic!)
collateral changes:
* remove a test from innodb_virtual_basic that is already present in
  gcol_keys_innodb
* set thd->abort_on_warning for inplace alter, just like it's set
  for copy_data_between_tables - to have warnings converted into
  errors identically in all alter algorithms
* don't ignore errors in TABLE::update_virtual_field
2017-08-14 19:45:59 +02:00
Sergei Golubchik
399e14f066 MDEV-13435 Crash when selecting virtual columns generated using JSON functions
don't allocate memory on thd->mem_root in every fix_fields(),
do it once and reuse.
2017-08-14 19:45:59 +02:00
Sergei Golubchik
d924e0b993 MDEV-13375 back_log ignored
doing SYSVAR_AUTOSIZE() because of back_log > max_connections
enabled "autosized" flag, and that made IS_SYSVAR_AUTOSIZE()
true, which triggered the second SYSVAR_AUTOSIZE.

Remove back_log <= max_connections limit, back_log
doesn't *always* have to be smaller than max_connections.
2017-08-14 19:45:59 +02:00
Sergei Golubchik
d07daa3125 MDEV-13313 JSON type alias is insufficiently compatible
make JSON an alias for LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

(same collation that item_jsonfunc.cc is using internally)
2017-08-14 19:45:59 +02:00
Sergei Golubchik
04b288ae47 MDEV-11114 Cannot drop column referenced by CHECK constraint
SQL Standard behavior for DROP COLUMN xxx RESTRICT:
* If a constraint (UNIQUE or CHECK) uses only the dropped column,
  it's automatically dropped too. If it uses many columns - an error.
2017-08-14 19:45:59 +02:00
Sergei Golubchik
28ddc9b3bb small cleanup 2017-08-14 19:45:59 +02:00
Sergei Golubchik
87f39bf824 MDEV-8659 Conflicting declaration is accepted: INT SIGNED ZEROFILL
don't allow arbitrary combinations of SIGNED/UNSIGNED/ZEROFILL
2017-08-14 19:45:59 +02:00
Sergei Golubchik
40eff5e097 cleanup: include/restart_mysqld.inc
let include/restart_mysqld.inc use include/start_mysqld.inc
and include/shutdown_mysqld.inc. Instead of copying their content.
2017-08-14 19:45:59 +02:00
Sergei Golubchik
1b993721ff MDEV-13472 rpl.rpl_semi_sync_wait_point crashes because of thd_destructor_proxy
InnoDB: in slow shutodwn mode do not stop purge threads
as long as some connection threads are running
2017-08-14 19:45:59 +02:00
Sergei Golubchik
023131e395 InnoDB: restore thd->proc_info in innobase_reset_background_thd() 2017-08-14 19:45:59 +02:00
Sergei Golubchik
dd67456af3 InnoDB: disallow fast_shutdown=0 when purge threads have exited 2017-08-14 19:45:58 +02:00
Sergei Golubchik
fc279d7ea2 InnoDB: test case to exploit a purge thread shutdown race condition
execute queries after purge thread has exited, but the connection
thread hasn't

before c720e68f53 it used to crash
2017-08-14 19:45:58 +02:00
Sergei Golubchik
34319403a5 fix a comment 2017-08-14 19:45:58 +02:00
Sergei Golubchik
3ec96c1824 MDEV-13370 Ambiguous behaviour regarding installation of header files
install all server includes under /usr/include/mysql/server/
and C/C includes under /usr/include/mysql/
2017-08-14 19:45:58 +02:00
Sergei Golubchik
c872b10022 don't install same files twice
CMakeLists.txt - merge mistake, apparently

include/CMakeLists.txt - install from CMAKE_CURRENT_BINARY_DIR.
  Only install from CMAKE_CURRENT_SOURCE_DIR, if it's different
  from CMAKE_CURRENT_BINARY_DIR

mysql-test/CMakeLists.txt - INSTALL_MYSQL_TEST() macro installs
  everything, no need to install mtr separately once again

mysql-test/lib/My/SafeProcess/CMakeLists.txt
  MYSQL_ADD_EXECUTABLE includes INSTALL

sql-bench/CMakeLists.txt
  list files explicitly. don't install garbage, don't process 'foo'
  and 'foo.sh' separately, it's only one file to install, not two.
2017-08-14 19:45:58 +02:00