List:Commits« Previous MessageNext Message »
From:Ole John Aske Date:February 22 2012 2:04pm
Subject:bzr push into mysql-5.1-telco-7.0-spj-scan-vs-scan branch
(ole.john.aske:3587 to 3588)
View as plain text  
 3588 Ole John Aske	2012-02-22
      Fix for handling (partially) failed SPJ queries:
      
      Inspired by Maitrayis error injection, testing and patches it has
      become clear that:
      
        - We have to distinquish between 'soft' and 'hard' errors
          in our error handling.
      
        - 'Soft' errors (like 'row not found') should be signaled to
           API, but execution is allowed to continue.
      
        - 'Hard' errors should cause execution to ::abort(), and the Request
           entering ABORTING state.
      
        - When in ABORTING state, no further TreeNode execution should
          be started.
      
        - API should give up 'outstanding' counting when a hard error is
          received. Further signals will not be expected, if any arrives
          they should be silently ignored.
      
       These issues are addressed in this patch.
      
       Added the following error injection test cases:
        - Set invalid table version in LQHKEYREQ such that rewritten
          execLQHKEYREF is now tested.
       
        - Simulate that ::lookup_send() determines the destination 
          LQH-node to not being 'alive', and thus immediately
          returns NodeFailure (error 20016)
      
        - Simulate 'OutOfQueryMemory' in lookup_parent_row(). 

    modified:
      storage/ndb/include/ndb_version.h.in
      storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp
      storage/ndb/src/ndbapi/NdbQueryOperation.cpp
      storage/ndb/src/ndbapi/Ndbif.cpp
      storage/ndb/test/ndbapi/testSpj.cpp
 3587 Ole John Aske	2012-02-22 [merge]
      Merge from mysql-5.1-telco-7.0 into spj-SS branch

    removed:
      include/my_handler.h
      mysql-test/suite/bugs/
      mysql-test/suite/bugs/combinations
      mysql-test/suite/bugs/data/
      mysql-test/suite/bugs/data/rpl_bug12691.dat
      mysql-test/suite/bugs/r/
      mysql-test/suite/bugs/r/rpl_bug12691.result
      mysql-test/suite/bugs/r/rpl_bug31582.result
      mysql-test/suite/bugs/r/rpl_bug31583.result
      mysql-test/suite/bugs/r/rpl_bug33029.result
      mysql-test/suite/bugs/r/rpl_bug38205.result
      mysql-test/suite/bugs/t/
      mysql-test/suite/bugs/t/rpl_bug12691.test
      mysql-test/suite/bugs/t/rpl_bug31582.test
      mysql-test/suite/bugs/t/rpl_bug31583.test
      mysql-test/suite/bugs/t/rpl_bug33029.test
      mysql-test/suite/bugs/t/rpl_bug38205.test
      mysys/my_gethostbyname.c
      mysys/my_handler.c
      mysys/my_port.c
      storage/ndb/src/external/
      storage/ndb/src/external/WIN32.x86/
      storage/ndb/src/external/WIN32.x86/sci/
      storage/ndb/src/external/WIN32.x86/sci/lib/
      storage/ndb/src/external/WIN32.x86/sci/lib/SISCI_LIBRARY_WIN32.TXT
      storage/ndb/src/external/WIN32.x86/sci/lib/scilib.lib
      storage/ndb/src/external/WIN32.x86/sci/lib/scilib_md.lib
      storage/ndb/src/external/WIN32.x86/sci/lib/scilib_mt.lib
      storage/ndb/src/external/WIN32.x86/sci/lib/sisci_api.lib
      storage/ndb/src/external/WIN32.x86/sci/lib/sisci_api_md.lib
      storage/ndb/src/external/WIN32.x86/sci/lib/sisci_api_mt.lib
      storage/ndb/test/odbc/
      storage/ndb/test/odbc/SQL99_test/
      storage/ndb/test/odbc/SQL99_test/Makefile
      storage/ndb/test/odbc/SQL99_test/SQL99_test.cpp
      storage/ndb/test/odbc/SQL99_test/SQL99_test.h
      storage/ndb/test/odbc/client/
      storage/ndb/test/odbc/client/Makefile
      storage/ndb/test/odbc/client/NDBT_ALLOCHANDLE.cpp
      storage/ndb/test/odbc/client/NDBT_ALLOCHANDLE_HDBC.cpp
      storage/ndb/test/odbc/client/NDBT_SQLConnect.cpp
      storage/ndb/test/odbc/client/NDBT_SQLPrepare.cpp
      storage/ndb/test/odbc/client/SQLAllocEnvTest.cpp
      storage/ndb/test/odbc/client/SQLAllocHandleTest.cpp
      storage/ndb/test/odbc/client/SQLAllocHandleTest_bf.cpp
      storage/ndb/test/odbc/client/SQLBindColTest.cpp
      storage/ndb/test/odbc/client/SQLBindParameterTest.cpp
      storage/ndb/test/odbc/client/SQLCancelTest.cpp
      storage/ndb/test/odbc/client/SQLCloseCursorTest.cpp
      storage/ndb/test/odbc/client/SQLColAttributeTest.cpp
      storage/ndb/test/odbc/client/SQLColAttributeTest1.cpp
      storage/ndb/test/odbc/client/SQLColAttributeTest2.cpp
      storage/ndb/test/odbc/client/SQLColAttributeTest3.cpp
      storage/ndb/test/odbc/client/SQLConnectTest.cpp
      storage/ndb/test/odbc/client/SQLCopyDescTest.cpp
      storage/ndb/test/odbc/client/SQLDescribeColTest.cpp
      storage/ndb/test/odbc/client/SQLDisconnectTest.cpp
      storage/ndb/test/odbc/client/SQLDriverConnectTest.cpp
      storage/ndb/test/odbc/client/SQLEndTranTest.cpp
      storage/ndb/test/odbc/client/SQLErrorTest.cpp
      storage/ndb/test/odbc/client/SQLExecDirectTest.cpp
      storage/ndb/test/odbc/client/SQLExecuteTest.cpp
      storage/ndb/test/odbc/client/SQLFetchScrollTest.cpp
      storage/ndb/test/odbc/client/SQLFetchTest.cpp
      storage/ndb/test/odbc/client/SQLFreeHandleTest.cpp
      storage/ndb/test/odbc/client/SQLFreeStmtTest.cpp
      storage/ndb/test/odbc/client/SQLGetConnectAttrTest.cpp
      storage/ndb/test/odbc/client/SQLGetCursorNameTest.cpp
      storage/ndb/test/odbc/client/SQLGetDataTest.cpp
      storage/ndb/test/odbc/client/SQLGetDescFieldTest.cpp
      storage/ndb/test/odbc/client/SQLGetDescRecTest.cpp
      storage/ndb/test/odbc/client/SQLGetDiagFieldTest.cpp
      storage/ndb/test/odbc/client/SQLGetDiagRecSimpleTest.cpp
      storage/ndb/test/odbc/client/SQLGetDiagRecTest.cpp
      storage/ndb/test/odbc/client/SQLGetEnvAttrTest.cpp
      storage/ndb/test/odbc/client/SQLGetFunctionsTest.cpp
      storage/ndb/test/odbc/client/SQLGetInfoTest.cpp
      storage/ndb/test/odbc/client/SQLGetStmtAttrTest.cpp
      storage/ndb/test/odbc/client/SQLGetTypeInfoTest.cpp
      storage/ndb/test/odbc/client/SQLMoreResultsTest.cpp
      storage/ndb/test/odbc/client/SQLNumResultColsTest.cpp
      storage/ndb/test/odbc/client/SQLParamDataTest.cpp
      storage/ndb/test/odbc/client/SQLPrepareTest.cpp
      storage/ndb/test/odbc/client/SQLPutDataTest.cpp
      storage/ndb/test/odbc/client/SQLRowCountTest.cpp
      storage/ndb/test/odbc/client/SQLSetConnectAttrTest.cpp
      storage/ndb/test/odbc/client/SQLSetCursorNameTest.cpp
      storage/ndb/test/odbc/client/SQLSetDescFieldTest.cpp
      storage/ndb/test/odbc/client/SQLSetDescRecTest.cpp
      storage/ndb/test/odbc/client/SQLSetEnvAttrTest.cpp
      storage/ndb/test/odbc/client/SQLSetStmtAttrTest.cpp
      storage/ndb/test/odbc/client/SQLTablesTest.cpp
      storage/ndb/test/odbc/client/SQLTransactTest.cpp
      storage/ndb/test/odbc/client/common.hpp
      storage/ndb/test/odbc/client/main.cpp
      storage/ndb/test/odbc/dm-iodbc/
      storage/ndb/test/odbc/dm-iodbc/Makefile
      storage/ndb/test/odbc/dm-unixodbc/
      storage/ndb/test/odbc/dm-unixodbc/Makefile
      storage/ndb/test/odbc/driver/
      storage/ndb/test/odbc/driver/Makefile
      storage/ndb/test/odbc/driver/testOdbcDriver.cpp
      storage/ndb/test/odbc/test_compiler/
      storage/ndb/test/odbc/test_compiler/Makefile
      storage/ndb/test/odbc/test_compiler/test_compiler.cpp
    added:
      cmd-line-utils/libedit/chartype.c
      cmd-line-utils/libedit/chartype.h
      cmd-line-utils/libedit/eln.c
      cmd-line-utils/libedit/historyn.c
      cmd-line-utils/libedit/np/wcsdup.c
      cmd-line-utils/libedit/tokenizern.c
      include/my_compare.h
      include/welcome_copyright_notice.h
      mysql-test/include/have_federated_plugin.inc
      mysql-test/include/not_crashrep.inc
      mysql-test/r/archive_debug.result
      mysql-test/r/func_encrypt_ucs2.result
      mysql-test/r/implicit_char_to_num_conversion.result
      mysql-test/r/secure_file_priv_win.result
      mysql-test/r/ssl_cipher.result
      mysql-test/suite/binlog/r/binlog_reset_master.result
      mysql-test/suite/binlog/t/binlog_reset_master.test
      mysql-test/suite/federated/federated_plugin-master.opt
      mysql-test/suite/federated/federated_plugin.result
      mysql-test/suite/federated/federated_plugin.test
      mysql-test/suite/innodb/r/innodb_bug12661768.result
      mysql-test/suite/innodb/r/innodb_bug59410.result
      mysql-test/suite/innodb/r/innodb_bug59641.result
      mysql-test/suite/innodb/r/innodb_bug60049.result
      mysql-test/suite/innodb/r/innodb_replace.result
      mysql-test/suite/innodb/t/innodb_bug12661768.test
      mysql-test/suite/innodb/t/innodb_bug59410.test
      mysql-test/suite/innodb/t/innodb_bug59641.test
      mysql-test/suite/innodb/t/innodb_bug60049-master.opt
      mysql-test/suite/innodb/t/innodb_bug60049.test
      mysql-test/suite/innodb/t/innodb_replace.test
      mysql-test/suite/innodb_plugin/r/innodb_bug59307.result
      mysql-test/suite/innodb_plugin/r/innodb_bug59410.result
      mysql-test/suite/innodb_plugin/r/innodb_bug59641.result
      mysql-test/suite/innodb_plugin/r/innodb_bug60049.result
      mysql-test/suite/innodb_plugin/r/innodb_cmp_drop_table.result
      mysql-test/suite/innodb_plugin/r/innodb_misc1.result
      mysql-test/suite/innodb_plugin/r/innodb_replace.result
      mysql-test/suite/innodb_plugin/t/innodb_bug47167-master.opt
      mysql-test/suite/innodb_plugin/t/innodb_bug59307.test
      mysql-test/suite/innodb_plugin/t/innodb_bug59410.test
      mysql-test/suite/innodb_plugin/t/innodb_bug59641.test
      mysql-test/suite/innodb_plugin/t/innodb_bug60049-master.opt
      mysql-test/suite/innodb_plugin/t/innodb_bug60049.test
      mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table-master.opt
      mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table.test
      mysql-test/suite/innodb_plugin/t/innodb_file_format-master.opt
      mysql-test/suite/innodb_plugin/t/innodb_misc1-master.opt
      mysql-test/suite/innodb_plugin/t/innodb_misc1.test
      mysql-test/suite/innodb_plugin/t/innodb_replace.test
      mysql-test/suite/ndb/r/ndb_bug13563280.result
      mysql-test/suite/ndb/r/ndb_index_stat_restart.result
      mysql-test/suite/ndb/t/ndb_bug13563280.test
      mysql-test/suite/ndb/t/ndb_index_stat_restart.test
      mysql-test/suite/ndb_big/bug13637411-master.opt
      mysql-test/suite/ndb_big/bug13637411.cnf
      mysql-test/suite/ndb_big/bug13637411.test
      mysql-test/suite/ndb_rpl/r/ndb_rpl_bug_13440282.result
      mysql-test/suite/ndb_rpl/r/ndb_rpl_ddl_open_trans.result
      mysql-test/suite/ndb_rpl/t/ndb_rpl_bug_13440282.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_ddl_open_trans.test
      mysql-test/suite/ndb_rpl/t/show_mysqld_warnings.inc
      mysql-test/suite/rpl/r/rpl_row_corruption.result
      mysql-test/suite/rpl/t/rpl_row_corruption-slave.opt
      mysql-test/suite/rpl/t/rpl_row_corruption.test
      mysql-test/t/archive_debug.test
      mysql-test/t/func_encrypt_ucs2.test
      mysql-test/t/implicit_char_to_num_conversion.test
      mysql-test/t/secure_file_priv_win-master.opt
      mysql-test/t/secure_file_priv_win.test
      mysql-test/t/ssl_cipher-master.opt
      mysql-test/t/ssl_cipher.test
      mysys/my_compare.c
      sql/ndb_conflict.cc
      sql/ndb_conflict.h
      sql/ndb_repl_tab.cc
      sql/ndb_repl_tab.h
      sql/ndb_table_guard.h
      sql/signal_handler.cc
      storage/ndb/src/kernel/blocks/trpman.cpp
      storage/ndb/src/kernel/blocks/trpman.hpp
      storage/ndb/src/kernel/vm/CountingPool.cpp
      storage/ndb/src/kernel/vm/CountingPool.hpp
      storage/ndb/src/kernel/vm/test_context.cpp
      storage/ndb/src/kernel/vm/test_context.hpp
      storage/ndb/test/run-test/conf-tyr13.cnf
      win/build-vs10.bat
      win/build-vs10_x64.bat
    renamed:
      cmd-line-utils/libedit/el_term.h => cmd-line-utils/libedit/el_terminal.h
      cmd-line-utils/libedit/key.c => cmd-line-utils/libedit/keymacro.c
      cmd-line-utils/libedit/key.h => cmd-line-utils/libedit/keymacro.h
      cmd-line-utils/libedit/term.c => cmd-line-utils/libedit/terminal.c
      mysql-test/r/partition_not_embedded.result => mysql-test/r/partition_myisam.result
      mysql-test/suite/bugs/r/rpl_bug23533.result => mysql-test/suite/binlog/r/binlog_bug23533.result
      mysql-test/suite/bugs/r/rpl_bug36391.result => mysql-test/suite/binlog/r/binlog_bug36391.result
      mysql-test/suite/bugs/r/rpl_bug37426.result => mysql-test/suite/rpl/r/rpl_bug37426.result
      mysql-test/suite/bugs/t/rpl_bug23533.test => mysql-test/suite/binlog/t/binlog_bug23533.test
      mysql-test/suite/bugs/t/rpl_bug36391-master.opt => mysql-test/suite/binlog/t/binlog_bug36391-master.opt
      mysql-test/suite/bugs/t/rpl_bug36391.test => mysql-test/suite/binlog/t/binlog_bug36391.test
      mysql-test/suite/bugs/t/rpl_bug37426.test => mysql-test/suite/rpl/t/rpl_bug37426.test
      mysql-test/suite/ndb_rpl/r/ndb_rpl_conflict.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_conflict_basic.result
      mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_basic.test
      mysql-test/t/partition_not_embedded.test => mysql-test/t/partition_myisam.test
    modified:
      .bzrignore
      CMakeLists.txt
      README
      client/Makefile.am
      client/client_priv.h
      client/mysql.cc
      client/mysql_upgrade.c
      client/mysqladmin.cc
      client/mysqlbinlog.cc
      client/mysqlcheck.c
      client/mysqldump.c
      client/mysqlimport.c
      client/mysqlshow.c
      client/mysqlslap.c
      client/mysqltest.cc
      client/readline.cc
      client/sql_string.cc
      cmd-line-utils/libedit/Makefile.am
      cmd-line-utils/libedit/README
      cmd-line-utils/libedit/chared.c
      cmd-line-utils/libedit/chared.h
      cmd-line-utils/libedit/common.c
      cmd-line-utils/libedit/config.h
      cmd-line-utils/libedit/el.c
      cmd-line-utils/libedit/el.h
      cmd-line-utils/libedit/emacs.c
      cmd-line-utils/libedit/filecomplete.c
      cmd-line-utils/libedit/filecomplete.h
      cmd-line-utils/libedit/hist.c
      cmd-line-utils/libedit/hist.h
      cmd-line-utils/libedit/histedit.h
      cmd-line-utils/libedit/history.c
      cmd-line-utils/libedit/makelist.sh
      cmd-line-utils/libedit/map.c
      cmd-line-utils/libedit/map.h
      cmd-line-utils/libedit/np/strlcpy.c
      cmd-line-utils/libedit/np/unvis.c
      cmd-line-utils/libedit/np/vis.c
      cmd-line-utils/libedit/np/vis.h
      cmd-line-utils/libedit/parse.c
      cmd-line-utils/libedit/parse.h
      cmd-line-utils/libedit/prompt.c
      cmd-line-utils/libedit/prompt.h
      cmd-line-utils/libedit/read.c
      cmd-line-utils/libedit/read.h
      cmd-line-utils/libedit/readline.c
      cmd-line-utils/libedit/readline/readline.h
      cmd-line-utils/libedit/refresh.c
      cmd-line-utils/libedit/refresh.h
      cmd-line-utils/libedit/search.c
      cmd-line-utils/libedit/search.h
      cmd-line-utils/libedit/sig.c
      cmd-line-utils/libedit/sig.h
      cmd-line-utils/libedit/sys.h
      cmd-line-utils/libedit/tokenizer.c
      cmd-line-utils/libedit/tty.c
      cmd-line-utils/libedit/tty.h
      cmd-line-utils/libedit/vi.c
      configure.in
      extra/innochecksum.c
      extra/perror.c
      extra/replace.c
      extra/yassl/src/yassl_error.cpp
      extra/yassl/src/yassl_int.cpp
      include/Makefile.am
      include/decimal.h
      include/heap.h
      include/m_string.h
      include/my_bit.h
      include/my_bitmap.h
      include/my_getopt.h
      include/my_global.h
      include/my_stacktrace.h
      include/myisam.h
      libmysql/CMakeLists.txt
      libmysql/Makefile.shared
      libmysqld/CMakeLists.txt
      libmysqld/Makefile.am
      libmysqld/lib_sql.cc
      mysql-test/Makefile.am
      mysql-test/collections/default.experimental
      mysql-test/extra/binlog_tests/binlog.test
      mysql-test/extra/rpl_tests/rpl_conflicts.test
      mysql-test/extra/rpl_tests/rpl_extra_col_master.test
      mysql-test/extra/rpl_tests/rpl_extra_col_slave.test
      mysql-test/extra/rpl_tests/rpl_loaddata.test
      mysql-test/extra/rpl_tests/rpl_record_compare.test
      mysql-test/extra/rpl_tests/rpl_row_basic.test
      mysql-test/extra/rpl_tests/rpl_row_tabledefs.test
      mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test
      mysql-test/extra/rpl_tests/type_conversions.test
      mysql-test/include/mix1.inc
      mysql-test/include/mtr_check.sql
      mysql-test/include/mtr_warnings.sql
      mysql-test/include/wait_until_disconnected.inc
      mysql-test/lib/My/ConfigFactory.pm
      mysql-test/lib/My/Find.pm
      mysql-test/lib/My/SafeProcess/safe_process.pl
      mysql-test/lib/mtr_cases.pm
      mysql-test/lib/mtr_report.pm
      mysql-test/mysql-test-run.pl
      mysql-test/r/alter_table.result
      mysql-test/r/analyse.result
      mysql-test/r/archive.result
      mysql-test/r/cast.result
      mysql-test/r/ctype_cp1250_ch.result
      mysql-test/r/ctype_cp1251.result
      mysql-test/r/ctype_cp932_binlog_stm.result
      mysql-test/r/ctype_eucjpms.result*
      mysql-test/r/ctype_sjis.result
      mysql-test/r/ctype_ucs.result
      mysql-test/r/ddl_i18n_koi8r.result
      mysql-test/r/ddl_i18n_utf8.result
      mysql-test/r/error_simulation.result
      mysql-test/r/events_1.result
      mysql-test/r/events_bugs.result
      mysql-test/r/events_restart.result
      mysql-test/r/explain.result
      mysql-test/r/func_group.result
      mysql-test/r/func_in.result
      mysql-test/r/func_math.result
      mysql-test/r/func_time.result
      mysql-test/r/gis-rtree.result
      mysql-test/r/gis.result
      mysql-test/r/group_by.result
      mysql-test/r/having.result
      mysql-test/r/heap.result
      mysql-test/r/insert_select.result
      mysql-test/r/key_cache.result
      mysql-test/r/loaddata.result
      mysql-test/r/lock_sync.result
      mysql-test/r/lowercase_table2.result
      mysql-test/r/merge.result
      mysql-test/r/myisam.result
      mysql-test/r/myisampack.result
      mysql-test/r/mysqlbinlog.result
      mysql-test/r/mysqlbinlog_base64.result
      mysql-test/r/mysqlcheck.result
      mysql-test/r/mysqldump.result
      mysql-test/r/mysqlslap.result
      mysql-test/r/mysqltest.result
      mysql-test/r/order_by.result
      mysql-test/r/packet.result
      mysql-test/r/partition.result
      mysql-test/r/partition_innodb_plugin.result
      mysql-test/r/select_safe.result
      mysql-test/r/shm.result
      mysql-test/r/show_check.result
      mysql-test/r/sp-destruct.result
      mysql-test/r/sp-error.result
      mysql-test/r/sp-security.result
      mysql-test/r/sp.result
      mysql-test/r/sp_sync.result
      mysql-test/r/sp_trans.result
      mysql-test/r/subselect.result
      mysql-test/r/trigger-compat.result
      mysql-test/r/trigger.result
      mysql-test/r/type_float.result
      mysql-test/r/type_newdecimal.result
      mysql-test/r/type_timestamp.result
      mysql-test/r/union.result
      mysql-test/r/variables-notembedded.result
      mysql-test/r/variables.result
      mysql-test/r/view.result
      mysql-test/r/view_grant.result
      mysql-test/r/xml.result
      mysql-test/suite/binlog/r/binlog_base64_flag.result
      mysql-test/suite/binlog/r/binlog_row_binlog.result
      mysql-test/suite/binlog/r/binlog_stm_binlog.result
      mysql-test/suite/binlog/t/binlog_base64_flag.test
      mysql-test/suite/binlog/t/binlog_index.test
      mysql-test/suite/binlog/t/disabled.def
      mysql-test/suite/engines/funcs/r/de_calendar_range.result
      mysql-test/suite/engines/funcs/r/in_calendar_2_unique_constraints_duplicate_update.result
      mysql-test/suite/engines/funcs/r/in_calendar_pk_constraint_duplicate_update.result
      mysql-test/suite/engines/funcs/r/in_calendar_pk_constraint_error.result
      mysql-test/suite/engines/funcs/r/in_calendar_pk_constraint_ignore.result
      mysql-test/suite/engines/funcs/r/in_calendar_unique_constraint_duplicate_update.result
      mysql-test/suite/engines/funcs/r/in_calendar_unique_constraint_error.result
      mysql-test/suite/engines/funcs/r/in_calendar_unique_constraint_ignore.result
      mysql-test/suite/engines/funcs/r/in_multicolumn_calendar_pk_constraint_duplicate_update.result
      mysql-test/suite/engines/funcs/r/in_multicolumn_calendar_pk_constraint_error.result
      mysql-test/suite/engines/funcs/r/in_multicolumn_calendar_pk_constraint_ignore.result
      mysql-test/suite/engines/funcs/r/in_multicolumn_calendar_unique_constraint_duplicate_update.result
      mysql-test/suite/engines/funcs/r/in_multicolumn_calendar_unique_constraint_error.result
      mysql-test/suite/engines/funcs/r/in_multicolumn_calendar_unique_constraint_ignore.result
      mysql-test/suite/engines/funcs/r/in_multicolumn_number_pk_constraint_duplicate_update.result
      mysql-test/suite/engines/funcs/r/up_calendar_range.result
      mysql-test/suite/engines/funcs/t/de_calendar_range.test
      mysql-test/suite/engines/funcs/t/in_calendar_2_unique_constraints_duplicate_update.test
      mysql-test/suite/engines/funcs/t/in_calendar_pk_constraint_duplicate_update.test
      mysql-test/suite/engines/funcs/t/in_calendar_pk_constraint_error.test
      mysql-test/suite/engines/funcs/t/in_calendar_pk_constraint_ignore.test
      mysql-test/suite/engines/funcs/t/in_calendar_unique_constraint_duplicate_update.test
      mysql-test/suite/engines/funcs/t/in_calendar_unique_constraint_error.test
      mysql-test/suite/engines/funcs/t/in_calendar_unique_constraint_ignore.test
      mysql-test/suite/engines/funcs/t/in_multicolumn_calendar_pk_constraint_duplicate_update.test
      mysql-test/suite/engines/funcs/t/in_multicolumn_calendar_pk_constraint_error.test
      mysql-test/suite/engines/funcs/t/in_multicolumn_calendar_pk_constraint_ignore.test
      mysql-test/suite/engines/funcs/t/in_multicolumn_calendar_unique_constraint_duplicate_update.test
      mysql-test/suite/engines/funcs/t/in_multicolumn_calendar_unique_constraint_error.test
      mysql-test/suite/engines/funcs/t/in_multicolumn_calendar_unique_constraint_ignore.test
      mysql-test/suite/engines/funcs/t/in_multicolumn_number_pk_constraint_duplicate_update.test
      mysql-test/suite/engines/funcs/t/up_calendar_range.test
      mysql-test/suite/engines/iuds/r/insert_year.result
      mysql-test/suite/federated/disabled.def
      mysql-test/suite/funcs_1/r/is_columns_is_embedded.result
      mysql-test/suite/funcs_1/r/is_columns_myisam_embedded.result
      mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result
      mysql-test/suite/funcs_2/t/disabled.def
      mysql-test/suite/innodb/r/innodb-lock.result
      mysql-test/suite/innodb/r/innodb.result
      mysql-test/suite/innodb/r/innodb_mysql.result
      mysql-test/suite/innodb/t/innodb-lock.test
      mysql-test/suite/innodb/t/innodb.test
      mysql-test/suite/innodb/t/innodb_bug53756.test
      mysql-test/suite/innodb/t/innodb_mysql.test
      mysql-test/suite/innodb_plugin/r/innodb-index.result
      mysql-test/suite/innodb_plugin/r/innodb-lock.result
      mysql-test/suite/innodb_plugin/r/innodb-zip.result
      mysql-test/suite/innodb_plugin/r/innodb.result
      mysql-test/suite/innodb_plugin/r/innodb_bug52745.result
      mysql-test/suite/innodb_plugin/r/innodb_bug53591.result
      mysql-test/suite/innodb_plugin/r/innodb_mysql.result
      mysql-test/suite/innodb_plugin/t/innodb-autoinc-18274.test
      mysql-test/suite/innodb_plugin/t/innodb-autoinc-44030.test
      mysql-test/suite/innodb_plugin/t/innodb-autoinc-56228.test
      mysql-test/suite/innodb_plugin/t/innodb-autoinc.test
      mysql-test/suite/innodb_plugin/t/innodb-create-options.test
      mysql-test/suite/innodb_plugin/t/innodb-index.test
      mysql-test/suite/innodb_plugin/t/innodb-lock.test
      mysql-test/suite/innodb_plugin/t/innodb-zip.test
      mysql-test/suite/innodb_plugin/t/innodb.test
      mysql-test/suite/innodb_plugin/t/innodb_bug36172.test
      mysql-test/suite/innodb_plugin/t/innodb_bug52745.test
      mysql-test/suite/innodb_plugin/t/innodb_bug53591.test
      mysql-test/suite/innodb_plugin/t/innodb_bug53756.test
      mysql-test/suite/innodb_plugin/t/innodb_bug56680.test
      mysql-test/suite/innodb_plugin/t/innodb_information_schema.test
      mysql-test/suite/innodb_plugin/t/innodb_mysql.test
      mysql-test/suite/ndb/r/ndb_alter_table_online2.result
      mysql-test/suite/ndb/r/ndb_basic.result
      mysql-test/suite/ndb/r/ndb_column_properties.result
      mysql-test/suite/ndb/r/ndb_condition_pushdown.result
      mysql-test/suite/ndb/r/ndb_index_stat.result
      mysql-test/suite/ndb/r/ndb_index_stat_partitions.result
      mysql-test/suite/ndb/r/ndb_statistics0.result
      mysql-test/suite/ndb/r/ndb_statistics1.result
      mysql-test/suite/ndb/r/ndbinfo.result
      mysql-test/suite/ndb/r/ndbinfo_dump.result
      mysql-test/suite/ndb/t/disabled.def
      mysql-test/suite/ndb/t/ndb_alter_table_online2.test
      mysql-test/suite/ndb/t/ndb_basic.test
      mysql-test/suite/ndb/t/ndb_blob_big.cnf
      mysql-test/suite/ndb/t/ndb_column_properties.test
      mysql-test/suite/ndb/t/ndb_condition_pushdown.test
      mysql-test/suite/ndb/t/ndb_index_stat.test
      mysql-test/suite/ndb/t/ndb_index_stat_partitions-master.opt
      mysql-test/suite/ndb/t/ndb_index_stat_partitions.test
      mysql-test/suite/ndb/t/ndb_partition_error2.test
      mysql-test/suite/ndb/t/ndb_statistics.inc
      mysql-test/suite/ndb/t/ndb_statistics0.test
      mysql-test/suite/ndb/t/ndb_statistics1.test
      mysql-test/suite/ndb/t/ndbinfo.test
      mysql-test/suite/ndb/t/test_mgmd.test
      mysql-test/suite/ndb_big/disabled.def
      mysql-test/suite/ndb_rpl/r/ndb_rpl_gap_event.result
      mysql-test/suite/ndb_rpl/r/ndb_rpl_rep_error.result
      mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_epoch.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_gap_event.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_rep_error.test
      mysql-test/suite/ndb_team/t/disabled.def
      mysql-test/suite/rpl/r/rpl_binlog_corruption.result
      mysql-test/suite/rpl/r/rpl_binlog_max_cache_size.result
      mysql-test/suite/rpl/r/rpl_bug33931.result
      mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result
      mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result
      mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result
      mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result
      mysql-test/suite/rpl/r/rpl_idempotency.result
      mysql-test/suite/rpl/r/rpl_ignore_table.result
      mysql-test/suite/rpl/r/rpl_incident.result
      mysql-test/suite/rpl/r/rpl_init_slave_errors.result
      mysql-test/suite/rpl/r/rpl_known_bugs_detection.result
      mysql-test/suite/rpl/r/rpl_loaddata.result
      mysql-test/suite/rpl/r/rpl_loaddata_concurrent.result
      mysql-test/suite/rpl/r/rpl_loaddata_fatal.result
      mysql-test/suite/rpl/r/rpl_packet.result
      mysql-test/suite/rpl/r/rpl_relayspace.result
      mysql-test/suite/rpl/r/rpl_rotate_logs.result
      mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result
      mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result
      mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result
      mysql-test/suite/rpl/r/rpl_row_colSize.result
      mysql-test/suite/rpl/r/rpl_row_conflicts.result
      mysql-test/suite/rpl/r/rpl_row_inexist_tbl.result
      mysql-test/suite/rpl/r/rpl_row_rec_comp_innodb.result
      mysql-test/suite/rpl/r/rpl_row_rec_comp_myisam.result
      mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result
      mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result
      mysql-test/suite/rpl/r/rpl_server_id2.result
      mysql-test/suite/rpl/r/rpl_skip_error.result
      mysql-test/suite/rpl/r/rpl_slave_grp_exec.result
      mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result
      mysql-test/suite/rpl/r/rpl_slave_load_tmpdir_not_exist.result
      mysql-test/suite/rpl/r/rpl_stm_EE_err2.result
      mysql-test/suite/rpl/r/rpl_stm_conflicts.result
      mysql-test/suite/rpl/r/rpl_temporary_errors.result
      mysql-test/suite/rpl/t/disabled.def
      mysql-test/suite/rpl/t/rpl_binlog_corruption.test
      mysql-test/suite/rpl/t/rpl_binlog_max_cache_size.test
      mysql-test/suite/rpl/t/rpl_bug33931.test
      mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test
      mysql-test/suite/rpl/t/rpl_filter_tables_not_exist.test
      mysql-test/suite/rpl/t/rpl_idempotency.test
      mysql-test/suite/rpl/t/rpl_ignore_table.test
      mysql-test/suite/rpl/t/rpl_incident.test
      mysql-test/suite/rpl/t/rpl_init_slave_errors.test
      mysql-test/suite/rpl/t/rpl_known_bugs_detection.test
      mysql-test/suite/rpl/t/rpl_loaddata_fatal.test
      mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt
      mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt
      mysql-test/suite/rpl/t/rpl_relayspace.test
      mysql-test/suite/rpl/t/rpl_rotate_logs.test
      mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test
      mysql-test/suite/rpl/t/rpl_row_colSize.test
      mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test
      mysql-test/suite/rpl/t/rpl_row_rec_comp_myisam.test
      mysql-test/suite/rpl/t/rpl_row_until.test
      mysql-test/suite/rpl/t/rpl_server_id2.test
      mysql-test/suite/rpl/t/rpl_skip_error.test
      mysql-test/suite/rpl/t/rpl_slave_grp_exec.test
      mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test
      mysql-test/suite/rpl/t/rpl_slave_load_tmpdir_not_exist.test
      mysql-test/suite/rpl/t/rpl_temporary_errors.test
      mysql-test/suite/rpl_ndb/r/rpl_ndb_extra_col_slave.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_row_basic.result
      mysql-test/suite/rpl_ndb/t/rpl_ndb_extra_col_slave.test
      mysql-test/suite/sys_vars/r/max_join_size_func.result
      mysql-test/suite/sys_vars/r/sql_big_selects_func.result
      mysql-test/suite/sys_vars/r/sql_max_join_size_func.result
      mysql-test/suite/sys_vars/t/disabled.def
      mysql-test/t/alter_table.test
      mysql-test/t/analyse.test
      mysql-test/t/archive.test
      mysql-test/t/cast.test
      mysql-test/t/crash_commit_before.test
      mysql-test/t/ctype_cp1250_ch.test
      mysql-test/t/ctype_cp1251.test
      mysql-test/t/ctype_cp932_binlog_stm.test
      mysql-test/t/ctype_eucjpms.test
      mysql-test/t/ctype_sjis.test
      mysql-test/t/ctype_ucs.test
      mysql-test/t/disabled.def
      mysql-test/t/error_simulation.test
      mysql-test/t/events_1.test
      mysql-test/t/events_bugs.test
      mysql-test/t/events_restart.test
      mysql-test/t/explain.test
      mysql-test/t/func_group.test
      mysql-test/t/func_in.test
      mysql-test/t/func_math.test
      mysql-test/t/func_time.test
      mysql-test/t/gis-rtree.test
      mysql-test/t/gis.test
      mysql-test/t/group_by.test
      mysql-test/t/having.test
      mysql-test/t/heap.test
      mysql-test/t/insert_select.test
      mysql-test/t/key_cache.test
      mysql-test/t/loaddata.test
      mysql-test/t/lock_sync.test
      mysql-test/t/lowercase_table2.test
      mysql-test/t/merge.test
      mysql-test/t/myisam.test
      mysql-test/t/myisam_crash_before_flush_keys.test
      mysql-test/t/myisampack.test
      mysql-test/t/mysqlbinlog.test
      mysql-test/t/mysqlbinlog_base64.test
      mysql-test/t/mysqlcheck.test
      mysql-test/t/mysqldump.test
      mysql-test/t/mysqlslap.test
      mysql-test/t/mysqltest.test
      mysql-test/t/order_by.test
      mysql-test/t/parser_stack.test
      mysql-test/t/partition.test
      mysql-test/t/partition_innodb_plugin.test
      mysql-test/t/show_check.test
      mysql-test/t/sp-destruct.test
      mysql-test/t/sp-error.test
      mysql-test/t/sp-security.test
      mysql-test/t/sp.test
      mysql-test/t/sp_sync.test
      mysql-test/t/sp_trans.test
      mysql-test/t/subselect.test
      mysql-test/t/trigger-compat.test
      mysql-test/t/type_float.test
      mysql-test/t/type_newdecimal.test
      mysql-test/t/type_timestamp.test
      mysql-test/t/union.test
      mysql-test/t/variables-notembedded.test
      mysql-test/t/variables.test
      mysql-test/t/view.test
      mysql-test/t/view_grant.test
      mysql-test/t/xml.test
      mysql-test/valgrind.supp
      mysys/CMakeLists.txt
      mysys/Makefile.am
      mysys/my_bitmap.c
      mysys/my_net.c
      mysys/my_symlink.c
      mysys/stacktrace.c
      plugin/fulltext/plugin_example.c
      scripts/make_win_bin_dist
      scripts/mysql_install_db.pl.in
      scripts/mysql_install_db.sh
      sql-common/my_time.c
      sql/CMakeLists.txt
      sql/Makefile.am
      sql/derror.cc
      sql/event_db_repository.cc
      sql/event_db_repository.h
      sql/event_parse_data.cc
      sql/event_parse_data.h
      sql/events.cc
      sql/field.cc
      sql/field.h
      sql/field_conv.cc
      sql/filesort.cc
      sql/gen_lex_hash.cc
      sql/ha_ndb_index_stat.cc
      sql/ha_ndb_index_stat.h
      sql/ha_ndbcluster.cc
      sql/ha_ndbcluster.h
      sql/ha_ndbcluster_binlog.cc
      sql/ha_ndbcluster_binlog.h
      sql/ha_ndbcluster_cond.cc
      sql/ha_ndbinfo.cc
      sql/ha_partition.cc
      sql/ha_partition.h
      sql/handler.cc
      sql/handler.h
      sql/hostname.cc
      sql/item.cc
      sql/item.h
      sql/item_cmpfunc.cc
      sql/item_cmpfunc.h
      sql/item_create.cc
      sql/item_func.cc
      sql/item_strfunc.cc
      sql/item_strfunc.h
      sql/item_subselect.cc
      sql/item_subselect.h
      sql/item_sum.cc
      sql/item_timefunc.cc
      sql/item_timefunc.h
      sql/log.cc
      sql/log_event.cc
      sql/my_decimal.cc
      sql/my_decimal.h
      sql/mysql_priv.h
      sql/mysqld.cc
      sql/opt_range.cc
      sql/opt_sum.cc
      sql/password.c
      sql/protocol.cc
      sql/rpl_rli.h
      sql/set_var.cc
      sql/share/errmsg.txt
      sql/slave.cc
      sql/sp.cc
      sql/sp_head.cc
      sql/spatial.cc
      sql/sql_acl.cc
      sql/sql_analyse.cc
      sql/sql_base.cc
      sql/sql_binlog.cc
      sql/sql_cache.cc
      sql/sql_class.cc
      sql/sql_class.h
      sql/sql_connect.cc
      sql/sql_db.cc
      sql/sql_insert.cc
      sql/sql_lex.cc
      sql/sql_lex.h
      sql/sql_load.cc
      sql/sql_parse.cc
      sql/sql_partition.cc
      sql/sql_plugin.cc
      sql/sql_prepare.cc
      sql/sql_select.cc
      sql/sql_select.h
      sql/sql_show.cc
      sql/sql_string.cc
      sql/sql_string.h
      sql/sql_table.cc
      sql/sql_trigger.cc
      sql/sql_trigger.h
      sql/sql_union.cc
      sql/sql_view.cc
      sql/sql_yacc.yy
      sql/table.cc
      sql/unireg.cc
      sql/unireg.h
      storage/archive/azio.c
      storage/archive/ha_archive.cc
      storage/federated/Makefile.am
      storage/heap/ha_heap.cc
      storage/heap/ha_heap.h
      storage/heap/hp_create.c
      storage/heap/hp_info.c
      storage/innobase/btr/btr0btr.c
      storage/innobase/btr/btr0cur.c
      storage/innobase/btr/btr0pcur.c
      storage/innobase/buf/buf0buf.c
      storage/innobase/dict/dict0load.c
      storage/innobase/fsp/fsp0fsp.c
      storage/innobase/handler/ha_innodb.cc
      storage/innobase/ibuf/ibuf0ibuf.c
      storage/innobase/include/btr0pcur.h
      storage/innobase/include/btr0pcur.ic
      storage/innobase/include/btr0types.h
      storage/innobase/include/buf0buf.h
      storage/innobase/include/buf0buf.ic
      storage/innobase/include/fsp0fsp.h
      storage/innobase/include/mtr0mtr.h
      storage/innobase/include/rem0rec.h
      storage/innobase/include/rem0rec.ic
      storage/innobase/include/sync0arr.h
      storage/innobase/include/sync0rw.h
      storage/innobase/include/sync0rw.ic
      storage/innobase/include/sync0sync.h
      storage/innobase/include/trx0roll.h
      storage/innobase/include/trx0sys.h
      storage/innobase/include/trx0sys.ic
      storage/innobase/include/trx0trx.h
      storage/innobase/include/univ.i
      storage/innobase/include/ut0mem.h
      storage/innobase/include/ut0mem.ic
      storage/innobase/log/log0log.c
      storage/innobase/mtr/mtr0mtr.c
      storage/innobase/row/row0ins.c
      storage/innobase/row/row0purge.c
      storage/innobase/row/row0row.c
      storage/innobase/row/row0sel.c
      storage/innobase/row/row0vers.c
      storage/innobase/srv/srv0srv.c
      storage/innobase/sync/sync0arr.c
      storage/innobase/sync/sync0rw.c
      storage/innobase/sync/sync0sync.c
      storage/innobase/trx/trx0rec.c
      storage/innobase/trx/trx0trx.c
      storage/innobase/ut/ut0mem.c
      storage/innodb_plugin/ChangeLog
      storage/innodb_plugin/btr/btr0btr.c
      storage/innodb_plugin/btr/btr0cur.c
      storage/innodb_plugin/btr/btr0pcur.c
      storage/innodb_plugin/btr/btr0sea.c
      storage/innodb_plugin/buf/buf0buddy.c
      storage/innodb_plugin/buf/buf0buf.c
      storage/innodb_plugin/buf/buf0flu.c
      storage/innodb_plugin/buf/buf0lru.c
      storage/innodb_plugin/buf/buf0rea.c
      storage/innodb_plugin/dict/dict0crea.c
      storage/innodb_plugin/dict/dict0dict.c
      storage/innodb_plugin/dict/dict0load.c
      storage/innodb_plugin/dict/dict0mem.c
      storage/innodb_plugin/fsp/fsp0fsp.c
      storage/innodb_plugin/ha/ha0ha.c
      storage/innodb_plugin/handler/ha_innodb.cc
      storage/innodb_plugin/handler/ha_innodb.h
      storage/innodb_plugin/handler/handler0alter.cc
      storage/innodb_plugin/ibuf/ibuf0ibuf.c
      storage/innodb_plugin/include/btr0btr.h
      storage/innodb_plugin/include/btr0btr.ic
      storage/innodb_plugin/include/btr0cur.h
      storage/innodb_plugin/include/btr0cur.ic
      storage/innodb_plugin/include/btr0pcur.h
      storage/innodb_plugin/include/btr0pcur.ic
      storage/innodb_plugin/include/btr0sea.h
      storage/innodb_plugin/include/btr0types.h
      storage/innodb_plugin/include/buf0buddy.h
      storage/innodb_plugin/include/buf0buddy.ic
      storage/innodb_plugin/include/buf0buf.h
      storage/innodb_plugin/include/buf0buf.ic
      storage/innodb_plugin/include/buf0lru.h
      storage/innodb_plugin/include/buf0types.h
      storage/innodb_plugin/include/dict0mem.h
      storage/innodb_plugin/include/fsp0fsp.h
      storage/innodb_plugin/include/ha0ha.h
      storage/innodb_plugin/include/ha0ha.ic
      storage/innodb_plugin/include/mtr0mtr.h
      storage/innodb_plugin/include/mtr0mtr.ic
      storage/innodb_plugin/include/page0cur.ic
      storage/innodb_plugin/include/page0page.h
      storage/innodb_plugin/include/page0page.ic
      storage/innodb_plugin/include/page0zip.h
      storage/innodb_plugin/include/rem0rec.h
      storage/innodb_plugin/include/rem0rec.ic
      storage/innodb_plugin/include/row0row.h
      storage/innodb_plugin/include/row0row.ic
      storage/innodb_plugin/include/row0upd.ic
      storage/innodb_plugin/include/srv0srv.h
      storage/innodb_plugin/include/sync0arr.h
      storage/innodb_plugin/include/sync0rw.h
      storage/innodb_plugin/include/sync0rw.ic
      storage/innodb_plugin/include/sync0sync.h
      storage/innodb_plugin/include/trx0sys.h
      storage/innodb_plugin/include/trx0sys.ic
      storage/innodb_plugin/include/trx0trx.h
      storage/innodb_plugin/include/trx0undo.h
      storage/innodb_plugin/include/univ.i
      storage/innodb_plugin/include/ut0mem.h
      storage/innodb_plugin/include/ut0mem.ic
      storage/innodb_plugin/log/log0log.c
      storage/innodb_plugin/mtr/mtr0mtr.c
      storage/innodb_plugin/page/page0cur.c
      storage/innodb_plugin/page/page0page.c
      storage/innodb_plugin/page/page0zip.c
      storage/innodb_plugin/rem/rem0rec.c
      storage/innodb_plugin/row/row0ins.c
      storage/innodb_plugin/row/row0mysql.c
      storage/innodb_plugin/row/row0purge.c
      storage/innodb_plugin/row/row0row.c
      storage/innodb_plugin/row/row0sel.c
      storage/innodb_plugin/row/row0upd.c
      storage/innodb_plugin/row/row0vers.c
      storage/innodb_plugin/srv/srv0srv.c
      storage/innodb_plugin/srv/srv0start.c
      storage/innodb_plugin/sync/sync0arr.c
      storage/innodb_plugin/sync/sync0rw.c
      storage/innodb_plugin/sync/sync0sync.c
      storage/innodb_plugin/trx/trx0i_s.c
      storage/innodb_plugin/trx/trx0rec.c
      storage/innodb_plugin/trx/trx0sys.c
      storage/innodb_plugin/trx/trx0trx.c
      storage/innodb_plugin/trx/trx0undo.c
      storage/innodb_plugin/ut/ut0mem.c
      storage/myisam/ft_boolean_search.c
      storage/myisam/ft_nlq_search.c
      storage/myisam/ft_stopwords.c
      storage/myisam/ha_myisam.cc
      storage/myisam/ha_myisam.h
      storage/myisam/mi_check.c
      storage/myisam/mi_close.c
      storage/myisam/mi_create.c
      storage/myisam/mi_delete_all.c
      storage/myisam/mi_packrec.c
      storage/myisam/mi_preload.c
      storage/myisam/mi_range.c
      storage/myisam/mi_test1.c
      storage/myisam/mi_update.c
      storage/myisam/mi_write.c
      storage/myisam/myisamdef.h
      storage/myisam/sp_test.c
      storage/myisammrg/ha_myisammrg.cc
      storage/myisammrg/ha_myisammrg.h
      storage/ndb/CMakeLists.txt
      storage/ndb/cmake/os/WindowsCache.cmake
      storage/ndb/include/debugger/EventLogger.hpp
      storage/ndb/include/debugger/SignalLoggerManager.hpp
      storage/ndb/include/kernel/BlockNumbers.h
      storage/ndb/include/kernel/GlobalSignalNumbers.h
      storage/ndb/include/kernel/NodeInfo.hpp
      storage/ndb/include/kernel/kernel_types.h
      storage/ndb/include/kernel/ndb_limits.h
      storage/ndb/include/kernel/signaldata/CloseComReqConf.hpp
      storage/ndb/include/kernel/signaldata/DisconnectRep.hpp
      storage/ndb/include/kernel/signaldata/EnableCom.hpp
      storage/ndb/include/kernel/signaldata/NodeStateSignalData.hpp
      storage/ndb/include/kernel/signaldata/RouteOrd.hpp
      storage/ndb/include/kernel/signaldata/SignalDroppedRep.hpp
      storage/ndb/include/kernel/signaldata/SumaImpl.hpp
      storage/ndb/include/kernel/signaldata/TuxBound.hpp
      storage/ndb/include/mgmapi/mgmapi_config_parameters.h
      storage/ndb/include/ndb_config.h.in
      storage/ndb/include/ndb_global.h
      storage/ndb/include/ndb_types.h.in
      storage/ndb/include/ndb_version.h.in
      storage/ndb/include/ndbapi/NdbIndexStat.hpp
      storage/ndb/include/transporter/TransporterCallback.hpp
      storage/ndb/include/transporter/TransporterDefinitions.hpp
      storage/ndb/include/transporter/TransporterRegistry.hpp
      storage/ndb/include/util/BaseString.hpp
      storage/ndb/include/util/Bitmask.hpp
      storage/ndb/include/util/NdbTap.hpp
      storage/ndb/ndb_configure.cmake
      storage/ndb/ndb_configure.m4
      storage/ndb/src/common/debugger/BlockNames.cpp
      storage/ndb/src/common/debugger/EventLogger.cpp
      storage/ndb/src/common/debugger/SignalLoggerManager.cpp
      storage/ndb/src/common/debugger/signaldata/SignalNames.cpp
      storage/ndb/src/common/transporter/Packer.cpp
      storage/ndb/src/common/transporter/TCP_Transporter.cpp
      storage/ndb/src/common/transporter/TCP_Transporter.hpp
      storage/ndb/src/common/transporter/Transporter.cpp
      storage/ndb/src/common/transporter/Transporter.hpp
      storage/ndb/src/common/transporter/TransporterRegistry.cpp
      storage/ndb/src/common/util/BaseString.cpp
      storage/ndb/src/common/util/Bitmask.cpp
      storage/ndb/src/kernel/Makefile.am
      storage/ndb/src/kernel/SimBlockList.cpp
      storage/ndb/src/kernel/blocks/CMakeLists.txt
      storage/ndb/src/kernel/blocks/ERROR_codes.txt
      storage/ndb/src/kernel/blocks/LocalProxy.cpp
      storage/ndb/src/kernel/blocks/LocalProxy.hpp
      storage/ndb/src/kernel/blocks/Makefile.am
      storage/ndb/src/kernel/blocks/backup/Backup.cpp
      storage/ndb/src/kernel/blocks/backup/BackupInit.cpp
      storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
      storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.hpp
      storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp
      storage/ndb/src/kernel/blocks/dbacc/DbaccInit.cpp
      storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
      storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
      storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp
      storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp
      storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp
      storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
      storage/ndb/src/kernel/blocks/dbinfo/Dbinfo.cpp
      storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
      storage/ndb/src/kernel/blocks/dblqh/DblqhCommon.cpp
      storage/ndb/src/kernel/blocks/dblqh/DblqhCommon.hpp
      storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp
      storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
      storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
      storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
      storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
      storage/ndb/src/kernel/blocks/dbtup/tuppage.hpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxProxy.cpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxProxy.hpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxStat.cpp
      storage/ndb/src/kernel/blocks/lgman.cpp
      storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp
      storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.cpp
      storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp
      storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp
      storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
      storage/ndb/src/kernel/blocks/suma/Suma.cpp
      storage/ndb/src/kernel/blocks/suma/Suma.hpp
      storage/ndb/src/kernel/blocks/suma/SumaInit.cpp
      storage/ndb/src/kernel/blocks/trix/Trix.cpp
      storage/ndb/src/kernel/error/ErrorReporter.cpp
      storage/ndb/src/kernel/ndbd.cpp
      storage/ndb/src/kernel/vm/ArrayPool.hpp
      storage/ndb/src/kernel/vm/CMakeLists.txt
      storage/ndb/src/kernel/vm/Configuration.cpp
      storage/ndb/src/kernel/vm/DLList.hpp
      storage/ndb/src/kernel/vm/DynArr256.cpp
      storage/ndb/src/kernel/vm/DynArr256.hpp
      storage/ndb/src/kernel/vm/Emulator.cpp
      storage/ndb/src/kernel/vm/Emulator.hpp
      storage/ndb/src/kernel/vm/GlobalData.hpp
      storage/ndb/src/kernel/vm/Makefile.am
      storage/ndb/src/kernel/vm/Ndbinfo.hpp
      storage/ndb/src/kernel/vm/Pool.cpp
      storage/ndb/src/kernel/vm/Pool.hpp
      storage/ndb/src/kernel/vm/SLList.hpp
      storage/ndb/src/kernel/vm/SectionReader.cpp
      storage/ndb/src/kernel/vm/SimplePropertiesSection.cpp
      storage/ndb/src/kernel/vm/SimulatedBlock.cpp
      storage/ndb/src/kernel/vm/SimulatedBlock.hpp
      storage/ndb/src/kernel/vm/TransporterCallback.cpp
      storage/ndb/src/kernel/vm/TransporterCallbackKernel.hpp
      storage/ndb/src/kernel/vm/dummy_nonmt.cpp
      storage/ndb/src/kernel/vm/mt.cpp
      storage/ndb/src/kernel/vm/mt.hpp
      storage/ndb/src/kernel/vm/mt_thr_config.cpp
      storage/ndb/src/kernel/vm/mt_thr_config.hpp
      storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp
      storage/ndb/src/kernel/vm/ndbd_malloc_impl.hpp
      storage/ndb/src/mgmsrv/ConfigInfo.cpp
      storage/ndb/src/mgmsrv/MgmtSrvr.cpp
      storage/ndb/src/mgmsrv/Services.cpp
      storage/ndb/src/ndbapi/NdbBlob.cpp
      storage/ndb/src/ndbapi/NdbDictionary.cpp
      storage/ndb/src/ndbapi/NdbEventOperationImpl.hpp
      storage/ndb/src/ndbapi/NdbIndexStat.cpp
      storage/ndb/src/ndbapi/NdbIndexStatImpl.cpp
      storage/ndb/src/ndbapi/NdbIndexStatImpl.hpp
      storage/ndb/src/ndbapi/TransporterFacade.cpp
      storage/ndb/src/ndbapi/TransporterFacade.hpp
      storage/ndb/src/ndbapi/ndberror.c
      storage/ndb/test/include/NDBT_Test.hpp
      storage/ndb/test/include/NdbRestarter.hpp
      storage/ndb/test/include/NdbRestarts.hpp
      storage/ndb/test/ndbapi/CMakeLists.txt
      storage/ndb/test/ndbapi/flexAsynch.cpp
      storage/ndb/test/ndbapi/testBackup.cpp
      storage/ndb/test/ndbapi/testBlobs.cpp
      storage/ndb/test/ndbapi/testDict.cpp
      storage/ndb/test/ndbapi/testIndexStat.cpp
      storage/ndb/test/ndbapi/testMgm.cpp
      storage/ndb/test/ndbapi/testNodeRestart.cpp
      storage/ndb/test/ndbapi/testScan.cpp
      storage/ndb/test/ndbapi/testSystemRestart.cpp
      storage/ndb/test/ndbapi/test_event.cpp
      storage/ndb/test/run-test/CMakeLists.txt
      storage/ndb/test/run-test/atrt-backtrace.sh
      storage/ndb/test/run-test/atrt.hpp
      storage/ndb/test/run-test/command.cpp
      storage/ndb/test/run-test/conf-daily-perf.cnf
      storage/ndb/test/run-test/conf-upgrade.cnf
      storage/ndb/test/run-test/daily-basic-tests.txt
      storage/ndb/test/run-test/daily-perf-tests.txt
      storage/ndb/test/run-test/db.cpp
      storage/ndb/test/run-test/files.cpp
      storage/ndb/test/run-test/main.cpp
      storage/ndb/test/run-test/setup.cpp
      storage/ndb/test/run-test/test-tests.txt
      storage/ndb/test/src/HugoTransactions.cpp
      storage/ndb/test/src/NDBT_Test.cpp
      storage/ndb/test/src/NdbRestarter.cpp
      storage/ndb/test/src/NdbRestarts.cpp
      storage/ndb/tools/ndb_index_stat.cpp
      storage/ndb/tools/ndbinfo_sql.cpp
      strings/decimal.c
      strings/xml.c
      support-files/mysql.spec.sh
      tests/mysql_client_test.c
      unittest/mysys/bitmap-t.c
      vio/viosocket.c
      cmd-line-utils/libedit/el_terminal.h
      cmd-line-utils/libedit/keymacro.c
      cmd-line-utils/libedit/keymacro.h
      cmd-line-utils/libedit/terminal.c
      mysql-test/r/partition_myisam.result
      mysql-test/suite/binlog/r/binlog_bug23533.result
      mysql-test/suite/binlog/r/binlog_bug36391.result
      mysql-test/suite/rpl/r/rpl_bug37426.result
      mysql-test/suite/binlog/t/binlog_bug23533.test
      mysql-test/suite/binlog/t/binlog_bug36391.test
      mysql-test/suite/rpl/t/rpl_bug37426.test
      mysql-test/suite/ndb_rpl/r/ndb_rpl_conflict_basic.result
      mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_basic.test
      mysql-test/t/partition_myisam.test
