Bug #40679 Do not allow connection to MySQLD while NDB tables are read only (Global Lock)
Submitted: 12 Nov 2008 21:30 Modified: 28 Oct 2009 19:22
Reporter: Jonathan Miller Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Cluster: Cluster (NDB) storage engine Severity:S4 (Feature request)
Version:mysql-5.1-telco-7.0 OS:Linux
Assigned to: Frazer Clement CPU Architecture:Any

[12 Nov 2008 21:30] Jonathan Miller
Description:
Currently when a mysqld is initial setting up it does a global meta data read only lock. 

This can cause other processes such as "reset slave" to fail.

In addition, other mysqlds are in line waiting for the current mysqld to release before they can issue a lock and initialize.

Moreover, if there are many tables, it can cause for an extended lock time and user applications that do not check for this lock can and will fail if connecting to a mysqld that currently has tables in a read only mode.   

How to repeat:
N/A

Suggested fix:
[Note] NDB Binlog: Ndb tables initially read only.
[Note] NDB Binlog: ndb tables writable

Refuse connection until all global locks have been removed.

i.e. test to see if there is any global locks by any mysqld, if true, then no connections are allowed.

Always open for better suggestions :-)
[22 Oct 2009 14:05] Jonas Oreland
This is being fixed as part of bug#46955
[27 Oct 2009 10:48] Frazer Clement
Duplicate of bug#46955
[28 Oct 2009 12:35] Jon Stephens
Closed as duplicate per developer comments. See BUG#46955.
[28 Oct 2009 12:51] Jonathan Miller
BUG#40679 can not be a duplicate of BUG#46955 as it was the original report.

BUG#40679 may not have been fixed until BUG#46955, but nonetheless it was still the original report and therefore can not be a duplicate.

In light of this, changing status to closed. 

/Jeb
[28 Oct 2009 17:02] Jon Stephens
This bug is a duplicate of BUG#46955.

Setting this to Documenting so the right bug will be listed as primary in the changelog.
[28 Oct 2009 19:22] Jon Stephens
Documented bugfic in the NDB-6.2.19, 6.3.28, and 7.0.9 changelogs, as follows:

        When starting a cluster with a great many tables, it was
        possible for mysqld processes to time out while waiting for
        another mysqld to finish connecting. (Because an SQL node
        establishes a global read lock on all NDB tables while it
        connects to the cluster, other SQL nodes still waiting to
        connect cannot do so until this lock is released.)

Closed.
[29 Oct 2009 11:34] Jon Stephens
Corrected changelog entry (per email discussion with Frazer), which now reads as follows:

        When starting a cluster with a great many tables, it was
        possible for MySQL client connections as well as the slave SQL
        thread to issue DML statements against MySQL Cluster tables
        before mysqld had finished connecting to the cluster and making
        all tables writeable. This resulted in Table ... is read only
        errors for clients and the Slave SQL thread.

        This issue is fixed by introducing the --ndb-wait-setup option
        for the MySQL server. This provides a configurable maximum
        maximum amount of time that mysqld waits for all cluster tables
        to become writeable, before allowing clients or the slave SQL
        thread to connect.

Also documented new mysqld option per SOP.

(See also BUG#48402, which was uncovered while documenting new option.)