options->app_type was set to mysql_sysvar_t* pointer,
later changed to sys_var* pointer, and even later dereferenced as
sys_var*. But for PLUGIN_VAR_NOSYSVAR variables the pointer wasn't
changed to sys_var*, so mysql_sysvar_t* pointer was dereferenced
(and updated!) as if it was sys_var*.
This caused maria.maria-gis-recovery test failure on x86 (fulltest2).
in file buf0mtflu.cc line 439
Analysis: At shutdown multi-threaded flush sends a exit work
items to all mtflush threads. We wait until the work queue is
empty. However, as we did not hold the mutex, some other thread
could also put work-items to work queue.
Fix: Take mutex before adding exit work items to work queue and
wait until all work-items are really processed. Release
mutex after we have marked that multi-threaded flush is not
anymore active.
Fix test failure on innodb_bug12902967 caused by unnecessary
info output on xtradb/buf/buf0mtflush.cc.
Do not try to enable atomic writes if the file type
is not OS_DATA_FILE. Atomic writes are unnecessary
for log files. If we try to enable atomic writes
to log writes that are stored to media supporting
atomic writes we will end up problems later.
The problem was caused by a merge error (incorrect conflict resolution) when
the MDEV-7257 patch was merged into 10.1.
The incorrect merge put two code blocks in the wrong order. This caused a race
that was seen as sporadic test failures.
(The problem was that binlog end position was updated before running
after_flush hook; this way it was possible for the binlog dump thread to send
a transaction to a slave without requesting semi-sync acknowledgement. Then
when no acknowledgement was received, semisync replication would be disabled
on the master.)
if lf_hash_delete() and lf_hash_search() cannot create a new bucket
because of OOM, they'll start the search from the parent bucket.
As for lf_hash_iterate() - it only ever uses bucket number 0, so if it
cannot create *that* bucket, the hash must surely be empty.
better fix that doesn't make debug-dbug variable to disappear
from mysqld --help output (this fact is used by have_debug.inc)
and shows correctly what dbug value was set on the command line.
When wsrep is enabled, an md5 hash of the entire row is calculated
for tables with no PK. It, however segfaulted as the md5 context
object was not properly constructed.
Fixed by ensuring that the YaSSL's context object gets constructed
explicitly at the specified pre-allocated location (placement)
before its used.
Added a test case.
casts, etc
real changes are:
* remove one retry, it is enough to check for DELETED
after the key is read
* advance 'head' pointer when we see a dummy node to have
shorter retries
log-tc-size is 24K by default. Page size is 64K on PPC64. But log-tc-size
must be at least 3 x page size. This is enforced by TC_LOG_MMAP::open()
with a comment: to guarantee non-empty pool.
This all makes server not startable in default configuration on PPC64.
Autosize log-tc-size, so that it's min value= page size * 3, default
value= page size * 6, block size= page size.
getopt value pointer of "debug" variable was pointing to incorrect address:
&global_system_variables. Runtime statements like SHOW VARIABLES materialize
value from DBUG structures on demand, so they never access getopt value pointer.
But mysqld --help --verbose loaded this value from &global_system_variables.
Remove "debug" variable from mysqld --help --verbose output by setting value
pointer to NULL.
The srid variable was used uninitialised when the field wasn't GIS.
Only problem is that it makes the debugger unhappy. Still added
the initialization.
Implement --semi-sync-master-wait-point=AFTER_SYNC|AFTER_COMMIT.
When AFTER_SYNC, the semi-sync wait will be done earlier, before the storage
engine commit rather than after. This means that a transaction will not be
visible on the master until at least one slave has received it.
Make the binlog dump threads not need to take LOCK_log while sending
binlog events to slave. Instead, a new LOCK_binlog_end_pos is used
just to coordinate tracking the current end-of-log.
This is a pre-requisite for MDEV-162, "Enhanced semisync
replication". It should also help reduce the contention on LOCK_log on
a busy master.
Also does some much-needed refactoring/cleanup of the related code in
the binlog dump thread.
A test clean-up: The "SHOW DATABASES" queries now use "LIKE 'db%'",
to display only the databases created during this test,
thus exclude the system databases, as some of them can be optional
(e.g. performance_schema).