=== modified file 'storage/ndb/include/ndb_version.h.in'
--- a/storage/ndb/include/ndb_version.h.in	2012-02-22 13:19:55 +0000
+++ b/storage/ndb/include/ndb_version.h.in	2012-02-22 14:03:58 +0000
@@ -737,4 +737,23 @@ ndbd_128_instances_address(Uint32 x)
   return x >= NDBD_128_INSTANCES_ADDRESS_72;
 }
 
+#define NDBD_FIXED_LOOKUP_QUERY_ABORT_72 NDB_MAKE_VERSION(7,2,5)
+
+static
+inline
+int
+ndbd_fixed_lookup_query_abort(Uint32 x)
+{
+  const Uint32 major = (x >> 16) & 0xFF;
+  const Uint32 minor = (x >>  8) & 0xFF;
+
+  if (major == 7 && minor < 2)
+  {
+    // Only experimental support of SPJ pre 7.2.0.
+    // Assume we support 'fixed-abort' as we want it tested.
+    return true;
+  }
+  return x >= NDBD_FIXED_LOOKUP_QUERY_ABORT_72;
+}
+
 #endif

=== modified file 'storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp	2011-12-13 12:20:00 +0000
+++ b/storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp	2012-02-22 14:03:58 +0000
@@ -18,6 +18,7 @@
 #define DBSPJ_C
 #include "Dbspj.hpp"
 
