row_update_for_mysql(): Remove the wrapper function and
rename the function from row_update_for_mysql_using_upd_graph().
Remove the unused parameter mysql_rec.
This is basically a duplicate or a reincarnation of MDEV-117.
For some reason, the test innodb.mdev-117 started failing in 10.2.
It is uncertain when this test started failing. The test is
nondeterministic, because there is a race condition between the
concurrently executing DELETE IGNORE and DELETE statements.
When a deadlock is reported for DELETE IGNORE, the SQL layer would
call handler::print_error() but then proceed to the next row,
as if no error had happened (which is the purpose of DELETE IGNORE).
So, when it proceeded to handler::ha_rnd_next(), InnoDB would hit an
assertion failure, because the transaction no longer exists, and we
are not executing at the start of a statement.
handler::print_error(): If thd_mark_transaction_to_rollback(thd, true)
was called, clear the ME_JUST_WARNING and ME_JUST_INFO errflags, so
that a note or warning will be promoted to an error if the transaction
was aborted by a storage engine.
The file wait_innodb_all_purged.inc waited for InnoDB purge in a way
that only worked in debug builds. The file wait_all_purged.inc
provides a better mechanism.
If the latest InnoDB redo log checkpoint was stored in the
first checkpoint slot and not the second one, InnoDB would
incorrectly set log_sys->log.lsn to the previous checkpoint.
It is possible that this logic error did not exist before
commit 86927cc712, which
removed traces of multiple InnoDB redo logs, to prepare for
MDEV-12548 (Mariabackup for MariaDB 10.2). In the worst case,
this error could mean that InnoDB unnecessarily fails to
recover from redo log when the last-but-one checkpoint was
overwritten, but the last checkpoint is intact.
recv_find_max_checkpoint(), recv_find_max_checkpoint_0():
Do not overwrite the fields of log_sys->log with the information
of an older checkpoint.
recv_find_max_checkpoint(): Do not return DB_SUCCESS on an error.
recv_recovery_from_checkpoint_start(): Return early if the log is
in a version-tagged format but not in the latest format. (In this case,
the log must be logically empty, and there is nothing to apply.)
Always read full page 0 to determine does tablespace contain
encryption metadata. Tablespaces that are page compressed or
page compressed and encrypted do not compare checksum as
it does not exists. For encrypted tables use checksum
verification written for encrypted tables and normal tables
use normal method.
buf_page_is_checksum_valid_crc32
buf_page_is_checksum_valid_innodb
buf_page_is_checksum_valid_none
Modify Innochecksum logging to file to avoid compilation
warnings.
fil0crypt.cc fil0crypt.h
Modify to be able to use in innochecksum compilation and
move fil_space_verify_crypt_checksum to end of the file.
Add innochecksum logging to file.
univ.i
Add innochecksum strict_verify, log_file and cur_page_num
variables as extern.
page_zip_verify_checksum
Add innochecksum logging to file and remove unnecessary code.
innochecksum.cc
Lot of changes most notable able to read encryption
metadata from page 0 of the tablespace.
Added test case where we corrupt intentionally
FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION (encryption key version)
FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION+4 (post encryption checksum)
FIL_DATA+10 (data)
Problem was introduced with the InnoDB 5.7 merge, the code related to
avoiding extra fsync at the end of commit when binlog is enabled. The
MariaDB method for this was removed, but the replacement MySQL method
based on thd_get_durability_property() is not functional in MariaDB.
This commit reverts the offending parts of the merge and adds a test
case, to fix the problem for InnoDB. But other storage engines are
likely to have a similar problem.
in JVALUE::GetString
modified: storage/connect/json.cpp
modified: storage/connect/json.h
modified: storage/connect/jsonudf.cpp
- Fix a compiler bug happening on some configuration and platforms
in JSNX::CalculateArray
modified: storage/connect/jsonudf.cpp
- Set default Schema as current directory
This fix several bugs like:
Fail to make JSON catalog tables
Fail to use zipped file made by a file LOAD
modified: storage/connect/reldef.cpp
modified: storage/connect/tabjson.cpp
modified: storage/connect/tabjson.h
The debug flag recv_no_log_write prohibits writes of redo log records for
modifying page data. The debug assertion was failing when fil_names_clear()
was writing the informative MLOG_FILE_NAME and MLOG_CHECKPOINT records
which do not modify any data.
log_reserve_and_open(), log_write_low(): Remove the debug assertion.
log_pad_current_log_block(), mtr_write_log(),
mtr_t::Command::prepare_write(): Add the debug assertion.
During InnoDB startup, change buffer merge operations are prohibited
before recv_apply_hashed_log_recs(true), which performs the last phase
of redo log apply. Before this call, ibuf_init_at_db_start() would be
invoked, and it could trigger the debug assertion.
ibuf_init_at_db_start(): Do not declare the mini-transaction as
"inside change buffer", because nothing is being written in the
mini-transaction. The purpose of this function is only to initialize
the memory data structures from the persistent data structures.
This is basically port of WL6045:Improve Innochecksum with some
code refactoring on innochecksum.
Added page0size.h include from 10.2 to make 10.1 vrs 10.2 innochecksum
as identical as possible.
Added page 0 checksum checking and if that fails whole test fails.
The problem was that the introduction of max-thread-mem-used can cause
an allocation error very early, even before mysql_parse() is called.
As mysql_parse() calls thd->reset_for_next_command(), which called
clear_error(), the error number was lost.
Fixed by adding an option to have unique messages for each KILL
signal and change max-thread-mem-used to use this new feature.
This removes a lot of problems with the original approach, where
one could get errors signaled silenty almost any time.
ixed by moving clear_error() from reset_for_next_command() to
do_command(), before any memory allocation for the thread.
Related changes:
- reset_for_next_command() now have an optional parameter if we should
call clear_error() or not. By default it's called, but not anymore from
dispatch_command() which was the original problem.
- Added optional paramater to clear_error() to force calling of
reset_diagnostics_area(). Before clear_error() only called
reset_diagnostics_area() if there was no error, so we normally
called reset_diagnostics_area() twice.
- This change removed several duplicated calls to clear_error()
when starting a query.
- Reset max_mem_used on COM_QUIT, to protect against kill during
quit.
- Use fatal_error() instead of setting is_fatal_error (cleanup)
- Set fatal_error if max_thead_mem_used is signaled.
(Same logic we use for other places where we are out of resources)
#if defined(NEW_MAR)
#define stored_in_db stored_in_db()
#endif // NEW_MAR)
modified: storage/connect/CMakeLists.txt
modified: storage/connect/ha_connect.cc
- Fix compile failure for some configuration of CONNECT.
This by updating the #ifdef's JDBC, MONGO and CMGO_SUPPORT.
modified: storage/connect/ha_connect.cc
modified: storage/connect/tabjson.cpp
modified: storage/connect/tabjson.h
- Fix failure of zip.test (restore code wrongly deleted)
modified: storage/connect/tabjson.cpp
- Make sure thread TBL table structure is correctly initialized.
modified: storage/connect/tabtbl.cpp
- Add new test case in tbl_thread.test
modified: storage/connect/mysql-test/connect/r/tbl_thread.result
modified: storage/connect/mysql-test/connect/t/tbl_thread.test
- Remake a jar file after Java was updated
modified: storage/connect/mysql-test/connect/std_data/Mongo3.jar
It may produce test failures like this because of non-deterministic
cost calculations:
-1 SIMPLE t1 # col1 col1 259 NULL # Using where
+1 SIMPLE t1 # col1 NULL NULL NULL # Using where
This to have automatic closing in case of thrown error.
modified: storage/connect/cmgoconn.cpp
modified: storage/connect/cmgoconn.h
modified: storage/connect/filamzip.cpp
modified: storage/connect/javaconn.cpp
modified: storage/connect/javaconn.h
modified: storage/connect/odbconn.cpp
modified: storage/connect/odbconn.h
modified: storage/connect/plgdbsem.h
modified: storage/connect/plgdbutl.cpp
- Fix INCOL bug when inserting several lines to MONGO tables
modified: storage/connect/cmgoconn.cpp
modified: storage/connect/tabcmg.cpp
modified: storage/connect/tabjmg.cpp
- MONGO_SUPPORT is set for both MongoDB drivers
CMGO_SUPPORT is set only when the C driver is available
modified: storage/connect/CMakeLists.txt
modified: storage/connect/filter.h
modified: storage/connect/filter.h
modified: storage/connect/ha_connect.cc
modified: storage/connect/mongo.cpp
modified: storage/connect/mycat.cc
modified: storage/connect/tabjson.cpp
modified: storage/connect/tabjson.h
- Separate enums JCATINFO and
modified: storage/connect/javaconn.h
modified: storage/connect/jdbconn.cpp
- Fix crash when executing JDBC catfunc=driver
modified: storage/connect/jdbconn.cpp
- Report an error when the Mongo driver if explicitly
specified and not supported.
modified: storage/connect/mongo.cpp
- Fix bug causing catalog JSON tables to fail
modified: storage/connect/tabjson.cpp
- Protect by mutex the Ready variable of the TBLTBM table type
modified: storage/connect/tabtbl.cpp
- Put testing of Thread TBL tables in a separate test
With added case and modified old case that could avoid the test to fail.
modified: storage/connect/mysql-test/connect/r/tbl.result
modified: storage/connect/mysql-test/connect/t/tbl.test
new file: storage/connect/mysql-test/connect/r/tbl_thread.result
new file: storage/connect/mysql-test/connect/t/tbl_thread.test
- jmongo3.test no more exists
deleted: storage/connect/mysql-test/connect/t/jmongo3.test
- Add new tests for the MONGO feature (disabled)
modified: storage/connect/mysql-test/connect/disabled.def
new file: storage/connect/mysql-test/connect/r/json_java_2.result
new file: storage/connect/mysql-test/connect/r/json_java_3.result
new file: storage/connect/mysql-test/connect/r/json_mongo_c.result
new file: storage/connect/mysql-test/connect/r/mongo_c.result
new file: storage/connect/mysql-test/connect/r/mongo_java_2.result
new file: storage/connect/mysql-test/connect/r/mongo_java_3.result
new file: storage/connect/mysql-test/connect/std_data/Mongo2.jar
new file: storage/connect/mysql-test/connect/std_data/cities.json
new file: storage/connect/mysql-test/connect/t/json_java_2.test
new file: storage/connect/mysql-test/connect/t/json_java_3.test
new file: storage/connect/mysql-test/connect/t/json_mongo_c.test
new file: storage/connect/mysql-test/connect/t/mongo.inc
new file: storage/connect/mysql-test/connect/t/mongo_c.test
new file: storage/connect/mysql-test/connect/t/mongo_java_2.test
new file: storage/connect/mysql-test/connect/t/mongo_java_3.test
new file: storage/connect/mysql-test/connect/t/mongo_test.inc