MySQL NDB Cluster 7.5 Release Notes
MySQL NDB Cluster 7.5.14 is a new release of MySQL NDB Cluster
7.5, based on MySQL Server 5.7 and including features in version
7.5 of the NDB
storage engine, as
well as fixing recently discovered bugs in previous NDB Cluster
releases.
Obtaining MySQL NDB Cluster 7.5. MySQL NDB Cluster 7.5 source code and binaries can be obtained from https://dev.mysql.com/downloads/cluster/.
For an overview of changes made in MySQL NDB Cluster 7.5, see What is New in NDB Cluster 7.5.
This release also incorporates all bug fixes and changes made in previous NDB Cluster releases, as well as all bug fixes and feature changes which were added in mainline MySQL 5.7 through MySQL 5.7.26 (see Changes in MySQL 5.7.26 (2019-04-25, General Availability)).
NDB Disk Data:
NDB
did not validate
MaxNoOfOpenFiles
in
relation to
InitialNoOfOpenFiles
correctly, leading data nodes to fail with an error message that
did not make the nature of the problem clear to users.
(Bug #28943749)
NDB Disk Data:
Repeated execution of
ALTER
TABLESPACE ... ADD DATAFILE
against the same
tablespace caused data nodes to hang and left them, after being
killed manually, unable to restart.
(Bug #22605467)
NDB Cluster APIs:
NDB
now identifies short-lived transactions
not needing the reduction of lock contention provided by
NdbBlob::close()
and no longer
invokes this method in cases (such as when autocommit is
enabled) in which unlocking merely causes extra work and round
trips to be performed prior to committing or aborting the
transaction.
(Bug #29305592)
References: See also: Bug #49190, Bug #11757181.
NDB Cluster APIs:
When the most recently failed operation was released, the
pointer to it held by
NdbTransaction
became invalid
and when accessed led to failure of the NDB API application.
(Bug #29275244)
When a pushed join executing in the DBSPJ
block had to store correlation IDs during query execution,
memory for these was allocated for the lifetime of the entire
query execution, even though these specific correlation IDs are
required only when producing the most recent batch in the result
set. Subsequent batches require additional correlation IDs to be
stored and allocated; thus, if the query took sufficiently long
to complete, this led to exhaustion of query memory (error
20008). Now in such cases, memory is allocated only for the
lifetime of the current result batch, and is freed and made
available for re-use following completion of the batch.
(Bug #29336777)
References: See also: Bug #26995027.
Added DUMP 406
(NdbfsDumpRequests
) to provide
NDB
file system information to global
checkpoint and local checkpoint stall reports in the node logs.
(Bug #28922609)
A race condition between the DBACC
and
DBLQH
kernel blocks occurred when different
operations in a transaction on the same row were concurrently
being prepared and aborted. This could result in
DBTUP
attempting to prepare an operation when
a preceding operation had been aborted, which was unexpected and
could thus lead to undefined behavior including potential data
node failures. To solve this issue, DBACC
and
DBLQH
now check that all dependencies are
still valid before attempting to prepare an operation.
This fix also supersedes a previous one made for a related issue which was originally reported as Bug #28500861.
(Bug #28893633)
The ndbinfo.cpustat
table
reported inaccurate information regarding send threads.
(Bug #28884157)
In some cases, one and sometimes more data nodes underwent an unplanned shutdown while running ndb_restore. This occurred most often, but was not always restircted to, when restoring to a cluster having a different number of data nodes from the cluster on which the original backup had been taken.
The root cause of this issue was exhaustion of the pool of
SafeCounter
objects, used by the
DBDICT
kernel block as part of executing
schema transactions, and taken from a per-block-instance pool
shared with protocols used for NDB
event
setup and subscription processing. The concurrency of event
setup and subscription processing is such that the
SafeCounter
pool can be exhausted; event and
subscription processing can handle pool exhaustion, but schema
transaction processing could not, which could result in the node
shutdown experienced during restoration.
This problem is solved by giving DBDICT
schema transactions an isolated pool of reserved
SafeCounters
which cannot be exhausted by
concurrent NDB
event activity.
(Bug #28595915)
After a commit failed due to an error, mysqld
shut down unexpectedly while trying to get the name of the table
involved. This was due to an issue in the internal function
ndbcluster_print_error()
.
(Bug #28435082)
ndb_restore did not restore autoincrement
values correctly when one or more staging tables were in use. As
part of this fix, we also in such cases block applying of the
SYSTAB_0
backup log, whose content continued
to be applied directly based on the table ID, which could
ovewrite the autoincrement values stored in
SYSTAB_0
for unrelated tables.
(Bug #27917769, Bug #27831990)
References: See also: Bug #27832033.
ndb_restore employed a mechanism for restoring autoincrement values which was not atomic, and thus could yield incorrect autoincrement values being restored when multiple instances of ndb_restore were used in parallel. (Bug #27832033)
References: See also: Bug #27917769, Bug #27831990.
When query memory was exhausted in the DBSPJ
kernel block while storing correlation IDs for deferred
operations, the query was aborted with error status 20000
Query aborted due to out of query memory.
(Bug #26995027)
References: See also: Bug #86537.
MaxBufferedEpochs
is
used on data nodes to avoid excessive buffering of row changes
due to lagging NDB
event API subscribers;
when epoch acknowledgements from one or more subscribers lag by
this number of epochs, an asynchronous disconnection is
triggered, allowing the data node to release the buffer space
used for subscriptions. Since this disconnection is
asynchronous, it may be the case that it has not completed
before additional new epochs are completed on the data node,
resulting in new epochs not being able to seize GCP completion
records, generating warnings such as those shown here:
[ndbd] ERROR -- c_gcp_list.seize() failed... ... [ndbd] WARNING -- ACK wo/ gcp record...
And leading to the following warning:
Disconnecting node %u because it has exceeded MaxBufferedEpochs (100 > 100), epoch ....
This fix performs the following modifications:
Modifies the size of the GCP completion record pool to
ensure that there is always some extra headroom to account
for the asynchronous nature of the disconnect processing
previously described, thus avoiding
c_gcp_list
seize failures.
Modifies the wording of the
MaxBufferedEpochs
warning to avoid the
contradictory phrase “100 > 100”.
(Bug #20344149)
When executing the redo log in debug mode it was possible for a data node to fail when deallocating a row. (Bug #93273, Bug #28955797)
An NDB
table having both a foreign key on
another NDB
table using ON DELETE
CASCADE
and one or more
TEXT
or
BLOB
columns leaked memory.
As part of this fix, ON DELETE CASCADE
is no
longer supported for foreign keys on NDB
tables when the child table contains a column that uses any of
the BLOB
or TEXT
types.
(Bug #89511, Bug #27484882)