+#include <ndb_version.h>
 #include <SectionReader.hpp>
 #include <signaldata/LqhKey.hpp>
 #include <signaldata/QueryTree.hpp>
@@ -1685,6 +1686,22 @@ Dbspj::abort(Signal* signal, Ptr<Request
 {
   jam();
 
+  /**
+   * Need to handle online upgrade as the protocoll for 
+   * signaling errors for Lookup-request changed in 7.2.5.
+   * If API-version is <= 7.2.4 we increase the severity 
+   * of the error to a 'NodeFailure' as this is the only
+   * errorcode for which the API will stop further
+   * 'outstanding-counting' in pre 7.2.5.
+   * (Starting from 7.2.5 we will stop counting for all 'hard errors')
+   */
+  if (requestPtr.p->isLookup() &&
+      !ndbd_fixed_lookup_query_abort(getNodeInfo(getResultRef(requestPtr)).m_version))
+  {
+    jam();
+    errCode = DbspjErr::NodeFailure;
+  }
+
   if ((requestPtr.p->m_state & Request::RS_ABORTING) != 0)
   {
     jam();
@@ -3060,6 +3077,23 @@ Dbspj::lookup_send(Signal* signal,
   getSection(handle.m_ptr[1], attrInfoPtrI);
   handle.m_cnt = 2;
 
+  /**
+   * Inject error to test LQHKEYREF handling:
+   * Tampering with tableSchemaVersion such that LQH will 
+   * return LQHKEYREF('1227: Invalid schema version')
+   * May happen for different treeNodes in the request:
+   * - 17030: Fail on any lookup_send()
+   * - 17031: Fail on lookup_send() if 'isLeaf'
+   * - 17032: Fail on lookup_send() if treeNode not root 
+   */
+  if (ERROR_INSERTED_CLEAR(17030) ||
+      (treeNodePtr.p->isLeaf() && ERROR_INSERTED_CLEAR(17031)) ||
+      (treeNodePtr.p->m_parentPtrI != RNIL && ERROR_INSERTED_CLEAR(17032)))
+  {
+    jam();
+    req->tableSchemaVersion += (1 << 16); // Provoke 'Invalid schema version'
+  }
+
 #if defined DEBUG_LQHKEYREQ
   ndbout_c("LQHKEYREQ to %x", ref);
   printLQHKEYREQ(stdout, signal->getDataPtrSend(),
@@ -3081,6 +3115,22 @@ Dbspj::lookup_send(Signal* signal,
     c_Counters.incr_counter(CI_REMOTE_READS_SENT, 1);
   }
 
+  /**
+   * Test execution terminated due to 'NodeFailure' which
+   * may happen for different treeNodes in the request:
+   * - 17020: Fail on any lookup_send()
+   * - 17021: Fail on lookup_send() if 'isLeaf'
+   * - 17022: Fail on lookup_send() if treeNode not root 
+   */
+  if (ERROR_INSERTED_CLEAR(17020) ||
+      (treeNodePtr.p->isLeaf() && ERROR_INSERTED_CLEAR(17021)) ||
+      (treeNodePtr.p->m_parentPtrI != RNIL && ERROR_INSERTED_CLEAR(17022)))
+  {
+    jam();
+    releaseSections(handle);
+    abort(signal, requestPtr, DbspjErr::NodeFailure);
+    return;
+  }
   if (unlikely(!c_alive_nodes.get(Tnode)))
   {
     jam();
@@ -3140,14 +3190,18 @@ Dbspj::lookup_execTRANSID_AI(Signal* sig
     LocalArenaPoolImpl pool(requestPtr.p->m_arena, m_dependency_map_pool);
     Local_dependency_map list(pool, treeNodePtr.p->m_dependent_nodes);
     Dependency_map::ConstDataBufferIterator it;
+
     for (list.first(it); !it.isNull(); list.next(it))
     {
-      jam();
-      Ptr<TreeNode> childPtr;
-      m_treenode_pool.getPtr(childPtr, * it.data);
-      ndbrequire(childPtr.p->m_info != 0&&childPtr.p->m_info->m_parent_row!=0);
-      (this->*(childPtr.p->m_info->m_parent_row))(signal,
-                                                  requestPtr, childPtr,rowRef);
+      if (likely(requestPtr.p->m_state & Request::RS_RUNNING))
+      {
+        jam();
+        Ptr<TreeNode> childPtr;
+        m_treenode_pool.getPtr(childPtr, * it.data);
+        ndbrequire(childPtr.p->m_info!=0 && childPtr.p->m_info->m_parent_row!=0);
+        (this->*(childPtr.p->m_info->m_parent_row))(signal,
+                                                    requestPtr, childPtr,rowRef);
+      }
     }
   }
   ndbrequire(!(requestPtr.p->isLookup() && treeNodePtr.p->isLeaf()));
@@ -3184,85 +3238,89 @@ Dbspj::lookup_execLQHKEYREF(Signal* sign
 
   c_Counters.incr_counter(CI_READS_NOT_FOUND, 1);
 
-  if (requestPtr.p->isLookup())
+  DEBUG("lookup_execLQHKEYREF, errorCode:" << errCode);
+
+  /**
+   * If Request is still actively running: API need to
+   * be informed about error. 
+   * Error code may either indicate a 'hard error' which should
+   * terminate the query execution, or a 'soft error' which 
+   * should be signaled NDBAPI, and execution continued.
+   */
+  if (likely(requestPtr.p->m_state & Request::RS_RUNNING))
   {
-    jam();
+    switch(errCode){
+    case 626: // 'Soft error' : Row not found
+    case 899: // 'Soft error' : Interpreter_exit_nok
 
-    /* CONF/REF not requested for lookup-Leaf: */
-    ndbrequire(!treeNodePtr.p->isLeaf());
+      jam();
+      /**
+       * Only Lookup-request need to send TCKEYREF...
+       */
+      if (requestPtr.p->isLookup())
+      {
+        jam();
 
-    /**
-     * Scan-request does not need to
-     *   send TCKEYREF...
-     */
-    /**
-     * Return back to api...
-     *   NOTE: assume that signal is tampered with
-     */
-    Uint32 resultRef = treeNodePtr.p->m_lookup_data.m_api_resultRef;
-    Uint32 resultData = treeNodePtr.p->m_lookup_data.m_api_resultData;
-    TcKeyRef* ref = (TcKeyRef*)signal->getDataPtr();
-    ref->connectPtr = resultData;
-    ref->transId[0] = requestPtr.p->m_transId[0];
-    ref->transId[1] = requestPtr.p->m_transId[1];
-    ref->errorCode = errCode;
-    ref->errorData = 0;
+        /* CONF/REF not requested for lookup-Leaf: */
+        ndbrequire(!treeNodePtr.p->isLeaf());
 
-    DEBUG("lookup_execLQHKEYREF, errorCode:" << errCode);
+        /**
+         * Return back to api...
+         *   NOTE: assume that signal is tampered with
+         */
+        Uint32 resultRef = treeNodePtr.p->m_lookup_data.m_api_resultRef;
+        Uint32 resultData = treeNodePtr.p->m_lookup_data.m_api_resultData;
+        TcKeyRef* ref = (TcKeyRef*)signal->getDataPtr();
+        ref->connectPtr = resultData;
+        ref->transId[0] = requestPtr.p->m_transId[0];
+        ref->transId[1] = requestPtr.p->m_transId[1];
+        ref->errorCode = errCode;
+        ref->errorData = 0;
 
-    sendTCKEYREF(signal, resultRef, requestPtr.p->m_senderRef);
+        sendTCKEYREF(signal, resultRef, requestPtr.p->m_senderRef);
 
-    if (treeNodePtr.p->m_bits & TreeNode::T_UNIQUE_INDEX_LOOKUP)
-    {
-      /**
-       * If this is a "leaf" unique index lookup
-       *   emit extra TCKEYCONF as would have been done with ordinary
-       *   operation
-       */
-      LocalArenaPoolImpl pool(requestPtr.p->m_arena, m_dependency_map_pool);
-      Local_dependency_map list(pool, treeNodePtr.p->m_dependent_nodes);
-      Dependency_map::ConstDataBufferIterator it;
-      ndbrequire(list.first(it));
-      ndbrequire(list.getSize() == 1); // should only be 1 child
-      Ptr<TreeNode> childPtr;
-      m_treenode_pool.getPtr(childPtr, * it.data);
-      if (childPtr.p->m_bits & TreeNode::T_LEAF)
-      {
-        jam();
-        Uint32 resultRef = childPtr.p->m_lookup_data.m_api_resultRef;
-        Uint32 resultData = childPtr.p->m_lookup_data.m_api_resultData;
-        TcKeyConf* conf = (TcKeyConf*)signal->getDataPtr();
-        conf->apiConnectPtr = RNIL;
-        conf->confInfo = 0;
-        conf->gci_hi = 0;
-        TcKeyConf::setNoOfOperations(conf->confInfo, 1);
-        conf->transId1 = requestPtr.p->m_transId[0];
-        conf->transId2 = requestPtr.p->m_transId[1];
-        conf->operations[0].apiOperationPtr = resultData;
-        conf->operations[0].attrInfoLen =
-          TcKeyConf::DirtyReadBit |getOwnNodeId();
-        sendTCKEYCONF(signal, TcKeyConf::StaticLength + 2, resultRef, requestPtr.p->m_senderRef);
-      }
-    }
-  }
-  else
-  {
-    jam();
-    switch(errCode){
-    case 626: // Row not found
-    case 899: // Interpreter_exit_nok
-      jam();
+        if (treeNodePtr.p->m_bits & TreeNode::T_UNIQUE_INDEX_LOOKUP)
+        {
+          /**
+           * If this is a "leaf" unique index lookup
+           *   emit extra TCKEYCONF as would have been done with ordinary
+           *   operation
+           */
+          LocalArenaPoolImpl pool(requestPtr.p->m_arena, m_dependency_map_pool);
+          Local_dependency_map list(pool, treeNodePtr.p->m_dependent_nodes);
+          Dependency_map::ConstDataBufferIterator it;
+          ndbrequire(list.first(it));
+          ndbrequire(list.getSize() == 1); // should only be 1 child
+          Ptr<TreeNode> childPtr;
+          m_treenode_pool.getPtr(childPtr, * it.data);
+          if (childPtr.p->m_bits & TreeNode::T_LEAF)
+          {
+            jam();
+            Uint32 resultRef = childPtr.p->m_lookup_data.m_api_resultRef;
+            Uint32 resultData = childPtr.p->m_lookup_data.m_api_resultData;
+            TcKeyConf* conf = (TcKeyConf*)signal->getDataPtr();
+            conf->apiConnectPtr = RNIL;
+            conf->confInfo = 0;
+            conf->gci_hi = 0;
+            TcKeyConf::setNoOfOperations(conf->confInfo, 1);
+            conf->transId1 = requestPtr.p->m_transId[0];
+            conf->transId2 = requestPtr.p->m_transId[1];
+            conf->operations[0].apiOperationPtr = resultData;
+            conf->operations[0].attrInfoLen =
+              TcKeyConf::DirtyReadBit |getOwnNodeId();
+            sendTCKEYCONF(signal, TcKeyConf::StaticLength + 2, resultRef, requestPtr.p->m_senderRef);
+          }
+        }
+      } // isLookup()
       break;
-    default:
+
+    default: // 'Hard error' : abort query
       jam();
       abort(signal, requestPtr, errCode);
     }
   }
 
-  Uint32 cnt = 2;
-  if (treeNodePtr.p->isLeaf())  // Can't be a lookup-Leaf, asserted above
-    cnt = 1;
-
+  Uint32 cnt = (treeNodePtr.p->isLeaf()) ? 1 : 2;
   ndbassert(requestPtr.p->m_lookup_node_data[Tnode] >= cnt);
   requestPtr.p->m_lookup_node_data[Tnode] -= cnt;
 
@@ -3332,7 +3390,7 @@ Dbspj::lookup_parent_row(Signal* signal,
    *   2) compute hash     (normally TC)
    *   3) get node for row (normally TC)
    */
-  Uint32 err;
+  Uint32 err = 0;
   const LqhKeyReq* src = (LqhKeyReq*)treeNodePtr.p->m_lookup_data.m_lqhKeyReq;
   const Uint32 tableId = LqhKeyReq::getTableId(src->tableSchemaVersion);
   const Uint32 corrVal = rowRef.m_src_correlation;
@@ -3341,6 +3399,22 @@ Dbspj::lookup_parent_row(Signal* signal,
 
   do
   {
+    /**
+     * Test execution terminated due to 'OutOfQueryMemory' which
+     * may happen multiple places below:
+     * - 17040: Fail on any lookup_parent_row()
+     * - 17041: Fail on lookup_parent_row() if 'isLeaf'
+     * - 17042: Fail on lookup_parent_row() if treeNode not root 
+     */
+    if (ERROR_INSERTED_CLEAR(17040) ||
+        (treeNodePtr.p->isLeaf() && ERROR_INSERTED_CLEAR(17041)) ||
+        (treeNodePtr.p->m_parentPtrI != RNIL && ERROR_INSERTED_CLEAR(17042)))
+    {
+      jam();
+      err = DbspjErr::OutOfQueryMemory;
+      break;
+    }
+
     Uint32 ptrI = RNIL;
     if (treeNodePtr.p->m_bits & TreeNode::T_KEYINFO_CONSTRUCTED)
     {
@@ -3512,7 +3586,10 @@ Dbspj::lookup_parent_row(Signal* signal,
     return;
   } while (0);
 
-  ndbrequire(false);
+  // If we fail it will always be a 'hard error' -> abort
+  ndbrequire(err);
+  jam();
+  abort(signal, requestPtr, err);
 }
 
 void
@@ -4121,19 +4198,22 @@ Dbspj::scanFrag_execTRANSID_AI(Signal* s
   jam();
   treeNodePtr.p->m_scanfrag_data.m_rows_received++;
 
-  LocalArenaPoolImpl pool(requestPtr.p->m_arena, m_dependency_map_pool);
-  Local_dependency_map list(pool, treeNodePtr.p->m_dependent_nodes);
-  Dependency_map::ConstDataBufferIterator it;
-
   {
+    LocalArenaPoolImpl pool(requestPtr.p->m_arena, m_dependency_map_pool);
+    Local_dependency_map list(pool, treeNodePtr.p->m_dependent_nodes);
+    Dependency_map::ConstDataBufferIterator it;
+
     for (list.first(it); !it.isNull(); list.next(it))
     {
-      jam();
-      Ptr<TreeNode> childPtr;
-      m_treenode_pool.getPtr(childPtr, * it.data);
-      ndbrequire(childPtr.p->m_info != 0&&childPtr.p->m_info->m_parent_row!=0);
-      (this->*(childPtr.p->m_info->m_parent_row))(signal,
-                                                  requestPtr, childPtr,rowRef);
+      if (likely(requestPtr.p->m_state & Request::RS_RUNNING))
+      {
+        jam();
+        Ptr<TreeNode> childPtr;
+        m_treenode_pool.getPtr(childPtr, * it.data);
+        ndbrequire(childPtr.p->m_info!=0 && childPtr.p->m_info->m_parent_row!=0);
+        (this->*(childPtr.p->m_info->m_parent_row))(signal,
+                                                    requestPtr, childPtr,rowRef);
+      }
     }
   }
 
@@ -5454,19 +5534,22 @@ Dbspj::scanIndex_execTRANSID_AI(Signal* 
 {
   jam();
 
-  LocalArenaPoolImpl pool(requestPtr.p->m_arena, m_dependency_map_pool);
-  Local_dependency_map list(pool, treeNodePtr.p->m_dependent_nodes);
-  Dependency_map::ConstDataBufferIterator it;
-
   {
+    LocalArenaPoolImpl pool(requestPtr.p->m_arena, m_dependency_map_pool);
+    Local_dependency_map list(pool, treeNodePtr.p->m_dependent_nodes);
+    Dependency_map::ConstDataBufferIterator it;
+
     for (list.first(it); !it.isNull(); list.next(it))
     {
-      jam();
-      Ptr<TreeNode> childPtr;
-      m_treenode_pool.getPtr(childPtr, * it.data);
-      ndbrequire(childPtr.p->m_info != 0&&childPtr.p->m_info->m_parent_row!=0);
-      (this->*(childPtr.p->m_info->m_parent_row))(signal,
-                                                  requestPtr, childPtr,rowRef);
+      if (likely(requestPtr.p->m_state & Request::RS_RUNNING))
+      {
+        jam();
+        Ptr<TreeNode> childPtr;
+        m_treenode_pool.getPtr(childPtr, * it.data);
+        ndbrequire(childPtr.p->m_info != 0&&childPtr.p->m_info->m_parent_row!=0);
+        (this->*(childPtr.p->m_info->m_parent_row))(signal,
+                                                    requestPtr, childPtr,rowRef);
+      }
     }
   }
 

=== modified file 'storage/ndb/src/ndbapi/NdbQueryOperation.cpp'
--- a/storage/ndb/src/ndbapi/NdbQueryOperation.cpp	2011-11-09 13:38:13 +0000
+++ b/storage/ndb/src/ndbapi/NdbQueryOperation.cpp	2012-02-22 14:03:58 +0000
@@ -56,6 +56,7 @@ static const bool useDoubleBuffers = tru
 
 /* Various error codes that are not specific to NdbQuery. */
 static const int Err_TupleNotFound = 626;
+static const int Err_FalsePredicate = 899;
 static const int Err_MemoryAlloc = 4000;
 static const int Err_SendFailed = 4002;
 static const int Err_FunctionNotImplemented = 4003;
@@ -225,12 +226,24 @@ public:
 
   void incrOutstandingResults(Int32 delta)
   {
+    if (traceSignals) {
+      ndbout << "incrOutstandingResults: " << m_outstandingResults
+             << ", with: " << delta
+             << endl;
+    }
     m_outstandingResults += delta;
+    assert(!(m_confReceived && m_outstandingResults<0));
   }
 
-  void clearOutstandingResults()
+  void throwRemainingResults()
   {
+    if (traceSignals) {
+      ndbout << "throwRemainingResults: " << m_outstandingResults
+             << endl;
+    }
     m_outstandingResults = 0;
+    m_confReceived = true; 
+    postFetchRelease();
   }
 
   void setConfReceived(Uint32 tcPtrI);
@@ -4977,23 +4990,34 @@ NdbQueryOperationImpl::execTCKEYREF(cons
 
   NdbRootFragment& rootFrag = getQuery().m_rootFrags[0];
 
-  if (ref->errorCode != DbspjErr::NodeFailure)
+  /**
+   * Error may be either a 'soft' or a 'hard' error.
+   * 'Soft error' are regarded 'informational', and we are
+   * allowed to continue execution of the query. A 'hard error'
+   * will terminate query, close comminication, and further
+   * incomming signals to this NdbReceiver will be discarded.
+   */
+  switch (ref->errorCode)
   {
-    // Compensate for children results not produced.
-    // (doSend() assumed all child results to be materialized)
-    Uint32 cnt = 0;
-    cnt += 1; // self
+  case Err_TupleNotFound:  // 'Soft error' : Row not found
+  case Err_FalsePredicate: // 'Soft error' : Interpreter_exit_nok
+  {
+    /**
+     * Need to update 'outstanding' count:
+     * Compensate for children results not produced.
+     * (doSend() assumed all child results to be materialized)
+     */
+    Uint32 cnt = 1; // self
     cnt += getNoOfDescendantOperations();
     if (getNoOfChildOperations() > 0)
     {
       cnt += getNoOfLeafOperations();
     }
     rootFrag.incrOutstandingResults(- Int32(cnt));
+    break;
   }
-  else
-  {
-    // consider frag-batch complete
-    rootFrag.clearOutstandingResults();
+  default:                             // 'Hard error':
+    rootFrag.throwRemainingResults();  // Terminate receive -> complete
   }
 
   bool ret = false;
@@ -5004,7 +5028,6 @@ NdbQueryOperationImpl::execTCKEYREF(cons
 
   if (traceSignals) {
     ndbout << "NdbQueryOperationImpl::execTCKEYREF(): returns:" << ret
-           << ", resultStream= {" << rootFrag.getResultStream(*this) << "}"
            << ", *this=" << *this <<  endl;
   }
   return ret;
@@ -5283,10 +5306,6 @@ NdbOut& operator<<(NdbOut& out, const Nd
   }
   out << "  m_queryImpl: " << &op.m_queryImpl;
   out << "  m_operationDef: " << &op.m_operationDef;
-  for(Uint32 i = 0; i<op.m_queryImpl.getRootFragCount(); i++){
-    NdbRootFragment& rootFrag = op.m_queryImpl.m_rootFrags[i];
-    out << "  m_resultStream[" << i << "]{" << rootFrag.getResultStream(op) << "}";
-  }
   out << " m_isRowNull " << op.m_isRowNull;
   out << " ]";
   return out;

=== modified file 'storage/ndb/src/ndbapi/Ndbif.cpp'
--- a/storage/ndb/src/ndbapi/Ndbif.cpp	2011-09-09 13:13:52 +0000
+++ b/storage/ndb/src/ndbapi/Ndbif.cpp	2012-02-22 14:03:58 +0000
@@ -350,6 +350,7 @@ Ndb::handleReceivedSignal(const NdbApiSi
       else
       {
         tCon = lookupTransactionFromOperation(keyConf);
+        if (tCon == NULL) goto InvalidSignal;
       }
       const BlockReference aTCRef = aSignal->theSendersBlockRef;
 

=== modified file 'storage/ndb/test/ndbapi/testSpj.cpp'
--- a/storage/ndb/test/ndbapi/testSpj.cpp	2011-12-13 12:20:00 +0000
+++ b/storage/ndb/test/ndbapi/testSpj.cpp	2012-02-22 14:03:58 +0000
@@ -31,7 +31,7 @@ static int faultToInject = 0;
 
 enum faultsToInject {
   FI_START = 17001,
-  FI_END = 17020
+  FI_END = 17042
 };
 
 int
@@ -101,7 +101,7 @@ runLookupJoin(NDBT_Context* ctx, NDBT_St
 int
 runLookupJoinError(NDBT_Context* ctx, NDBT_Step* step){
   int loops = ctx->getNumLoops();
-  int joinlevel = ctx->getProperty("JoinLevel", 3);
+  int joinlevel = ctx->getProperty("JoinLevel", 8);
   int records = ctx->getNumRecords();
   int until_stopped = ctx->getProperty("UntilStopped", (Uint32)0);
   Uint32 stepNo = step->getStepNo();
@@ -113,7 +113,12 @@ runLookupJoinError(NDBT_Context* ctx, ND
   HugoQueries hugoTrans(*query);
 
   NdbRestarter restarter;
-  int lookupFaults[] = {17001, 17005, 17006, 17007, 17008};
+  int lookupFaults[] = {
+      17001, 17005, 17006, 17007, 17008,
+      17020, 17021, 17022, // lookup_send() encounter dead node -> NodeFailure
+      17030, 17031, 17032, // LQHKEYREQ reply is LQHKEYREF('Invalid..')
+      17040, 17041, 17042  // lookup_parent_row -> OutOfQueryMemory
+  }; 
   loops =  faultToInject ? 1 : sizeof(lookupFaults)/sizeof(int);
 
   while ((i<loops || until_stopped) && !ctx->isTestStopped())
@@ -124,20 +129,23 @@ runLookupJoinError(NDBT_Context* ctx, ND
     int randomId = rand() % restarter.getNumDbNodes();
     int nodeId = restarter.getDbNodeId(randomId);
 
-    ndbout << endl<< "LookupJoinError: Injecting error "<<  inject_err <<
+    ndbout << "LookupJoinError: Injecting error "<<  inject_err <<
       " in node " << nodeId << " loop "<< i << endl;
 
-    if (restarter.insertErrorInNode(nodeId, inject_err) != 0){
+    if (restarter.insertErrorInNode(nodeId, inject_err) != 0)
+    {
       ndbout << "Could not insert error in node "<< nodeId <<endl;
+      g_info << endl;
       return NDBT_FAILED;
     }
 
     // It'd be better if test could differentiates failures from
     // fault injection and others.
-    if (hugoTrans.runLookupQuery(GETNDB(step), records))
+    // We expect to fail, and it's a failure if we don't
+    if (!hugoTrans.runLookupQuery(GETNDB(step), records))
     {
-      ndbout << "LookUpJoinError can probably fail due to fault injection."<< endl;
-      g_info << endl;
+      g_info << "LookUpJoinError didn't fail as expected."<< endl;
+      // return NDBT_FAILED;
     }
 
     addMask(ctx, (1 << stepNo), "Running");
@@ -188,7 +196,12 @@ runScanJoinError(NDBT_Context* ctx, NDBT
   HugoQueries hugoTrans(* query);
 
   NdbRestarter restarter;
-  int scanFaults[] = {17002, 17004, 17005, 17006, 17007, 17008};
+  int scanFaults[] = {
+      17002, 17004, 17005, 17006, 17007, 17008,
+      17020, 17021, 17022, // lookup_send() encounter dead node -> NodeFailure
+      17030, 17031, 17032, // LQHKEYREQ reply is LQHKEYREF('Invalid..')
+      17040, 17041, 17042  // lookup_parent_row -> OutOfQueryMemory
+  }; 
   loops =  faultToInject ? 1 : sizeof(scanFaults)/sizeof(int);
 
   while ((i<loops || until_stopped) && !ctx->isTestStopped())
@@ -199,23 +212,24 @@ runScanJoinError(NDBT_Context* ctx, NDBT
     int randomId = rand() % restarter.getNumDbNodes();
     int nodeId = restarter.getDbNodeId(randomId);
 
-    ndbout << endl<<"ScanJoin: Injecting error "<<  inject_err <<
+    ndbout << "ScanJoin: Injecting error "<<  inject_err <<
               " in node " << nodeId << " loop "<< i<< endl;
 
-    if (restarter.insertErrorInNode(nodeId, inject_err) != 0){
+    if (restarter.insertErrorInNode(nodeId, inject_err) != 0)
+    {
       ndbout << "Could not insert error in node "<< nodeId <<endl;
       return NDBT_FAILED;
     }
 
     // It'd be better if test could differentiates failures from
     // fault injection and others.
-    if (hugoTrans.runScanQuery(GETNDB(step)))
+    // We expect to fail, and it's a failure if we don't
+    if (!hugoTrans.runScanQuery(GETNDB(step)))
     {
-      ndbout << "runScanJoinError failed probably due to fault injection."<< endl;
+      g_info << "ScanJoinError didn't fail as expected."<< endl;
       // return NDBT_FAILED;
     }
 
-    g_info << endl;
     addMask(ctx, (1 << stepNo), "Running");
     i++;
   }

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.1-telco-7.0-spj-scan-vs-scan branch(ole.john.aske:3587 to 3588) Ole John Aske24 Feb