Bug #48528 Unable to use 7.0 ndbapi/mysqld with 6.3 data-nodes
Submitted: 4 Nov 12:08 Modified: 23 Nov 17:02
Reporter: Jonas Oreland
Status: Documenting
Category:Server: Cluster Severity:S3 (Non-critical)
Version:mysql-5.1-telco-7.0 OS:Any
Assigned to: Frazer Clement Target Version:
Triage: Triaged: D5 (Feature request) / R2 (Low) / E3 (Medium)

[4 Nov 12:08] Jonas Oreland
Description:
.

How to repeat:
.

Suggested fix:
.
[12 Nov 18: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 18: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 23:29] Frazer Clement
Proposed patch.

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

[16 Nov 23: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 11: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 12: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 13: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 13: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)