Bug #48528 Unable to use 7.0 ndbapi/mysqld with 6.3 data-nodes
Submitted: 4 Nov 2009 11:08 Modified: 9 Dec 2009 10:26
Reporter: Jonas Oreland Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Cluster: Cluster (NDB) storage engine Severity:S3 (Non-critical)
Version:mysql-5.1-telco-7.0 OS:Any
Assigned to: Frazer Clement CPU Architecture:Any
Triage: Triaged: D5 (Feature request) / R2 (Low) / E3 (Medium)

[4 Nov 2009 11:08] Jonas Oreland
Description:
.

How to repeat:
.

Suggested fix:
.
[12 Nov 2009 17:10] Frazer Clement
Is the requirement that 7.0 API can work with 
    a) 7.0 MGMD and 6.3 NDBD nodes
    b) Both 6.3 / 7.0 MGMD and 6.3 NDBD nodes
 
a) Requires mostly NDBAPI fixes
   API sends short TCKEY/INDX/SCANTAB REQ signals
   Small fix to Event Operation setup
   ...

b) Requires some as-yet-unknown fix to MGMAPI to avoid time out when retrieving config.

I recall some use cases where one of two hosts with both MGMD and MySQLD was upgraded in a single step.  This would require the upgraded 7.0 MySQLD to be able to talk to the existing 6.3 MGMD which currently times out when retrieving config.
[12 Nov 2009 17:33] Jonas Oreland
start with a)
and i'll check if b) also is required...
in fact I think then b) should be separate bug-report
updated title to reflect this
[16 Nov 2009 22:29] Frazer Clement
Proposed patch.

Attachment: bug48528.patch (text/x-patch), 25.78 KiB.

[16 Nov 2009 22:30] Frazer Clement
Patch adds support for 7.0 + NdbApi nodes connecting to a Cluster with :
 - 7.0 MGMD node
 - 1 or more 6.3 API nodes

Limitations :
 - 6.3 MGMD node not supported
   (Could probably be alleviated with further work)
 - 7.0 specific features must not be used until all data nodes are at version 7.0.
   - Backup with Snapshot Start
   - Online add node
   - Online table repartitioning
 - 7.0 MySQLD API nodes cannot perform DDL
   - DDL is enabled when all connected NDBD nodes are at least version 7.0.0
   - Note that 6.3 MySQLD API nodes can continue to perform DDL while the 'Master' node is 
     at version 6.3.  An Ndbd node restart could result in the 'Master' node being at version
     7.0.X + while another Ndbd is at version 6.3.Y.  In this situation, no DDL can be performed
     from any API node as the 'Master' is not at version 6.3.Y, and the cluster contains nodes 
     which are not at version 7.0.X.

Details
 - NdbApi optionally send short TCKEYREQ, TCINDXREQ, SCANTABREQ requests.
   Will send them to Ndbd nodes at version <= 7.0.0, or if forceShortRequests is set.
   forceShortRequests is set by environment variable (NDB_FORCE_SHORT_REQUESTS=Y) or
   internal method : storage/ndb/src/ndbapi/NdbImpl::setForceShortRequests()
 - Some extra handling for Api-received signals modified in 7.0
   GETTABINFOREF
   SUB_START_CONF
 - Added new --forceshortreqs option to NDBT_Testsuite options.
   Added three new testcase invocations with --forceshortreqs, covering PK, unique 
   index ops and index scans. 
 - Added 1 line fix to ha_ndbcluster::alter_table_phase1() to ensure failure starting
   schema transactions is handled correctly.

Testing
 - Using NDB_FORCE_SHORT_REQUESTS, all Ndb testcases pass in 7.0
 - A selection of 7.0 NdbApi tests and manual MySQLD tests pass when 
   connected to a 6.3 Cluster.
[18 Nov 2009 10:06] Frazer Clement
New patch with MTR testcase and daily-basic.txt mods.

Attachment: bug48528-2.patch (text/x-patch), 31.37 KiB.

[18 Nov 2009 11:05] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/90834

3238 Frazer Clement	2009-11-18
      Bug#48528 Unable to use 7.0 ndbapi/mysqld with 6.3 data-nodes
      added:
        mysql-test/suite/ndb/r/ndb_short_sigs.result
        mysql-test/suite/ndb/t/ndb_short_sigs.cnf
        mysql-test/suite/ndb/t/ndb_short_sigs.test
      modified:
        storage/ndb/include/kernel/signaldata/GetTabInfo.hpp
        storage/ndb/include/ndb_version.h.in
        storage/ndb/include/ndbapi/NdbOperation.hpp
        storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp
        storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp
        storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
        storage/ndb/src/ndbapi/NdbImpl.hpp
        storage/ndb/src/ndbapi/NdbOperationExec.cpp
        storage/ndb/src/ndbapi/NdbScanOperation.cpp
        storage/ndb/src/ndbapi/Ndbinit.cpp
        storage/ndb/src/ndbapi/TransporterFacade.hpp
        storage/ndb/src/ndbapi/ndberror.c
        storage/ndb/test/include/NDBT_Test.hpp
        storage/ndb/test/run-test/daily-basic-tests.txt
        storage/ndb/test/src/CMakeLists.txt
        storage/ndb/test/src/Makefile.am
        storage/ndb/test/src/NDBT_Test.cpp
[18 Nov 2009 12:53] Bugs System
Pushed into 5.1.39-ndb-7.0.10 (revid:frazer@mysql.com-20091118110502-9yvuwos7r1ble8k7) (version source revid:frazer@mysql.com-20091118110502-9yvuwos7r1ble8k7) (merge vers: 5.1.39-ndb-7.0.10) (pib:13)
[18 Nov 2009 12:53] Bugs System
Pushed into 5.1.39-ndb-7.1.0 (revid:frazer@mysql.com-20091118125128-z1o7fldjkcl1k86n) (version source revid:frazer@mysql.com-20091118125128-z1o7fldjkcl1k86n) (merge vers: 5.1.39-ndb-7.1.0) (pib:13)
[2 Dec 2009 16:14] Frazer Clement
See bug#49163 fixing interaction of 7.0+ API and 6.3 MGMD.
[9 Dec 2009 10:26] Jon Stephens
Documented in the NDB-6.3.29 and 7.0.10 changelogs as follows:

        Previously, it was a requirement for online upgrades that MySQL 
        Cluster binaries be updated in the following order: all management 
        nodes, then all data nodes, then all API nodes. It is now possible, 
        as part of an online upgrade, to update API node binaries before 
        updating management server or data node binaries. See "Performing 
        a Rolling Restart of a MySQL Cluster" for important additional 
        information before attempting to use this new "order of node 
        updates" functionality.

        [6.3.29 version:] This enhanced functionality is supported for 
        online upgrades to MySQL Cluster NDB 7.0 when the NDB engine 
        version is 7.0.10 or later.

        [7.0.10 version:] This enhanced functionality is supported for 
        online upgrades from MySQL Cluster NDB 6.3 when the NDB engine 
        version is 6.3.29 or later.

Also updated "Performing a Rolling Restart of a MySQL Cluster" section of Manual with additional info, including limitations. (Will appear at http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-rolling-restart.html)

Also added "new feature" item to NDB-6.3 and 7.0 Roadmap sections.