List:Commits« Previous MessageNext Message »
From:Magnus Blåudd Date:May 18 2011 12:57pm
Subject:bzr commit into mysql-5.5-cluster branch (magnus.blaudd:3340)
View as plain text  
#At file:///data0/magnus/mysql/5.5-cluster/ based on revid:magnus.blaudd@strippedk

 3340 Magnus Blåudd	2011-05-18 [merge]
      Merge 7.0 -> 5.5-cluster

    added:
      mysql-test/suite/ndb_rpl/
      mysql-test/suite/ndb_rpl/my.cnf
      mysql-test/suite/ndb_rpl/r/
      mysql-test/suite/ndb_rpl/t/
      mysql-test/suite/ndb_rpl/t/disabled.def
      storage/ndb/src/kernel/vm/NdbSeqLock.hpp
    renamed:
      mysql-test/suite/rpl_ndb/ndb_master-slave.inc => mysql-test/suite/ndb_rpl/ndb_master-slave.inc
      mysql-test/suite/rpl_ndb/ndb_master-slave_2ch.inc => mysql-test/suite/ndb_rpl/ndb_master-slave_2ch.inc
      mysql-test/suite/rpl_ndb/r/rpl_ndb_2innodb.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_2innodb.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_2myisam.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_2myisam.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_2ndb.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_2ndb.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_2other.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_2other.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_add_column.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_add_column.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_apply_status.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_apply_status.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_auto_inc.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_auto_inc.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_bank.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_bank.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_basic.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_basic.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_binlog_format_errors.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_binlog_format_errors.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_bitfield.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_bitfield.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_blob.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_blob.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_break_3_chain.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_break_3_chain.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_bug22045.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_bug22045.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_check_for_mixed.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_check_for_mixed.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_circular.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_circular.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_circular_2ch.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_simplex.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_circular_simplex.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_conflict.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_conflict.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_conflict_max.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_conflict_max.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_conflict_max_delete_win.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_conflict_max_delete_win.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_conflict_old.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_conflict_old.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_ctype_ucs2_def.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_ctype_ucs2_def.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_advance.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_dd_advance.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_basic.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_dd_basic.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_partitions.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_dd_partitions.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_do_db.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_do_db.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_do_table.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_do_table.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_empty_epoch.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_empty_epoch.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_gap_event.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_gap_event.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_idempotent.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_idempotent.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_ignore_db.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_ignore_db.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_innodb2ndb.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb_trans.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_innodb_trans.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_load.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_load.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_logging.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_logging.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_mix_eng_trans.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_mix_eng_trans.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_mix_innodb.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_mix_innodb.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_tables.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_mixed_tables.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_multi.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_multi.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_myisam2ndb.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_rep_error.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_rep_error.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_rep_ignore.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_rep_ignore.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_skip_gap_event.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_skip_gap_event.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_slave_lsu.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_slave_lsu.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_slave_lsu_anyval.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_slave_lsu_anyval.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_slave_restart.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_slave_restart.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_stm_innodb.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_sync.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_sync.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_ui.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_ui.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_ui2.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_ui2.result
      mysql-test/suite/rpl_ndb/r/rpl_ndb_ui3.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_ui3.result
      mysql-test/suite/rpl_ndb/r/rpl_ndbapi_multi.result => mysql-test/suite/ndb_rpl/r/ndb_rpl_ndbapi_multi.result
      mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result => mysql-test/suite/rpl_ndb/r/rpl_ndb_row_basic.result
      mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result => mysql-test/suite/ndb_rpl/r/rpl_truncate_7ndb.result
      mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb_2.result => mysql-test/suite/ndb_rpl/r/rpl_truncate_7ndb_2.result
      mysql-test/suite/rpl_ndb/t/ndb_apply_status.frm => mysql-test/suite/ndb_rpl/t/ndb_apply_status.frm
      mysql-test/suite/rpl_ndb/t/ndb_conflict_info.inc => mysql-test/suite/ndb_rpl/t/ndb_conflict_info.inc
      mysql-test/suite/rpl_ndb/t/ndb_conflict_info_init.inc => mysql-test/suite/ndb_rpl/t/ndb_conflict_info_init.inc
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2innodb-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_2innodb-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2innodb-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_2innodb-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2innodb.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_2innodb.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2multi_basic.inc => mysql-test/suite/ndb_rpl/t/ndb_rpl_2multi_basic.inc
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2multi_eng.inc => mysql-test/suite/ndb_rpl/t/ndb_rpl_2multi_eng.inc
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2myisam-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_2myisam-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2myisam-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_2myisam-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2myisam.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_2myisam.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2ndb-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_2ndb-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2ndb.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_2ndb.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2other-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_2other-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2other.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_2other.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_add_column.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_add_column.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_apply_status-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_apply_status-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_apply_status.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_apply_status.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_auto_inc.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_auto_inc.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_bank.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_bank.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_basic.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_binlog_format_errors-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_binlog_format_errors-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_binlog_format_errors.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_bitfield.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_bitfield.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_blob.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_blob.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_break_3_chain.cnf => mysql-test/suite/ndb_rpl/t/ndb_rpl_break_3_chain.cnf
      mysql-test/suite/rpl_ndb/t/rpl_ndb_break_3_chain.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_break_3_chain.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_bug22045.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_bug22045.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_check_for_mixed.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_check_for_mixed.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_circular.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_circular.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.cnf => mysql-test/suite/ndb_rpl/t/ndb_rpl_circular_2ch.cnf
      mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_circular_2ch.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_simplex.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_circular_simplex.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_1.inc => mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
      mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_max-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_max.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_max_delete_win-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max_delete_win-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_max_delete_win.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max_delete_win.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_old-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_old-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_old.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_old.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_ctype_ucs2_def-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_ctype_ucs2_def-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_ctype_ucs2_def.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_ctype_ucs2_def.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_advance.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_advance.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_basic.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_basic.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_partitions-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_partitions-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_partitions-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_partitions-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_partitions.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_partitions.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_do_db-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_do_db-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_do_db.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_do_db.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_do_table-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_do_table-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_do_table.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_do_table.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_empty_epoch.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_empty_epoch.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_gap_event-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_gap_event-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_gap_event.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_gap_event.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_get_binlog_events.inc => mysql-test/suite/ndb_rpl/t/ndb_rpl_get_binlog_events.inc
      mysql-test/suite/rpl_ndb/t/rpl_ndb_idempotent.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_idempotent.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_ignore_db-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_ignore_db.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb2ndb-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb2ndb-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb2ndb.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb_trans-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb_trans-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb_trans.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb_trans.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_load.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_load.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_logging.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_logging.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_eng_trans-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_eng_trans-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_eng_trans-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_eng_trans-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_eng_trans.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_eng_trans.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_innodb-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_innodb-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_innodb.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_innodb.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_mixed_tables-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_mixed_tables-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_mixed_tables.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_multi.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_multi.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_binlog_update.cnf => mysql-test/suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.cnf
      mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_binlog_update.inc => mysql-test/suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.inc
      mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update2-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_multi_update2-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_myisam2ndb-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_myisam2ndb.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_relayrotate-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_relayrotate-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_error.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_rep_error.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_ignore-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_rep_ignore-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_ignore.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_rep_ignore.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event-slave.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_skip_gap_event-slave.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_skip_gap_event.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu.cnf => mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu.cnf
      mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu_anyval.cnf => mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu_anyval.cnf
      mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu_anyval.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu_anyval.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_restart.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_restart.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb-master.opt => mysql-test/suite/ndb_rpl/t/ndb_rpl_stm_innodb-master.opt
      mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_stm_innodb.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_sync.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_sync.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_ui.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_ui.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_ui2.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_ui2.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_ui3.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_ui3.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc => mysql-test/suite/ndb_rpl/t/wait_schema_logging.inc
      mysql-test/suite/rpl_ndb/t/rpl_ndb_xxx_innodb.inc => mysql-test/suite/ndb_rpl/t/ndb_rpl_xxx_innodb.inc
      mysql-test/suite/rpl_ndb/t/rpl_ndbapi_multi.test => mysql-test/suite/ndb_rpl/t/ndb_rpl_ndbapi_multi.test
      mysql-test/suite/rpl_ndb/t/rpl_row_basic_7ndb.test => mysql-test/suite/rpl_ndb/t/rpl_ndb_row_basic.test
      mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb.test => mysql-test/suite/ndb_rpl/t/rpl_truncate_7ndb.test
      mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2.test => mysql-test/suite/ndb_rpl/t/rpl_truncate_7ndb_2.test
      mysql-test/suite/rpl_ndb/t/select_ndb_apply_status.inc => mysql-test/suite/ndb_rpl/t/select_ndb_apply_status.inc
    modified:
      mysql-test/mysql-test-run.pl
      mysql-test/suite/ndb/r/ndb_alter_table_online2.result
      mysql-test/suite/ndb/r/ndb_native_default_support.result
      mysql-test/suite/ndb/t/ndb_alter_table_online2.test
      mysql-test/suite/ndb_binlog/t/ndb_binlog_variants.test
      mysql-test/suite/rpl_ndb/t/disabled.def
      mysql-test/suite/rpl_ndb/t/rpl_ndb_UUID.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_blob2.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_commit_afterflush.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_delete_nowhere.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_extra_col_master.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_extra_col_slave.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_func003.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_insert_ignore.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update2.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update3.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_relayrotate.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_row_001.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_row_implicit_commit_binlog.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_sp003.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_sp006.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_trig004.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_all.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_lossy.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_nonlossy.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_strict.test
      storage/ndb/include/kernel/AttributeHeader.hpp
      storage/ndb/include/kernel/signaldata/CreateTab.hpp
      storage/ndb/include/kernel/signaldata/CreateTable.hpp
      storage/ndb/include/kernel/signaldata/DictTabInfo.hpp
      storage/ndb/include/ndb_version.h.in
      storage/ndb/include/ndbapi/NdbDictionary.hpp
      storage/ndb/ndb_configure.m4
      storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp
      storage/ndb/src/common/portlib/NdbMutex.c
      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/DbdihMain.cpp
      storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
      storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp
      storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp
      storage/ndb/src/kernel/vm/LongSignal.cpp
      storage/ndb/src/kernel/vm/LongSignalImpl.hpp
      storage/ndb/src/kernel/vm/SimulatedBlock.cpp
      storage/ndb/src/kernel/vm/SimulatedBlock.hpp
      storage/ndb/src/kernel/vm/mt-asm.h
      storage/ndb/src/kernel/vm/mt.cpp
      storage/ndb/src/kernel/vm/mt.hpp
      storage/ndb/src/ndbapi/Ndb.cpp
      storage/ndb/src/ndbapi/NdbDictionary.cpp
      storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp
      storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp
      storage/ndb/test/ndbapi/testRestartGci.cpp
      storage/ndb/test/run-test/daily-basic-tests.txt
      storage/ndb/test/src/NDBT_Table.cpp
      storage/ndb/tools/select_all.cpp
      mysql-test/suite/ndb_rpl/t/ndb_rpl_2innodb.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_2myisam.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_2ndb.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_2other.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_add_column.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_apply_status.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_auto_inc.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_bank.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_basic.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_binlog_format_errors.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_bitfield.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_blob.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_bug22045.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_check_for_mixed.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_circular_2ch.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_circular_simplex.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
      mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max_delete_win.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_old.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_ctype_ucs2_def.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_advance.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_basic.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_partitions.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_do_db.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_do_table.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_empty_epoch.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_gap_event.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_idempotent.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_ignore_db.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb2ndb.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb_trans.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_load.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_logging.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_eng_trans.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_innodb.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_mixed_tables.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.inc
      mysql-test/suite/ndb_rpl/t/ndb_rpl_myisam2ndb.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_rep_error.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_rep_ignore.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_skip_gap_event.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu.cnf
      mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu_anyval.cnf
      mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu_anyval.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_restart.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_stm_innodb.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_sync.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_ui.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_ui2.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_ui3.test
      mysql-test/suite/ndb_rpl/t/wait_schema_logging.inc
      mysql-test/suite/ndb_rpl/t/ndb_rpl_xxx_innodb.inc
      mysql-test/suite/ndb_rpl/t/ndb_rpl_ndbapi_multi.test
      mysql-test/suite/rpl_ndb/t/rpl_ndb_row_basic.test
      mysql-test/suite/ndb_rpl/t/rpl_truncate_7ndb.test
      mysql-test/suite/ndb_rpl/t/rpl_truncate_7ndb_2.test
=== modified file 'mysql-test/mysql-test-run.pl'
--- a/mysql-test/mysql-test-run.pl	2011-05-12 08:43:50 +0000
+++ b/mysql-test/mysql-test-run.pl	2011-05-18 12:56:24 +0000
@@ -2641,7 +2641,7 @@ sub check_ndbcluster_support ($) {
     mtr_report(" - MySQL Cluster");
     # Enable ndb engine and add more test suites
     $opt_include_ndbcluster = 1;
-    $DEFAULT_SUITES.=",ndb,ndb_binlog,rpl_ndb";
+    $DEFAULT_SUITES.=",ndb,ndb_binlog,rpl_ndb,ndb_rpl";
   }
 
   if ($opt_include_ndbcluster)
@@ -2730,6 +2730,41 @@ sub ndbcluster_wait_started($$){
 }
 
 
+sub ndbcluster_dump($) {
+  my ($cluster)= @_;
+
+  print "\n== Dumping cluster log files\n\n";
+
+  # ndb_mgmd(s)
+  foreach my $ndb_mgmd ( in_cluster($cluster, ndb_mgmds()) )
+  {
+    my $datadir = $ndb_mgmd->value('DataDir');
+
+    # Should find ndb_<nodeid>_cluster.log and ndb_mgmd.log
+    foreach my $file ( glob("$datadir/ndb*.log") )
+    {
+      print "$file:\n";
+      mtr_printfile("$file");
+      print "\n";
+    }
+  }
+
+  # ndb(s)
+  foreach my $ndbd ( in_cluster($cluster, ndbds()) )
+  {
+    my $datadir = $ndbd->value('DataDir');
+
+    # Should find ndbd.log
+    foreach my $file ( glob("$datadir/ndbd.log") )
+    {
+      print "$file:\n";
+      mtr_printfile("$file");
+      print "\n";
+    }
+  }
+}
+
+
 sub ndb_mgmd_wait_started($) {
   my ($cluster)= @_;
 
@@ -5192,6 +5227,13 @@ sub start_servers($) {
     {
       # failed to start
       $tinfo->{'comment'}= "Start of '".$cluster->name()."' cluster failed";
+
+      #
+      # Dump cluster log files to log file to help analyze the
+      # cause of the failed start
+      #
+      ndbcluster_dump($cluster);
+
       return 1;
     }
   }

=== modified file 'mysql-test/suite/ndb/r/ndb_alter_table_online2.result'
--- a/mysql-test/suite/ndb/r/ndb_alter_table_online2.result	2009-10-09 15:48:57 +0000
+++ b/mysql-test/suite/ndb/r/ndb_alter_table_online2.result	2011-05-13 11:42:59 +0000
@@ -75,6 +75,9 @@ name
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 update t1 set c= 0;
+select * from t1;
+pk	a	b	c
+1	5000	5000	5000
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~ Alter table t1 and try to add partitions

=== modified file 'mysql-test/suite/ndb/r/ndb_native_default_support.result'
--- a/mysql-test/suite/ndb/r/ndb_native_default_support.result	2010-11-10 13:39:11 +0000
+++ b/mysql-test/suite/ndb/r/ndb_native_default_support.result	2011-05-17 23:29:55 +0000
@@ -140,6 +140,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 i Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
@@ -178,6 +180,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 pk Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
@@ -246,6 +250,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 i Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
@@ -283,6 +289,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 pk Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
@@ -360,6 +368,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 i Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
@@ -450,6 +460,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 i Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
@@ -497,6 +509,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -538,6 +552,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -587,6 +603,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -630,6 +648,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -672,6 +692,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -714,6 +736,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -758,6 +782,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -805,6 +831,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -847,6 +875,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -891,6 +921,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -936,6 +968,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -985,6 +1019,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -1028,6 +1064,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -1070,6 +1108,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -1112,6 +1152,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -1154,6 +1196,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -1198,6 +1242,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -1245,6 +1291,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 a Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
@@ -1333,6 +1381,8 @@ Row GCI: 1
 SingleUserMode: 0
 ForceVarPart: 1
 FragmentCount: 2
+ExtraRowGciBits: 0
+ExtraRowAuthorBits: 0
 TableStatus: Retrieved
 -- Attributes -- 
 i Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR

=== modified file 'mysql-test/suite/ndb/t/ndb_alter_table_online2.test'
--- a/mysql-test/suite/ndb/t/ndb_alter_table_online2.test	2011-02-02 10:33:25 +0000
+++ b/mysql-test/suite/ndb/t/ndb_alter_table_online2.test	2011-05-18 12:56:24 +0000
@@ -52,7 +52,7 @@ set @t1_id = (select id from ndb_show_ta
 --echo
 
 let $end_mysqlslap= 5000;
---exec $MYSQL_SLAP --silent --query="update test.t1 set a=a+1 where pk=1" -i $end_mysqlslap >> $NDB_TOOLS_OUTPUT &
+--exec $MYSQL_SLAP --query="update test.t1 set a=a+1 where pk=1" -i $end_mysqlslap >> $NDB_TOOLS_OUTPUT &
 
 # wait for 100 updates
 --disable_result_log
@@ -93,7 +93,7 @@ select name from ndb_show_tables_results
 --echo
 
 update t1 set b= 0;
---exec $MYSQL_SLAP --silent --query="update test.t1 set b=b+1 where pk=1" -i $end_mysqlslap >> $NDB_TOOLS_OUTPUT &
+--exec $MYSQL_SLAP --query="update test.t1 set b=b+1 where pk=1" -i $end_mysqlslap >> $NDB_TOOLS_OUTPUT &
 
 # wait for 100 updates
 --disable_result_log
@@ -134,22 +134,32 @@ select name from ndb_show_tables_results
 --echo
 
 update t1 set c= 0;
---exec $MYSQL_SLAP --silent --query="update test.t1 set c=c+1 where pk=1" -i $end_mysqlslap >> $NDB_TOOLS_OUTPUT &
+--exec $MYSQL_SLAP --query="update test.t1 set c=c+1 where pk=1" -i $end_mysqlslap >> $NDB_TOOLS_OUTPUT &
 
 # wait for mysqlslap to end
 --disable_result_log
 --disable_query_log
 --eval select @end:=$end_mysqlslap
 let $val= 1;
+# 10 minutes = 600s sleep 0.1 => 6000
+let $maxwait = 6000;
 while ($val)
 {
   --sleep 0.1
   select @val1:=a,@val2:=b,@val3:=c from t1 where pk=1;
   let $val= `select @end > @val1 || @end > @val2 || @end > @val3`;
+  dec $maxwait;
+
+  if (!$maxwait)
+  {
+    let $val = 0;
+  }
 }
 --enable_result_log
 --enable_query_log
 
+select * from t1;
+
 --echo
 --echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 --echo ~ Alter table t1 and try to add partitions

=== modified file 'mysql-test/suite/ndb_binlog/t/ndb_binlog_variants.test'
--- a/mysql-test/suite/ndb_binlog/t/ndb_binlog_variants.test	2011-02-15 10:38:28 +0000
+++ b/mysql-test/suite/ndb_binlog/t/ndb_binlog_variants.test	2011-05-18 12:56:24 +0000
@@ -35,15 +35,15 @@ create table ba(ks int primary key, st i
 # Wait for each mysqld to startup binlogging
 --let $source_server=mysqld1
 --let $dest_server=mysqld2
-source suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc;
+source suite/ndb_rpl/t/wait_schema_logging.inc;
 
 --let $source_server=mysqld1
 --let $dest_server=mysqld3
-source suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc;
+source suite/ndb_rpl/t/wait_schema_logging.inc;
 
 --let $source_server=mysqld1
 --let $dest_server=mysqld4
-source suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc;
+source suite/ndb_rpl/t/wait_schema_logging.inc;
 
 --disable_query_log
 connection mysqld1;

=== added directory 'mysql-test/suite/ndb_rpl'
=== added file 'mysql-test/suite/ndb_rpl/my.cnf'
--- a/mysql-test/suite/ndb_rpl/my.cnf	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/ndb_rpl/my.cnf	2011-05-18 12:56:24 +0000
@@ -0,0 +1,87 @@
+!include include/default_mysqld.cnf
+!include include/default_ndbd.cnf
+
+[cluster_config]
+TimeBetweenEpochsTimeout = 30000
+
+[cluster_config.1]
+NoOfReplicas=                  2
+ndbd=,
+ndb_mgmd=
+mysqld=,
+ndbapi=,,,,,,,,,
+
+[cluster_config.slave]
+NoOfReplicas=                  1
+ndbd=
+ndb_mgmd=
+mysqld=
+ndbapi=,,,,
+
+[mysqld]
+# Make all mysqlds use cluster
+ndbcluster
+ndb-wait-connected=20
+ndb-wait-setup=120
+ndb-cluster-connection-pool=3
+slave-allow-batching
+ndb-log-orig
+# Turn on bin logging
+log-bin=                       master-bin
+# for performance reasons
+ndb-table-temporary=1
+
+ndb-extra-logging=99
+# Cluster only supports row format
+binlog-format=                 row
+
+[mysqld.1.1]
+
+[mysqld.1.1]
+
+[mysqld.1.slave]
+
+# Append <testname>-slave.opt file to the list of argument used when
+# starting the mysqld
+#!use-slave-opt
+
+log-bin=                      slave-bin
+relay-log=                    slave-relay-bin
+# Cluster only supports row format
+binlog-format=                 row
+
+init-rpl-role=                slave
+log-slave-updates
+master-retry-count=           10
+
+# Values reported by slave when it connect to master
+# and shows up in SHOW SLAVE STATUS;
+report-host=                  127.0.0.1
+report-port=                  @mysqld.1.slave.port
+report-user=                  root
+
+# Configure slave mysqld without innodb, and set myisam
+# as default storage engine(since innodb will be default
+# otherwise starting  from 5.5)
+loose-skip-innodb
+default-storage-engine=myisam
+
+skip-slave-start
+
+# Directory where slaves find the dumps generated by "load data"
+# on the server. The path need to have constant length otherwise
+# test results will vary, thus a relative path is used.
+slave-load-tmpdir=            ../../../tmp
+
+rpl-recovery-rank=            @mysqld.1.slave.server-id
+
+[ENV]
+NDB_CONNECTSTRING=            @mysql_cluster.1.ndb_connectstring
+MASTER_MYPORT=                @mysqld.1.1.port
+MASTER_MYPORT1=               @mysqld.2.1.port
+
+NDB_CONNECTSTRING_SLAVE=      @mysql_cluster.slave.ndb_connectstring
+SLAVE_MYPORT=                 @mysqld.1.slave.port
+SLAVE_MYSOCK=                 @mysqld.1.slave.socket
+
+NDB_BACKUP_DIR=               @cluster_config.ndbd.1.1.BackupDataDir

=== renamed file 'mysql-test/suite/rpl_ndb/ndb_master-slave.inc' => 'mysql-test/suite/ndb_rpl/ndb_master-slave.inc'
=== renamed file 'mysql-test/suite/rpl_ndb/ndb_master-slave_2ch.inc' => 'mysql-test/suite/ndb_rpl/ndb_master-slave_2ch.inc'
=== added directory 'mysql-test/suite/ndb_rpl/r'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_2innodb.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_2innodb.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_2myisam.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_2myisam.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_2ndb.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_2ndb.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_2other.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_2other.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_add_column.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_add_column.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_apply_status.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_apply_status.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_auto_inc.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_auto_inc.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_bank.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_bank.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_basic.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_basic.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_binlog_format_errors.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_binlog_format_errors.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_bitfield.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_bitfield.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_blob.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_blob.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_break_3_chain.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_break_3_chain.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_bug22045.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_bug22045.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_check_for_mixed.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_check_for_mixed.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_circular.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_circular.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_circular_2ch.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_simplex.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_circular_simplex.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_conflict.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_conflict.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_conflict_max.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_conflict_max.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_conflict_max_delete_win.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_conflict_max_delete_win.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_conflict_old.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_conflict_old.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_ctype_ucs2_def.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_ctype_ucs2_def.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_advance.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_dd_advance.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_basic.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_dd_basic.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_partitions.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_dd_partitions.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_do_db.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_do_db.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_do_table.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_do_table.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_empty_epoch.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_empty_epoch.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_gap_event.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_gap_event.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_idempotent.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_idempotent.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_ignore_db.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_ignore_db.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_innodb2ndb.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb_trans.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_innodb_trans.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_load.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_load.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_logging.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_logging.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_mix_eng_trans.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_mix_eng_trans.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_mix_innodb.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_mix_innodb.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_tables.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_mixed_tables.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_multi.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_multi.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_myisam2ndb.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndbapi_multi.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_ndbapi_multi.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_rep_error.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_rep_error.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_rep_ignore.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_rep_ignore.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_skip_gap_event.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_skip_gap_event.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_slave_lsu.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_slave_lsu.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_slave_lsu_anyval.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_slave_lsu_anyval.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_slave_restart.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_slave_restart.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_stm_innodb.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_sync.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_sync.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_ui.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_ui.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_ui2.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_ui2.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_ui3.result' => 'mysql-test/suite/ndb_rpl/r/ndb_rpl_ui3.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result' => 'mysql-test/suite/ndb_rpl/r/rpl_truncate_7ndb.result'
=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb_2.result' => 'mysql-test/suite/ndb_rpl/r/rpl_truncate_7ndb_2.result'
=== added directory 'mysql-test/suite/ndb_rpl/t'
=== added file 'mysql-test/suite/ndb_rpl/t/disabled.def'
--- a/mysql-test/suite/ndb_rpl/t/disabled.def	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/ndb_rpl/t/disabled.def	2011-05-18 12:56:24 +0000
@@ -0,0 +1,20 @@
+##############################################################################
+#
+#  List the test cases that are to be disabled temporarily.
+#
+#  Separate the test case name and the comment with ':'.
+#
+#    <testcasename> : BUG#<xxxx> <date disabled> <disabler> <comment>
+#
+#  Do not use any TAB characters for whitespace.
+#
+##############################################################################
+
+ndb_rpl_ctype_ucs2_def : bug #34661 rpl_ndb_ctype_ucs2_def fails in 6.2
+
+ndb_rpl_break_3_chain : SEAGULL ndb-force-binlog-format-statement
+ndb_rpl_slave_lsu : SEAGULL ndb-force-binlog-format-statement
+ndb_rpl_slave_lsu_anyval : SEAGULL ndb-force-binlog-format-statement
+ndb_rpl_row_implicit_commit_binlog : SEAGULL ndb-force-binlog-format-statement
+
+ndb_rpl_circular_2ch : SEAGULL update test to new rpl scripts

=== renamed file 'mysql-test/suite/rpl_ndb/t/ndb_apply_status.frm' => 'mysql-test/suite/ndb_rpl/t/ndb_apply_status.frm'
=== renamed file 'mysql-test/suite/rpl_ndb/t/ndb_conflict_info.inc' => 'mysql-test/suite/ndb_rpl/t/ndb_conflict_info.inc'
=== renamed file 'mysql-test/suite/rpl_ndb/t/ndb_conflict_info_init.inc' => 'mysql-test/suite/ndb_rpl/t/ndb_conflict_info_init.inc'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2innodb-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2innodb-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2innodb-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2innodb-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2innodb.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2innodb.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_2innodb.test	2011-04-20 12:30:30 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_2innodb.test	2011-05-18 12:56:24 +0000
@@ -42,7 +42,7 @@ set new=on;
 set storage_engine=ndbcluster;
 --enable_query_log
 
---source suite/rpl_ndb/t/rpl_ndb_2multi_eng.inc
+--source suite/ndb_rpl/t/ndb_rpl_2multi_eng.inc
 
 --connection slave
 set @@global.slave_exec_mode= 'STRICT';

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2multi_basic.inc' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2multi_basic.inc'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2multi_eng.inc' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2multi_eng.inc'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2myisam-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2myisam-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2myisam-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2myisam-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2myisam.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2myisam.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_2myisam.test	2011-04-20 12:30:30 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_2myisam.test	2011-05-18 12:56:24 +0000
@@ -41,7 +41,7 @@ set new=on;
 set storage_engine=ndbcluster;
 --enable_query_log
 
---source suite/rpl_ndb/t/rpl_ndb_2multi_eng.inc
+--source suite/ndb_rpl/t/ndb_rpl_2multi_eng.inc
 
 --connection slave
 set @@global.slave_exec_mode= 'STRICT';

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2ndb-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2ndb-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2ndb.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2ndb.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_2ndb.test	2011-04-20 12:10:50 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_2ndb.test	2011-05-13 07:40:50 +0000
@@ -6,7 +6,7 @@
 ##############################################################
 --source include/have_binlog_format_mixed_or_row.inc
 --source include/have_ndb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 # On master use NDB as storage engine.
 connection master;
@@ -16,5 +16,5 @@ SET storage_engine=ndb;
 --echo === NDB -> NDB ===
 --echo
 connection slave;
---source suite/rpl_ndb/t/rpl_ndb_2multi_basic.inc
+--source suite/ndb_rpl/t/ndb_rpl_2multi_basic.inc
 --source include/rpl_end.inc

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2other-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2other-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_2other.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_2other.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_2other.test	2011-04-20 14:42:32 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_2other.test	2011-05-18 12:56:24 +0000
@@ -41,7 +41,7 @@ SET @old_slave_storage_engine=@@global.s
 SET @@global.storage_engine=myisam;
 
 --source include/start_slave.inc
---source suite/rpl_ndb/t/rpl_ndb_2multi_basic.inc
+--source suite/ndb_rpl/t/ndb_rpl_2multi_basic.inc
 --source include/rpl_connection_slave.inc
 --source include/stop_slave.inc
 
@@ -56,7 +56,7 @@ alter table mysql.ndb_apply_status engin
 SET @@global.storage_engine=innodb;
 
 --source include/start_slave.inc
---source suite/rpl_ndb/t/rpl_ndb_2multi_basic.inc
+--source suite/ndb_rpl/t/ndb_rpl_2multi_basic.inc
 --source include/rpl_connection_slave.inc
 --source include/stop_slave.inc
 

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_add_column.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_add_column.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_add_column.test	2011-04-15 08:47:11 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_add_column.test	2011-05-18 12:56:24 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/ndb_have_online_alter.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 #
 # Test add column

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_apply_status-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_apply_status-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_apply_status.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_apply_status.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_apply_status.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_apply_status.test	2011-05-13 07:40:50 +0000
@@ -7,7 +7,7 @@
 
 # The table might already have been created by mysqld -> ignore error
 --error 0,1
-copy_file $MYSQL_TEST_DIR/suite/rpl_ndb/t/ndb_apply_status.frm $MYSQLTEST_VARDIR/master-data/mysql/ndb_apply_status.frm;
+copy_file $MYSQL_TEST_DIR/suite/ndb_rpl/t/ndb_apply_status.frm $MYSQLTEST_VARDIR/master-data/mysql/ndb_apply_status.frm;
 --disable_result_log
 --disable_abort_on_error
 select * from mysql.ndb_apply_status;
@@ -17,7 +17,7 @@ select * from mysql.ndb_apply_status;
 
 -- source include/have_ndb.inc
 -- source include/have_binlog_format_mixed_or_row.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source suite/ndb_rpl/ndb_master-slave.inc
 
 #
 # Bug#28170 replicate-ignore-db=mysql should not ignore mysql.ndb_apply_status

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_auto_inc.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_auto_inc.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_auto_inc.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_auto_inc.test	2011-05-13 07:40:50 +0000
@@ -8,7 +8,7 @@
 #####################################
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --echo ***************** Test 1 ************************
 --echo

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_bank.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_bank.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_bank.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_bank.test	2011-05-13 07:40:50 +0000
@@ -13,7 +13,7 @@
 --source include/have_ndb.inc
 --source include/have_ndb_extra.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 # kill any trailing processes
 --system killall lt-bankTransactionMaker lt-bankTimer lt-bankMakeGL || true

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_basic.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test	2011-04-15 12:46:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_basic.test	2011-05-18 12:56:24 +0000
@@ -2,7 +2,7 @@
 --source include/ndb_have_online_alter.inc
 #error message differs slightly with statement based replication
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 -- disable_query_log
 call mtr.add_suppression("Slave: Got error 146 during COMMIT Error_code: 1180");

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_binlog_format_errors-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_binlog_format_errors-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_binlog_format_errors.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors.test	2011-04-19 11:17:14 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_binlog_format_errors.test	2011-05-18 12:56:24 +0000
@@ -29,11 +29,11 @@
 --source include/have_binlog_format_row.inc
 --source include/have_ndb.inc
 --source include/have_innodb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 disable_query_log;
 call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
-call mtr.add_suppression("Slave: Cannot execute statement: impossible to write to binary log");
+call mtr.add_suppression("Cannot execute statement: impossible to write to binary log");
 enable_query_log;
 
 --echo ==== Initialize ====

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_bitfield.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_bitfield.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_bitfield.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_bitfield.test	2011-05-13 07:40:50 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 #
 # Verifies replication of bit fields

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_blob.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_blob.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_blob.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_blob.test	2011-05-18 12:56:24 +0000
@@ -1,5 +1,5 @@
 --source include/have_ndb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 #
 # basic test of blob replication for NDB

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_break_3_chain.cnf' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_break_3_chain.cnf'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_break_3_chain.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_break_3_chain.test'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_bug22045.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_bug22045.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_bug22045.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_bug22045.test	2011-05-13 07:40:50 +0000
@@ -2,7 +2,7 @@
 # Test case currently fails for statement-based replication, as BUG#22045 is
 # not fixed in the replication slave thread.
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 # BUG#22045: Got error 839 'Illegal null attribute' from NDBCLUSTER when 'Replace Into'.
 # Check that REPLACE INTO replicates correctly with partial value list and with/without blobs.

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_check_for_mixed.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_check_for_mixed.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_check_for_mixed.test	2011-04-11 13:34:50 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_check_for_mixed.test	2011-05-13 07:40:50 +0000
@@ -10,7 +10,7 @@
 
 --source include/have_ndb.inc
 --source include/have_log_bin.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 disable_query_log;
 # so that both ROW and MIXED is output as MIXED

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_circular.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_circular.test'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.cnf' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_circular_2ch.cnf'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_circular_2ch.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_circular_2ch.test	2011-05-13 07:40:50 +0000
@@ -5,7 +5,7 @@
 # independent channels between two clusters
 #############################################################
 --source include/have_ndb.inc
---source suite/rpl_ndb/ndb_master-slave_2ch.inc
+--source suite/ndb_rpl/ndb_master-slave_2ch.inc
 --source include/have_binlog_format_mixed_or_row.inc
 --echo
 

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_simplex.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_circular_simplex.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_simplex.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_circular_simplex.test	2011-05-18 12:56:24 +0000
@@ -1,5 +1,5 @@
 --source include/have_ndb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 connection master;
 CREATE TABLE t1 (a int key, b int) ENGINE=NDB;

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict.test	2011-05-13 07:40:50 +0000
@@ -4,7 +4,7 @@
 #
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --disable_query_log
 --connection master

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_1.inc' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_1.inc'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_1.inc	2011-03-16 11:07:13 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_1.inc	2011-05-13 07:40:50 +0000
@@ -1,5 +1,5 @@
 --connection slave
---source suite/rpl_ndb/t/ndb_conflict_info_init.inc
+--source suite/ndb_rpl/t/ndb_conflict_info_init.inc
 
 --connection master
 
@@ -32,7 +32,7 @@ commit;
 --connection slave
 select * from t1 order by a, d;
 select * from t2 order by a, d;
---source suite/rpl_ndb/t/ndb_conflict_info.inc
+--source suite/ndb_rpl/t/ndb_conflict_info.inc
 
 --echo *** master - update 2 rows in different tables
 --connection master
@@ -43,7 +43,7 @@ update t2 set b="Master t2 a=3 at c=3", 
 --connection slave
 select * from t1 order by a, d;
 select * from t2 order by a, d;
---source suite/rpl_ndb/t/ndb_conflict_info.inc
+--source suite/ndb_rpl/t/ndb_conflict_info.inc
 
 --echo *** master - delete all
 --connection master
@@ -54,8 +54,8 @@ delete from t2;
 --connection slave
 select * from t1 order by a, d;
 select * from t2 order by a, d;
---source suite/rpl_ndb/t/ndb_conflict_info.inc
---source suite/rpl_ndb/t/ndb_conflict_info_init.inc
+--source suite/ndb_rpl/t/ndb_conflict_info.inc
+--source suite/ndb_rpl/t/ndb_conflict_info_init.inc
 
 --echo ************************
 --echo * start conflict testing
@@ -76,7 +76,7 @@ commit;
 --echo *** slave - check conflict info, no conflicts yet
 --sync_slave_with_master
 --connection slave
---source suite/rpl_ndb/t/ndb_conflict_info.inc
+--source suite/ndb_rpl/t/ndb_conflict_info.inc
 
 --echo *** slave - check insert some data
 select * from t1 order by a, d;
@@ -110,7 +110,7 @@ commit;
 --echo *** slave - check conflict info, there should be some
 --sync_slave_with_master
 --connection slave
---source suite/rpl_ndb/t/ndb_conflict_info.inc
+--source suite/ndb_rpl/t/ndb_conflict_info.inc
 
 --echo *** slave - check update some data that causes conflicts
 select * from t1 order by a, d;
@@ -133,7 +133,7 @@ commit;
 --echo *** slave - check conflict info, change depends on calling test
 --sync_slave_with_master
 --connection slave
---source suite/rpl_ndb/t/ndb_conflict_info.inc
+--source suite/ndb_rpl/t/ndb_conflict_info.inc
 
 --echo *** slave - check higer timestamp
 select * from t1 order by a, d;

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_max-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_max.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_max.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max.test	2011-05-13 07:40:50 +0000
@@ -4,7 +4,7 @@
 #
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --disable_query_log
 --connection master
@@ -33,7 +33,7 @@ create table `test`.`t1$EX`
 --connection master
 insert into mysql.ndb_replication values ("test", "t1", 0, NULL, "NDB$MAX(X)");
 --let col_type = int unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** Test 2 ********************************************************
 --echo * test native NDB\$MAX() conflict resolution
@@ -44,7 +44,7 @@ insert into mysql.ndb_replication values
 set global ndb_log_update_as_write=1;
 update mysql.ndb_replication set binlog_type=4;
 --let col_type = bigint unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** Test 3 ***********************************************************
 --echo * test that setting binlog type really also sets the "USE_UPDATE" flag
@@ -55,7 +55,7 @@ update mysql.ndb_replication set binlog_
 set global ndb_log_update_as_write=0;
 update mysql.ndb_replication set binlog_type=2;
 --let col_type = int unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** Test 4 ***********************************************************
 --echo * test with FULL rows and "USE_UPDATE" flag
@@ -64,7 +64,7 @@ update mysql.ndb_replication set binlog_
 set global ndb_log_update_as_write=0;
 update mysql.ndb_replication set binlog_type=7;
 --let col_type = int unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** test cleanup
 --disable_query_log

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_max_delete_win-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max_delete_win-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_max_delete_win.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max_delete_win.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_max_delete_win.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_max_delete_win.test	2011-05-13 07:40:50 +0000
@@ -4,7 +4,7 @@
 #
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --disable_query_log
 --connection master
@@ -33,7 +33,7 @@ create table `test`.`t1$EX`
 --connection master
 insert into mysql.ndb_replication values ("test", "t1", 0, NULL, "NDB$MAX_DELETE_WIN(X)");
 --let col_type = int unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** Test 2 ********************************************************
 --echo * test native NDB\$MAX_DELETE_WIN() conflict resolution
@@ -44,7 +44,7 @@ insert into mysql.ndb_replication values
 set global ndb_log_update_as_write=1;
 update mysql.ndb_replication set binlog_type=4;
 --let col_type = bigint unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** Test 3 ***********************************************************
 --echo * test that setting binlog type really also sets the "USE_UPDATE" flag
@@ -55,7 +55,7 @@ update mysql.ndb_replication set binlog_
 set global ndb_log_update_as_write=0;
 update mysql.ndb_replication set binlog_type=2;
 --let col_type = int unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** Test 4 ***********************************************************
 --echo * test with FULL rows and "USE_UPDATE" flag
@@ -64,7 +64,7 @@ update mysql.ndb_replication set binlog_
 set global ndb_log_update_as_write=0;
 update mysql.ndb_replication set binlog_type=7;
 --let col_type = int unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** test cleanup
 --disable_query_log

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_old-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_old-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_old.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_old.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_conflict_old.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_conflict_old.test	2011-05-13 07:40:50 +0000
@@ -4,7 +4,7 @@
 #
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --disable_query_log
 --connection master
@@ -33,7 +33,7 @@ create table `test`.`t1$EX`
 --connection master
 insert into mysql.ndb_replication values ("test", "t1", 0, NULL, "NDB$OLD(X)");
 --let col_type = int unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** Test 2 ********************************************************
 --echo * test native NDB\$OLD() conflict resolution
@@ -44,7 +44,7 @@ insert into mysql.ndb_replication values
 set global ndb_log_update_as_write=1;
 update mysql.ndb_replication set binlog_type=4;
 --let col_type = bigint unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** Test 3 ***********************************************************
 --echo * test that setting binlog type really also sets the "USE_UPDATE" flag
@@ -55,7 +55,7 @@ update mysql.ndb_replication set binlog_
 set global ndb_log_update_as_write=0;
 update mysql.ndb_replication set binlog_type=2;
 --let col_type = int unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** Test 4 ***********************************************************
 --echo * test with FULL rows and "USE_UPDATE" flag
@@ -64,7 +64,7 @@ update mysql.ndb_replication set binlog_
 set global ndb_log_update_as_write=0;
 update mysql.ndb_replication set binlog_type=7;
 --let col_type = int unsigned
---source suite/rpl_ndb/t/rpl_ndb_conflict_1.inc
+--source suite/ndb_rpl/t/ndb_rpl_conflict_1.inc
 
 --echo *** test cleanup
 --disable_query_log

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_ctype_ucs2_def-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_ctype_ucs2_def-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_ctype_ucs2_def.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_ctype_ucs2_def.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_ctype_ucs2_def.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_ctype_ucs2_def.test	2011-05-18 12:56:24 +0000
@@ -1,6 +1,6 @@
 --source include/have_ucs2.inc
 --source include/have_ndb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 #
 # MySQL Bug#15276: MySQL ignores collation-server

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_advance.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_advance.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_advance.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_advance.test	2011-05-13 07:40:50 +0000
@@ -7,7 +7,7 @@
 --source include/have_binlog_format_mixed_or_row.inc
 --source include/ndb_default_cluster.inc
 --source include/not_embedded.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 ######################################################
 # Requirment: Cluster DD and replication must be able#

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_basic.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_basic.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_basic.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_basic.test	2011-05-13 07:40:50 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --disable_warnings
 DROP TABLE IF EXISTS t1;

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_partitions-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_partitions-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_partitions-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_partitions-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_partitions.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_partitions.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_partitions.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_dd_partitions.test	2011-05-13 07:40:50 +0000
@@ -7,7 +7,7 @@
 
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --echo --- Doing pre test cleanup --- 
 

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_do_db-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_do_db-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_do_db.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_do_db.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_do_db.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_do_db.test	2011-05-18 12:56:24 +0000
@@ -6,7 +6,7 @@
 ##########################################################
 
 --source include/have_ndb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --disable_warnings
 DROP DATABASE IF EXISTS replica;

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_do_table-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_do_table-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_do_table.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_do_table.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_do_table.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_do_table.test	2011-05-18 12:56:24 +0000
@@ -6,7 +6,7 @@
 ##########################################################
 
 --source include/have_ndb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --disable_warnings
 DROP TABLE IF EXISTS t1, t2;

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_empty_epoch.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_empty_epoch.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_empty_epoch.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_empty_epoch.test	2011-05-13 07:40:50 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 CREATE TABLE t1 (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_gap_event-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_gap_event-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_gap_event.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_gap_event.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_gap_event.test	2011-05-12 09:52:16 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_gap_event.test	2011-05-16 06:50:14 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --connection master
 create table t1(pk int not null primary key, i int) engine = ndb;

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_get_binlog_events.inc' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_get_binlog_events.inc'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_idempotent.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_idempotent.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_idempotent.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_idempotent.test	2011-05-18 12:56:24 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 #
 # Currently test only works with ndb since it retrieves "old"

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_ignore_db-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_ignore_db.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_ignore_db.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_ignore_db.test	2011-05-13 07:40:50 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 # We are not binlogging changes to the mysql db.  Check
 # that changes to tables in the mysql db are not replicated

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb2ndb-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb2ndb-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb2ndb.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test	2011-04-20 11:50:29 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb2ndb.test	2011-05-13 07:40:50 +0000
@@ -10,7 +10,7 @@
 -- source include/have_innodb.inc
 -- source include/have_ndb.inc
 -- source include/have_binlog_format_mixed_or_row.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source suite/ndb_rpl/ndb_master-slave.inc
 SET storage_engine=innodb;
---source suite/rpl_ndb/t/rpl_ndb_2multi_eng.inc
+--source suite/ndb_rpl/t/ndb_rpl_2multi_eng.inc
 --source include/rpl_end.inc

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb_trans-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb_trans-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb_trans.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb_trans.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb_trans.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_innodb_trans.test	2011-05-18 12:56:24 +0000
@@ -2,7 +2,7 @@
 
 -- source include/have_ndb.inc
 -- source include/have_innodb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source suite/ndb_rpl/ndb_master-slave.inc
 
 create table t1 (a int, unique(a)) engine=ndbcluster;
 create table t2 (a int, unique(a)) engine=innodb;

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_load.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_load.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_load.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_load.test	2011-05-13 07:40:50 +0000
@@ -7,7 +7,7 @@
 --source include/have_ndb.inc
 --source include/have_ndb_extra.inc
 --source include/have_binlog_format_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --disable_warnings
 # reset master

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_logging.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_logging.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_logging.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_logging.test	2011-05-13 07:40:50 +0000
@@ -3,7 +3,7 @@
 #
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --disable_warnings
 --disable_query_log

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_eng_trans-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_eng_trans-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_eng_trans-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_eng_trans-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_eng_trans.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_eng_trans.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_eng_trans.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_eng_trans.test	2011-05-18 12:56:24 +0000
@@ -23,7 +23,7 @@
 
 
 source include/have_ndb.inc;
-source suite/rpl_ndb/ndb_master-slave.inc;
+source suite/ndb_rpl/ndb_master-slave.inc;
 source include/have_innodb.inc;
 
 CREATE TABLE tmyisam (a int) ENGINE = MYISAM;

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_innodb-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_innodb-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_innodb.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_innodb.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_mix_innodb.test	2011-04-19 14:34:27 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_mix_innodb.test	2011-05-13 07:40:50 +0000
@@ -8,10 +8,10 @@
 --source include/have_ndb.inc
 --source include/have_innodb.inc
 --source include/have_binlog_format_mixed.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 --enable_query_log
 let $off_set = 9;
 let $rpl_format = 'MIX';
---source suite/rpl_ndb/t/rpl_ndb_xxx_innodb.inc
+--source suite/ndb_rpl/t/ndb_rpl_xxx_innodb.inc
 
 --source include/rpl_end.inc

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_mixed_tables-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_mixed_tables-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_mixed_tables.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_mixed_tables.test	2011-05-18 12:56:24 +0000
@@ -44,7 +44,7 @@
 
 --source include/have_ndb.inc
 --source include/have_innodb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --echo ---- setup master ----
 

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_multi.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_multi.test'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_binlog_update.cnf' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.cnf'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_binlog_update.inc' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.inc'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_binlog_update.inc	2011-04-27 06:29:23 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.inc	2011-05-13 07:40:50 +0000
@@ -145,7 +145,7 @@ show variables like 'log_bin';
 show variables like 'log_slave_updates';
 --source include/show_binlog_events2.inc
 let $BINLOG_FILENAME=master-bin;
---source suite/rpl_ndb/t/rpl_ndb_get_binlog_events.inc
+--source suite/ndb_rpl/t/ndb_rpl_get_binlog_events.inc
 
 
 connection srv_master1;
@@ -168,7 +168,7 @@ show variables like 'log_bin';
 show variables like 'log_slave_updates';
 --source include/show_binlog_events2.inc
 let $BINLOG_FILENAME=master-bin;
---source suite/rpl_ndb/t/rpl_ndb_get_binlog_events.inc
+--source suite/ndb_rpl/t/ndb_rpl_get_binlog_events.inc
 
 connection srv_slave;
 --echo 
@@ -190,7 +190,7 @@ show variables like 'log_bin';
 show variables like 'log_slave_updates';
 --source include/show_binlog_events2.inc
 let $BINLOG_FILENAME=slave-master-bin;
---source suite/rpl_ndb/t/rpl_ndb_get_binlog_events.inc
+--source suite/ndb_rpl/t/ndb_rpl_get_binlog_events.inc
 
 connection srv_slave2;
 --echo 
@@ -202,6 +202,6 @@ show variables like 'log_bin';
 show variables like 'log_slave_updates';
 --source include/show_binlog_events2.inc
 let $BINLOG_FILENAME=slave-master-bin;
---source suite/rpl_ndb/t/rpl_ndb_get_binlog_events.inc
+--source suite/ndb_rpl/t/ndb_rpl_get_binlog_events.inc
 
 connection $which_slave;
\ No newline at end of file

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update2-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_multi_update2-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_myisam2ndb-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_myisam2ndb.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test	2011-04-20 11:50:29 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_myisam2ndb.test	2011-05-13 07:40:50 +0000
@@ -9,7 +9,7 @@
 ##############################################################
 -- source include/have_ndb.inc
 -- source include/have_binlog_format_mixed_or_row.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source suite/ndb_rpl/ndb_master-slave.inc
 SET storage_engine=myisam;
---source suite/rpl_ndb/t/rpl_ndb_2multi_eng.inc
+--source suite/ndb_rpl/t/ndb_rpl_2multi_eng.inc
 --source include/rpl_end.inc

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndbapi_multi.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_ndbapi_multi.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndbapi_multi.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_ndbapi_multi.test	2011-05-13 07:40:50 +0000
@@ -1,7 +1,7 @@
 -- source include/have_ndb.inc
 -- source include/have_binlog_format_mixed_or_row.inc
 -- source include/have_ndbapi_examples.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source suite/ndb_rpl/ndb_master-slave.inc
 --let MASTER_MYSOCK=`select @@socket`;
 
 --exec echo Running ndbapi_simple_dual

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_relayrotate-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_relayrotate-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_error.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_rep_error.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_error.test	2010-10-22 15:16:26 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_rep_error.test	2011-05-13 07:40:50 +0000
@@ -4,7 +4,7 @@
 #
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 #
 # wrong schema for the table

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_ignore-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_rep_ignore-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_ignore.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_rep_ignore.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_ignore.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_rep_ignore.test	2011-05-18 12:56:24 +0000
@@ -7,7 +7,7 @@
 ##########################################################
 
 --source include/have_ndb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --disable_warnings
 DROP DATABASE IF EXISTS replica;

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event-slave.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_skip_gap_event-slave.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_skip_gap_event.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_skip_gap_event.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_skip_gap_event.test	2011-05-13 07:40:50 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --connection master
 create table t1(pk int not null primary key, i int) engine = ndb;

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu.cnf' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu.cnf'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu.cnf	2009-09-16 16:04:14 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu.cnf	2011-05-13 07:40:50 +0000
@@ -1 +1 @@
-!include suite/rpl_ndb/t/rpl_ndb_multi_binlog_update.cnf
+!include suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.cnf

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu.test	2011-04-27 06:29:23 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu.test	2011-05-13 07:40:50 +0000
@@ -18,7 +18,7 @@
 #  - Second replicate via srv_slave1 and check all nodes' Binlog contents
 #  - Third replicate via srv_slave2 and check all nodes' Binlog contents
 #
-# Makes use of suite/rpl_ndb/t/rpl_ndb_multi_binlog_update.inc
+# Makes use of suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.inc
 # Originally motivated by bug#45756
 ###############################################################################
 
@@ -66,36 +66,36 @@
 # Check schema op binlogging enabled between servers on cluster1
 --let $source_server=srv_master
 --let $dest_server=srv_master2
-source suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc;
+source suite/ndb_rpl/t/wait_schema_logging.inc;
 
 --let $source_server=srv_master1
 --let $dest_server=srv_master
-source suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc;
+source suite/ndb_rpl/t/wait_schema_logging.inc;
 
 --let $source_server=srv_master1
 --let $dest_server=srv_master2
-source suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc;
+source suite/ndb_rpl/t/wait_schema_logging.inc;
 
 --let $source_server=srv_master2
 --let $dest_server=srv_master
-source suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc;
+source suite/ndb_rpl/t/wait_schema_logging.inc;
 
 # Check schema op binlogging enabled between servers on cluster2
 --let $source_server=srv_slave
 --let $dest_server=srv_slave1
-source suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc;
+source suite/ndb_rpl/t/wait_schema_logging.inc;
 
 --let $source_server=srv_slave
 --let $dest_server=srv_slave2
-source suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc;
+source suite/ndb_rpl/t/wait_schema_logging.inc;
 
 --let $source_server=srv_slave1
 --let $dest_server=srv_slave2
-source suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc;
+source suite/ndb_rpl/t/wait_schema_logging.inc;
 
 --let $source_server=srv_slave2
 --let $dest_server=srv_slave1
-source suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc;
+source suite/ndb_rpl/t/wait_schema_logging.inc;
 
 # Reset state of all Binlogging nodes
 --disable_query_log
@@ -133,7 +133,7 @@ RESET MASTER;
 
 # Run the test script
 --let $which_slave=srv_slave
---source suite/rpl_ndb/t/rpl_ndb_multi_binlog_update.inc
+--source suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.inc
 
 --source include/stop_slave.inc
 
@@ -173,7 +173,7 @@ RESET MASTER;
 
 # Run the test script
 --let $which_slave=srv_slave1
---source suite/rpl_ndb/t/rpl_ndb_multi_binlog_update.inc
+--source suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.inc
 
 --source include/stop_slave.inc
 
@@ -213,7 +213,7 @@ RESET MASTER;
 
 # Run the test script
 --let $which_slave=srv_slave2
---source suite/rpl_ndb/t/rpl_ndb_multi_binlog_update.inc
+--source suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.inc
 
 --source include/stop_slave.inc
 

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu_anyval.cnf' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu_anyval.cnf'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu_anyval.cnf	2010-07-02 11:01:48 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu_anyval.cnf	2011-05-13 07:40:50 +0000
@@ -1,4 +1,4 @@
-!include suite/rpl_ndb/t/rpl_ndb_multi_binlog_update.cnf
+!include suite/ndb_rpl/t/ndb_rpl_multi_binlog_update.cnf
 
 [mysqld]
 # Low ServerId bits and NDB_TEST_ANYVALUE_USERDATA below

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu_anyval.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu_anyval.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_lsu_anyval.test	2010-07-02 11:01:48 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_lsu_anyval.test	2011-05-13 07:40:50 +0000
@@ -36,4 +36,4 @@
 #        into the binlog of the slave running with --log-slave-updates on.
 ###############################################################################
 --source include/have_debug.inc
---source suite/rpl_ndb/t/rpl_ndb_slave_lsu.test
+--source suite/ndb_rpl/t/ndb_rpl_slave_lsu.test

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_restart.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_restart.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_slave_restart.test	2011-04-08 12:52:26 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_slave_restart.test	2011-05-13 07:40:50 +0000
@@ -1,6 +1,6 @@
 --source include/have_multi_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 # note: server2 is another "master" connected to the master cluster
 

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb-master.opt' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_stm_innodb-master.opt'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_stm_innodb.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb.test	2011-04-20 09:58:58 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_stm_innodb.test	2011-05-18 12:56:24 +0000
@@ -9,12 +9,12 @@
 --disable_query_log
 --source include/have_ndb.inc
 --source include/have_innodb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 --enable_query_log
 
 # statement format is supported because master uses innodb
 SET binlog_format = STATEMENT;
 let $off_set = 6;
 let $rpl_format = 'SBR';
---source suite/rpl_ndb/t/rpl_ndb_xxx_innodb.inc
+--source suite/ndb_rpl/t/ndb_rpl_xxx_innodb.inc
 --source include/rpl_end.inc

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_sync.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_sync.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_sync.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_sync.test	2011-05-18 12:56:24 +0000
@@ -2,7 +2,7 @@
 --source include/ndb_default_cluster.inc
 --source include/not_embedded.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 #
 # Currently test only works with ndb since it retrieves "old"

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_ui.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_ui.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_ui.test	2011-04-28 07:47:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_ui.test	2011-05-13 07:40:50 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 #
 # Slave behaviour when replicating unique index operations

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_ui2.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_ui2.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_ui2.test	2011-05-03 20:40:59 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_ui2.test	2011-05-16 06:50:14 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 --connection master
 

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_ui3.test' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_ui3.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_ui3.test	2011-04-28 07:47:53 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_ui3.test	2011-05-13 07:40:50 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 
 #
 # Slave behaviour when replicating unique index operations

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_xxx_innodb.inc' => 'mysql-test/suite/ndb_rpl/t/ndb_rpl_xxx_innodb.inc'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_xxx_innodb.inc	2011-04-20 09:58:58 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_xxx_innodb.inc	2011-05-18 12:56:24 +0000
@@ -45,7 +45,7 @@ insert into t1 values (1,2);
 --echo
 
 --sync_slave_with_master
---source suite/rpl_ndb/t/select_ndb_apply_status.inc
+--source suite/ndb_rpl/t/select_ndb_apply_status.inc
 
 --echo
 
@@ -85,7 +85,7 @@ commit;
 --echo
 
 --sync_slave_with_master
---source suite/rpl_ndb/t/select_ndb_apply_status.inc
+--source suite/ndb_rpl/t/select_ndb_apply_status.inc
 
 connection master;
 --let $binlog_start= $start_pos
@@ -158,7 +158,7 @@ SET AUTOCOMMIT=1;
 --enable_query_log
 
 --sync_slave_with_master
---source suite/rpl_ndb/t/select_ndb_apply_status.inc
+--source suite/ndb_rpl/t/select_ndb_apply_status.inc
 
 --echo
 
@@ -208,7 +208,7 @@ SET AUTOCOMMIT=1;
 --echo
 
 --sync_slave_with_master
---source suite/rpl_ndb/t/select_ndb_apply_status.inc
+--source suite/ndb_rpl/t/select_ndb_apply_status.inc
 
 --echo
 
@@ -256,7 +256,7 @@ SET AUTOCOMMIT=1;
 --enable_query_log
 
 --sync_slave_with_master
---source suite/rpl_ndb/t/select_ndb_apply_status.inc
+--source suite/ndb_rpl/t/select_ndb_apply_status.inc
 
 --echo
 
@@ -281,7 +281,7 @@ DROP DATABASE tpcb;
 
 ####### Commenting out until decision on Bug#27960 ###########
 
-#--source suite/rpl_ndb/t/select_ndb_apply_status.inc
+#--source suite/ndb_rpl/t/select_ndb_apply_status.inc
 
 #connection master;
 #--eval SHOW BINLOG EVENTS in '$log_name' from $start_pos

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb.test' => 'mysql-test/suite/ndb_rpl/t/rpl_truncate_7ndb.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/ndb_rpl/t/rpl_truncate_7ndb.test	2011-05-18 12:56:24 +0000
@@ -1,6 +1,6 @@
 
 --source include/have_ndb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
 --source include/have_binlog_format_mixed_or_row.inc
 
 --disable_query_log

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2.test' => 'mysql-test/suite/ndb_rpl/t/rpl_truncate_7ndb_2.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2.test	2011-03-29 14:09:05 +0000
+++ b/mysql-test/suite/ndb_rpl/t/rpl_truncate_7ndb_2.test	2011-05-13 07:40:50 +0000
@@ -7,4 +7,4 @@
 # Change:  Moved test to rpl_ndb suite, updated location of --source .test file
 
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/t/rpl_truncate_7ndb.test
+--source suite/ndb_rpl/t/rpl_truncate_7ndb.test

=== renamed file 'mysql-test/suite/rpl_ndb/t/select_ndb_apply_status.inc' => 'mysql-test/suite/ndb_rpl/t/select_ndb_apply_status.inc'
=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc' => 'mysql-test/suite/ndb_rpl/t/wait_schema_logging.inc'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_wait_schema_logging.inc	2009-09-16 16:04:14 +0000
+++ b/mysql-test/suite/ndb_rpl/t/wait_schema_logging.inc	2011-05-13 07:40:50 +0000
@@ -1,4 +1,4 @@
-# suite/t/rpl_ndb/rpl_ndb_wait_schema_logging.inc
+# suite/t/rpl_ndb/wait_schema_logging.inc
 #
 # SUMMARY
 #   Waits until schema op performed on $source_server is
@@ -49,8 +49,8 @@ while (`SELECT INSTR("$_event","$wait_bi
 
   connection $source_server;
   --disable_query_log
-  create table rpl_ndb_wait_schema_logging (a int primary key) engine=ndb;
-  drop table rpl_ndb_wait_schema_logging;
+  create table wait_schema_logging (a int primary key) engine=ndb;
+  drop table wait_schema_logging;
   --enable_query_log
   connection $dest_server;
 

=== renamed file 'mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result' => 'mysql-test/suite/rpl_ndb/r/rpl_ndb_row_basic.result'
=== modified file 'mysql-test/suite/rpl_ndb/t/disabled.def'
--- a/mysql-test/suite/rpl_ndb/t/disabled.def	2011-05-10 13:23:51 +0000
+++ b/mysql-test/suite/rpl_ndb/t/disabled.def	2011-05-18 12:56:24 +0000
@@ -10,13 +10,6 @@
 #
 ##############################################################################
 
-rpl_ndb_ctype_ucs2_def : bug #34661 rpl_ndb_ctype_ucs2_def fails in 6.2
 rpl_ndb_set_null       : bug #51100
 
-rpl_ndb_break_3_chain : SEAGULL ndb-force-binlog-format-statement
-rpl_ndb_slave_lsu : SEAGULL ndb-force-binlog-format-statement
-rpl_ndb_slave_lsu_anyval : SEAGULL ndb-force-binlog-format-statement
-rpl_ndb_row_implicit_commit_binlog : SEAGULL ndb-force-binlog-format-statement
-
-rpl_ndb_circular_2ch : SEAGULL update test to new rpl scripts
 

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_UUID.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_UUID.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_UUID.test	2011-05-13 07:40:50 +0000
@@ -3,7 +3,7 @@
 ########################################################
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source include/master-slave.inc
 let $engine_type=NDB;
 --source extra/rpl_tests/rpl_row_UUID.test
 --source include/rpl_end.inc

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_blob2.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_blob2.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_blob2.test	2011-05-18 12:56:24 +0000
@@ -4,7 +4,7 @@
 # code between engine tests     #
 #################################
 -- source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 let $engine_type=NDBCLUSTER;
 -- source extra/rpl_tests/rpl_row_blob.test
 

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_commit_afterflush.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_commit_afterflush.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_commit_afterflush.test	2011-05-18 12:56:24 +0000
@@ -5,7 +5,7 @@
 # By JBM 2004-02-15                 #
 #####################################
 -- source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 let $engine_type=NDB;
 -- source extra/rpl_tests/rpl_commit_after_flush.test
 --source include/rpl_end.inc

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test	2011-05-13 07:40:50 +0000
@@ -25,7 +25,7 @@
 
 --source include/have_ndb.inc
 --source include/have_binlog_format_mixed_or_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source include/master-slave.inc
 let $engine_type= NDB;
 let $temp_engine_type= MEMORY;
 let $show_binlog = 0;

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_delete_nowhere.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_delete_nowhere.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_delete_nowhere.test	2011-05-18 12:56:24 +0000
@@ -3,7 +3,7 @@
 # Share test code between engine tests  #
 #########################################
 --source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 let $engine_type=NDB;
 -- source extra/rpl_tests/rpl_delete_no_where.test
 --source include/rpl_end.inc

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_extra_col_master.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_extra_col_master.test	2011-04-27 08:22:04 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_extra_col_master.test	2011-05-13 07:40:50 +0000
@@ -2,7 +2,7 @@
 # Purpose: To test having extra columns on the master WL#3915
 #############################################################
 -- source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 -- source include/have_binlog_format_mixed_or_row.inc
 
 let $engine_type = 'NDB';

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_extra_col_slave.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_extra_col_slave.test	2011-04-27 08:14:37 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_extra_col_slave.test	2011-05-13 07:40:50 +0000
@@ -1,6 +1,6 @@
 -- source include/have_binlog_format_row.inc
 -- source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 
 #
 # This is a disgrace...but slave randomly spits out these warnings

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_func003.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_func003.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_func003.test	2011-05-18 12:56:24 +0000
@@ -7,7 +7,7 @@
 # reduce test case code           #
 ###################################
 -- source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 let $engine_type=NDB;
 -- source extra/rpl_tests/rpl_row_func003.test
 --source include/rpl_end.inc

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_insert_ignore.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_insert_ignore.test	2011-04-27 08:02:13 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_insert_ignore.test	2011-05-18 12:56:24 +0000
@@ -3,7 +3,7 @@
 #####################################
 -- source include/have_ndb.inc
 -- source include/have_binlog_format_row.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 let $engine_type=NDB;
 -- source extra/rpl_tests/rpl_insert_ignore.test
 --source include/rpl_end.inc

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update2.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update2.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update2.test	2011-05-13 07:40:50 +0000
@@ -7,7 +7,7 @@
 # Run this only for row based replication, as replication of
 # auto_increment values are not supported with NDB as storage engine
 -- source include/have_binlog_format_mixed_or_row.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 
 let $engine_type=NDB;
 --source extra/rpl_tests/rpl_multi_update2.test

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update3.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update3.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update3.test	2011-05-18 12:56:24 +0000
@@ -3,7 +3,7 @@
 # to reuse test code between engine runs                   #
 ############################################################
 -- source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 let $engine_type=NDB;
 -- source extra/rpl_tests/rpl_multi_update3.test
 --source include/rpl_end.inc

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_relayrotate.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_relayrotate.test	2011-04-15 12:45:47 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_relayrotate.test	2011-05-13 07:40:50 +0000
@@ -3,7 +3,7 @@
 # to reuse test code between engine runs                   #
 ############################################################
 -- source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 let $engine_type=NDB;
 -- source extra/rpl_tests/rpl_relayrotate.test
 --source include/rpl_end.inc

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_row_001.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_row_001.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_row_001.test	2011-05-18 12:56:24 +0000
@@ -2,7 +2,7 @@
 # By JBM 2005-02-15 Wrapped to allow reuse of test code#
 ########################################################
 --source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 let $engine_type=NDB;
 -- source extra/rpl_tests/rpl_row_001.test
 --source include/rpl_end.inc

=== renamed file 'mysql-test/suite/rpl_ndb/t/rpl_row_basic_7ndb.test' => 'mysql-test/suite/rpl_ndb/t/rpl_ndb_row_basic.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_row_basic_7ndb.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_row_basic.test	2011-05-13 07:40:50 +0000
@@ -1,6 +1,6 @@
 -- source include/have_ndb.inc
 -- source include/have_binlog_format_mixed_or_row.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 
 let $type= 'NDB' ;
 let $extra_index= ;

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_row_implicit_commit_binlog.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_row_implicit_commit_binlog.test	2011-04-15 13:04:02 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_row_implicit_commit_binlog.test	2011-05-18 12:56:24 +0000
@@ -3,7 +3,7 @@
 ################################################################################
 --source include/have_binlog_format_row.inc
 --source include/have_ndb.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source include/master-slave.inc
 
 --let $engine=NDB
 --source extra/rpl_tests/rpl_implicit_commit_binlog.test

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test	2011-04-08 11:06:53 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test	2011-05-13 07:40:50 +0000
@@ -1,6 +1,6 @@
 -- source include/have_ndb.inc
 -- source include/have_binlog_format_mixed_or_row.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 
 -- let $engine= NDB
 -- source extra/rpl_tests/rpl_set_null.test

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_sp003.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_sp003.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_sp003.test	2011-05-18 12:56:24 +0000
@@ -5,7 +5,7 @@
 # For different engines         #
 #################################
 -- source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 let $engine_type=NDBCLUSTER;
 -- source extra/rpl_tests/rpl_row_sp003.test
 --source include/rpl_end.inc

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_sp006.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_sp006.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_sp006.test	2011-05-18 12:56:24 +0000
@@ -5,7 +5,7 @@
 # For different engines         #
 #################################
 -- source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 let $engine_type=NDBCLUSTER;
 -- source extra/rpl_tests/rpl_row_sp006.test
 --source include/rpl_end.inc

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_trig004.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_trig004.test	2011-04-14 15:40:04 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_trig004.test	2011-05-18 12:56:24 +0000
@@ -8,7 +8,7 @@
 
 # Includes
 -- source include/have_ndb.inc
--- source suite/rpl_ndb/ndb_master-slave.inc
+-- source include/master-slave.inc
 let $engine_type=NDB;
 -- source extra/rpl_tests/rpl_trig004.test
 

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_all.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_all.test	2011-05-10 12:32:21 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_all.test	2011-05-18 12:56:24 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source include/master-slave.inc
 let $engine_type=NDBCLUSTER;
 
 connection slave;

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_lossy.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_lossy.test	2011-05-10 12:32:21 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_lossy.test	2011-05-18 12:56:24 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source include/master-slave.inc
 let $engine_type=NDBCLUSTER;
 
 connection slave;

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_nonlossy.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_nonlossy.test	2011-05-10 12:32:21 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_nonlossy.test	2011-05-18 12:56:24 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source include/master-slave.inc
 let $engine_type=NDBCLUSTER;
 
 connection slave;

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_strict.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_strict.test	2011-05-10 12:32:21 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_typeconv_strict.test	2011-05-18 12:56:24 +0000
@@ -1,6 +1,6 @@
 --source include/have_ndb.inc
 --source include/have_binlog_format_row.inc
---source suite/rpl_ndb/ndb_master-slave.inc
+--source include/master-slave.inc
 let $engine_type=NDBCLUSTER;
 
 connection slave;

=== modified file 'storage/ndb/include/kernel/AttributeHeader.hpp'
--- a/storage/ndb/include/kernel/AttributeHeader.hpp	2011-02-01 23:27:25 +0000
+++ b/storage/ndb/include/kernel/AttributeHeader.hpp	2011-05-17 23:29:55 +0000
@@ -66,6 +66,17 @@ public:
   STATIC_CONST( CORR_FACTOR64 = 0xFFE8 ); // including root-frag
 
   /**
+   * 64-bit row gci (extending lower if not sufficient bits)
+   *   read-only
+   */
+  STATIC_CONST( ROW_GCI64    = 0xFFE7);
+
+  /**
+   * Row author... autoset to 0, can be over written
+   */
+  STATIC_CONST( ROW_AUTHOR    = 0xFFE6);
+
+  /**
    * Optimize pseudo column and optimization options
    */
   STATIC_CONST( OPTIMIZE     = 0xFFE0 );          //pseudo column id to optimize

=== modified file 'storage/ndb/include/kernel/signaldata/CreateTab.hpp'
--- a/storage/ndb/include/kernel/signaldata/CreateTab.hpp	2011-02-15 10:52:32 +0000
+++ b/storage/ndb/include/kernel/signaldata/CreateTab.hpp	2011-05-17 23:29:55 +0000
@@ -24,7 +24,7 @@
 struct CreateTabReq
 {
   STATIC_CONST( SignalLength = 6 );
-  STATIC_CONST( SignalLengthLDM = 6 + 10 );
+  STATIC_CONST( SignalLengthLDM = 6 + 11 );
 
   enum RequestType {
   };
@@ -49,6 +49,7 @@ struct CreateTabReq
   Uint32 noOfKeyAttr;
   Uint32 checksumIndicator;
   Uint32 GCPIndicator;
+  Uint32 extraRowAuthorBits;
 
   SECTION( DICT_TAB_INFO = 0 );
   SECTION( FRAGMENTATION = 1 );

=== modified file 'storage/ndb/include/kernel/signaldata/CreateTable.hpp'
--- a/storage/ndb/include/kernel/signaldata/CreateTable.hpp	2011-02-01 23:27:25 +0000
+++ b/storage/ndb/include/kernel/signaldata/CreateTable.hpp	2011-05-17 23:29:55 +0000
@@ -75,7 +75,8 @@ struct CreateTableRef {
     OutOfStringBuffer = 773,
     NoLoggingTemporaryTable = 778,
     InvalidHashMap = 790,
-    TableDefinitionTooBig = 793
+    TableDefinitionTooBig = 793,
+    FeatureRequiresUpgrade = 794
   };
 
   Uint32 senderRef;

=== modified file 'storage/ndb/include/kernel/signaldata/DictTabInfo.hpp'
--- a/storage/ndb/include/kernel/signaldata/DictTabInfo.hpp	2011-02-21 12:34:53 +0000
+++ b/storage/ndb/include/kernel/signaldata/DictTabInfo.hpp	2011-05-18 12:56:24 +0000
@@ -150,6 +150,9 @@ public:
 
     TableStorageType   = 155,
 
+    ExtraRowGCIBits    = 156,
+    ExtraRowAuthorBits = 157,
+
     TableEnd           = 999,
     
     AttributeName          = 1000, // String, Mandatory
@@ -381,6 +384,9 @@ public:
 
     Uint32 TableStorageType;
 
+    Uint32 ExtraRowGCIBits;
+    Uint32 ExtraRowAuthorBits;
+
     Table() {}
     void init();
   };

=== modified file 'storage/ndb/include/ndb_version.h.in'
--- a/storage/ndb/include/ndb_version.h.in	2011-04-28 07:47:53 +0000
+++ b/storage/ndb/include/ndb_version.h.in	2011-05-17 23:29:55 +0000
@@ -628,4 +628,28 @@ ndbd_deferred_unique_constraints(Uint32 
   return x >= NDBD_DEFERRED_UNIQUE_CONSTRAINTS_71;
 }
 
+#define NDBD_TUP_EXTRABITS_70 NDB_MAKE_VERSION(7,0,25)
+#define NDBD_TUP_EXTRABITS_71 NDB_MAKE_VERSION(7,1,14)
+#define NDBD_TUP_EXTRABITS_72 NDB_MAKE_VERSION(7,2,1)
+
+static
+inline
+int
+ndb_tup_extrabits(Uint32 x)
+{
+  {
+    const Uint32 major = (x >> 16) & 0xFF;
+    const Uint32 minor = (x >>  8) & 0xFF;
+
+    if (major == 7 && minor < 2)
+    {
+      if (minor == 0)
+        return x >= NDBD_TUP_EXTRABITS_70;
+      else if (minor == 1)
+        return x >= NDBD_TUP_EXTRABITS_71;
+    }
+    return x >= NDBD_TUP_EXTRABITS_72;
+  }
+}
+
 #endif

=== modified file 'storage/ndb/include/ndbapi/NdbDictionary.hpp'
--- a/storage/ndb/include/ndbapi/NdbDictionary.hpp	2011-02-16 14:53:53 +0000
+++ b/storage/ndb/include/ndbapi/NdbDictionary.hpp	2011-05-17 23:29:55 +0000
@@ -603,6 +603,8 @@ public:
     static const Column * RECORDS_IN_RANGE;
     static const Column * ROWID;
     static const Column * ROW_GCI;
+    static const Column * ROW_GCI64;
+    static const Column * ROW_AUTHOR;
     static const Column * ANY_VALUE;
     static const Column * COPY_ROWID;
     static const Column * LOCK_REF;
@@ -1061,6 +1063,18 @@ public:
      */
     void setStorageType(Column::StorageType);
     Column::StorageType getStorageType() const;
+
+    /**
+     * Get/set extra GCI bits (max 31)
+     */
+    void setExtraRowGciBits(Uint32);
+    Uint32 getExtraRowGciBits() const;
+
+    /**
+     * Get/set extra row author bits (max 31)
+     */
+    void setExtraRowAuthorBits(Uint32);
+    Uint32 getExtraRowAuthorBits() const;
 #endif
 
     // these 2 are not de-doxygenated

=== modified file 'storage/ndb/ndb_configure.m4'
--- a/storage/ndb/ndb_configure.m4	2011-04-26 09:41:12 +0000
+++ b/storage/ndb/ndb_configure.m4	2011-05-18 12:56:24 +0000
@@ -48,6 +48,9 @@ AC_DEFUN([NDB_CHECK_NDBMTD], [
       AC_TRY_RUN(
         [
         #include "storage/ndb/src/kernel/vm/mt-asm.h"
+        #ifdef NDB_NO_ASM
+        #error "compiler/arch does not have asm needed for ndbmtd"
+        #endif
         int main()
         {
           unsigned int a = 0;

=== modified file 'storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp'
--- a/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp	2011-02-16 14:53:53 +0000
+++ b/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp	2011-05-17 23:29:55 +0000
@@ -73,6 +73,8 @@ DictTabInfo::TableMapping[] = {
   DTIMAP(Table, HashMapObjectId, HashMapObjectId),
   DTIMAP(Table, HashMapVersion, HashMapVersion),
   DTIMAP(Table, TableStorageType, TableStorageType),
+  DTIMAP(Table, ExtraRowGCIBits, ExtraRowGCIBits),
+  DTIMAP(Table, ExtraRowAuthorBits, ExtraRowAuthorBits),
   DTIBREAK(AttributeName)
 };
 
@@ -184,6 +186,9 @@ DictTabInfo::Table::init(){
   HashMapVersion = RNIL;
 
   TableStorageType = NDB_STORAGETYPE_DEFAULT;
+
+  ExtraRowGCIBits = 0;
+  ExtraRowAuthorBits = 0;
 }
 
 void

=== modified file 'storage/ndb/src/common/portlib/NdbMutex.c'
--- a/storage/ndb/src/common/portlib/NdbMutex.c	2011-02-03 14:20:36 +0000
+++ b/storage/ndb/src/common/portlib/NdbMutex.c	2011-05-17 07:57:55 +0000
@@ -88,12 +88,14 @@ int NdbMutex_InitWithName(NdbMutex* pNdb
   defined(HAVE_PTHREAD_MUTEXATTR_INIT) && \
   defined(HAVE_PTHREAD_MUTEXATTR_SETTYPE)
 
-  pthread_mutexattr_t t;
-  pthread_mutexattr_init(&t);
-  pthread_mutexattr_settype(&t, PTHREAD_MUTEX_ERRORCHECK);
-  result = pthread_mutex_init(p, &t);
-  assert(result == 0);
-  pthread_mutexattr_destroy(&t);
+  {
+    pthread_mutexattr_t t;
+    pthread_mutexattr_init(&t);
+    pthread_mutexattr_settype(&t, PTHREAD_MUTEX_ERRORCHECK);
+    result = pthread_mutex_init(p, &t);
+    assert(result == 0);
+    pthread_mutexattr_destroy(&t);
+  }
 #else
   result = pthread_mutex_init(p, 0);
 #endif

=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2011-05-12 09:01:21 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2011-05-17 23:29:55 +0000
@@ -745,6 +745,9 @@ Dbdict::packTableIntoPages(SimplePropert
   w.add(DictTabInfo::SingleUserMode, tablePtr.p->singleUserMode);
   w.add(DictTabInfo::HashMapObjectId, tablePtr.p->hashMapObjectId);
   w.add(DictTabInfo::TableStorageType, tablePtr.p->storageType);
+  w.add(DictTabInfo::ExtraRowGCIBits, tablePtr.p->m_extra_row_gci_bits);
+  w.add(DictTabInfo::ExtraRowAuthorBits, tablePtr.p->m_extra_row_author_bits);
+
 
   if (tablePtr.p->hashMapObjectId != RNIL)
   {
@@ -3914,6 +3917,7 @@ Dbdict::checkPendingSchemaTrans(XSchemaF
         }
       }
 
+      transEntry->m_tableType = DictTabInfo::UndefTableType;
       transEntry->m_tableState = SchemaFile::SF_UNUSED;
       transEntry->m_transId = 0;
     }
@@ -4944,6 +4948,8 @@ void Dbdict::handleTabInfoInit(Signal * 
   tablePtr.p->hashMapObjectId = c_tableDesc.HashMapObjectId;
   tablePtr.p->hashMapVersion = c_tableDesc.HashMapVersion;
   tablePtr.p->storageType = c_tableDesc.TableStorageType;
+  tablePtr.p->m_extra_row_gci_bits = c_tableDesc.ExtraRowGCIBits;
+  tablePtr.p->m_extra_row_author_bits = c_tableDesc.ExtraRowAuthorBits;
 
   tabRequire(tablePtr.p->noOfAttributes <= MAX_ATTRIBUTES_IN_TABLE,
              CreateTableRef::NoMoreAttributeRecords); // bad error code!
@@ -5463,6 +5469,27 @@ void Dbdict::handleTabInfo(SimplePropert
   tabRequire(CHECK_SUMA_MESSAGE_SIZE(keyCount, keyLength, attrCount, recordLength),
              CreateTableRef::RecordTooBig);
 
+  /* Check that all currently running nodes data support
+   * table features
+   */
+  for (Uint32 nodeId=1; nodeId < MAX_NODES; nodeId++)
+  {
+    const NodeInfo& ni = getNodeInfo(nodeId);
+
+    if (ni.m_connected &&
+        (ni.m_type == NODE_TYPE_DB))
+    {
+      /* Check that all nodes support extra bits */
+      if (tablePtr.p->m_extra_row_gci_bits ||
+          tablePtr.p->m_extra_row_author_bits)
+      {
+        tabRequire(ndb_tup_extrabits(ni.m_version),
+                   CreateTableRef::FeatureRequiresUpgrade);
+      }
+    }
+  }
+
+
   if(tablePtr.p->m_tablespace_id != RNIL || counts[3] || counts[4])
   {
     FilegroupPtr tablespacePtr;
@@ -6167,8 +6194,9 @@ Dbdict::createTab_local(Signal* signal,
   req->noOfNullAttributes = tabPtr.p->noOfNullBits;
   req->noOfKeyAttr = tabPtr.p->noOfPrimkey;
   req->checksumIndicator = 1;
-  req->GCPIndicator = 1;
+  req->GCPIndicator = 1 + tabPtr.p->m_extra_row_gci_bits;
   req->noOfAttributes = tabPtr.p->noOfAttributes;
+  req->extraRowAuthorBits = tabPtr.p->m_extra_row_author_bits;
   sendSignal(DBLQH_REF, GSN_CREATE_TAB_REQ, signal,
              CreateTabReq::SignalLengthLDM, JBB);
 
@@ -9487,7 +9515,7 @@ Dbdict::alterTable_fromCommitComplete(Si
     // Remark object as free
     SchemaFile::TableEntry * objEntry =
       objEntry = getTableEntry(alterTabPtr.p->m_newTable_realObjectId);
-    objEntry->m_tableType = DictTabInfo::SchemaTransaction;
+    objEntry->m_tableType = DictTabInfo::UndefTableType;
     objEntry->m_tableState = SchemaFile::SF_UNUSED;
     objEntry->m_transId = 0;
   }
@@ -9579,7 +9607,7 @@ Dbdict::alterTable_abortParse(Signal* si
       // Remark object as free
       SchemaFile::TableEntry * objEntry =
         objEntry = getTableEntry(alterTabPtr.p->m_newTable_realObjectId);
-      objEntry->m_tableType = DictTabInfo::SchemaTransaction;
+      objEntry->m_tableType = DictTabInfo::UndefTableType;
       objEntry->m_tableState = SchemaFile::SF_UNUSED;
       objEntry->m_transId = 0;
     }

=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp	2011-05-12 09:01:21 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp	2011-05-17 23:29:55 +0000
@@ -280,6 +280,8 @@ public:
       TR_Temporary    = 0x8,
       TR_ForceVarPart = 0x10
     };
+    Uint8 m_extra_row_gci_bits;
+    Uint8 m_extra_row_author_bits;
     Uint16 m_bits;
 
     /* Number of attibutes in table */

=== modified file 'storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp'
--- a/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp	2011-04-21 09:21:18 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp	2011-05-17 11:41:50 +0000
@@ -28,6 +28,7 @@
 #include <signaldata/CopyGCIReq.hpp>
 #include <blocks/mutexes.hpp>
 #include <signaldata/LCP.hpp>
+#include <NdbSeqLock.hpp>
 
 #ifdef DBDIH_C
 
@@ -441,7 +442,17 @@ public:
    * TO LOCATE A FRAGMENT AND TO TRANSLATE A KEY OF A TUPLE TO THE FRAGMENT IT
    * BELONGS
    */
-  struct TabRecord {
+  struct TabRecord
+  {
+    TabRecord() { }
+
+    /**
+     * rw-lock that protects multiple parallel DIGETNODES (readers) from
+     *   updates to fragmenation changes (e.g CREATE_FRAGREQ)...
+     *   search for DIH_TAB_WRITE_LOCK
+     */
+    NdbSeqLock m_lock;
+
     /**
      * State for copying table description into pages
      */

=== modified file 'storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp	2011-04-21 09:21:18 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp	2011-05-17 11:41:50 +0000
@@ -15325,6 +15325,7 @@ void Dbdih::initRestorableGciFiles() 
 
 void Dbdih::initTable(TabRecordPtr tabPtr)
 {
+  new (tabPtr.p) TabRecord();
   tabPtr.p->noOfFragChunks = 0;
   tabPtr.p->method = TabRecord::NOTDEFINED;
   tabPtr.p->tabStatus = TabRecord::TS_IDLE;

=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp	2011-04-28 12:04:11 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp	2011-05-17 23:29:55 +0000
@@ -4685,8 +4685,11 @@ void Dblqh::execLQHKEYREQ(Signal* signal
 
   sig2 = lqhKeyReq->variableData[nextPos + 0];
   sig3 = cnewestGci;
+  /* If gci_hi provided, take it and set gci_lo to max value
+   * Otherwise, it will be decided by TUP at commit time as normal
+   */
   regTcPtr->gci_hi = LqhKeyReq::getGCIFlag(Treqinfo) ? sig2 : sig3;
-  regTcPtr->gci_lo = 0;
+  regTcPtr->gci_lo = LqhKeyReq::getGCIFlag(Treqinfo) ? ~Uint32(0) : 0;
   nextPos += LqhKeyReq::getGCIFlag(Treqinfo);
   
   if (LqhKeyReq::getRowidFlag(Treqinfo))

=== modified file 'storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp	2011-05-04 11:45:33 +0000
+++ b/storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp	2011-05-13 08:38:01 +0000
@@ -1150,7 +1150,7 @@ Dbspj::batchComplete(Signal* signal, Ptr
 /**
  * Locate next TreeNode(s) to retrieve more rows from.
  *
- *   Calcule set of 'm_active_nodes' we will receive from in NEXTREQ.
+ *   Calculate set of the 'm_active_nodes' we will receive from in NEXTREQ.
  *   Add these TreeNodes to the cursor list to be iterated.
  */
 void
@@ -1168,7 +1168,7 @@ Dbspj::prepareNextBatch(Signal* signal, 
   if (requestPtr.p->m_bits & Request::RT_REPEAT_SCAN_RESULT)
   {
     /**
-     * If REPEAT_SCAN_RESULT we handle byshy scans by return more *new* rows
+     * If REPEAT_SCAN_RESULT we handle bushy scans by return more *new* rows
      * from only one of the active child scans. If there are multiple 
      * bushy scans not being able to return their current result set in 
      * a single batch, result sets from the other child scans are repeated
@@ -1239,7 +1239,7 @@ Dbspj::prepareNextBatch(Signal* signal, 
   {
     /**
      * If not REPEAT_SCAN_RESULT multiple active TreeNodes may return their 
-     * remaining result simultaneously. In case of byshy-scans, these
+     * remaining result simultaneously. In case of bushy-scans, these
      * concurrent result streams are cross joins of each other
      * in SQL terms. In order to produce the cross joined result, it is
      * the responsibility of the API-client to buffer these streams and
@@ -1415,7 +1415,13 @@ Dbspj::releaseScanBuffers(Ptr<Request> r
         releaseNodeRows(requestPtr, treeNodePtr);
       }
       
-      if (treeNodePtr.p->m_state == TreeNode::TN_ACTIVE)
+      /**
+       * Cleanup ACTIVE nodes fetching more rows in a NEXTREQ,
+       * or nodes being in 'm_active_nodes' as they will 'repeat'.
+       * (and then become active)
+       */
+      if (treeNodePtr.p->m_state == TreeNode::TN_ACTIVE ||
+          requestPtr.p->m_active_nodes.get(treeNodePtr.p->m_node_no))
       {
         jam();
         cleanupChildBranch(requestPtr, treeNodePtr);
@@ -1423,9 +1429,11 @@ Dbspj::releaseScanBuffers(Ptr<Request> r
     }
 
     /**
-      * Build Bitmask of all nodes having TN_ACTIVE childs
+      * Collect ancestors of all nodes which are, or will
+      * become active in NEXTREQ (possibly repeated)
       */
-    if (treeNodePtr.p->m_state == TreeNode::TN_ACTIVE)
+    if (treeNodePtr.p->m_state == TreeNode::TN_ACTIVE ||
+        requestPtr.p->m_active_nodes.get(treeNodePtr.p->m_node_no))
     {
       ancestors_of_active.bitOR(treeNodePtr.p->m_ancestors);
     }

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2011-05-07 06:17:02 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2011-05-17 23:29:55 +0000
@@ -420,6 +420,8 @@ struct Fragoperrec {
   Uint32 attributeCount;
   Uint32 charsetIndex;
   Uint32 m_null_bits[2];
+  Uint32 m_extra_row_gci_bits;
+  Uint32 m_extra_row_author_bits;
   union {
     BlockReference lqhBlockrefFrag;
     Uint32 m_senderRef;
@@ -827,10 +829,11 @@ struct Operationrec {
     unsigned int m_disk_preallocated : 1;
     unsigned int m_load_diskpage_on_commit : 1;
     unsigned int m_wait_log_buffer : 1;
+    unsigned int m_gci_written : 1;
   };
   union {
     OpBitFields op_struct;
-    Uint16 op_bit_fields;
+    Uint32 op_bit_fields;
   };
 
   /*
@@ -1019,7 +1022,9 @@ ArrayPool<TupTriggerData> c_triggerPool;
       TR_Checksum = 0x1, // Need to be 1
       TR_RowGCI   = 0x2,
       TR_ForceVarPart = 0x4,
-      TR_DiskPart  = 0x8
+      TR_DiskPart  = 0x8,
+      TR_ExtraRowGCIBits = 0x10,
+      TR_ExtraRowAuthorBits = 0x20
     };
     Uint16 m_bits;
     Uint16 total_rec_size; // Max total size for entire tuple in words
@@ -1032,6 +1037,7 @@ ArrayPool<TupTriggerData> c_triggerPool;
     Uint16 noOfKeyAttr;
     Uint16 noOfCharsets;
     Uint16 m_dyn_null_bits[2];
+    Uint16 m_no_of_extra_columns; // "Hidden" columns
 
     bool need_expand() const { 
       return m_no_of_attributes > m_attributes[MM].m_no_of_fixsize;
@@ -1057,6 +1063,17 @@ ArrayPool<TupTriggerData> c_triggerPool;
         (disk && m_attributes[DD].m_no_of_varsize > 0);
     }
 
+    template <Uint32 bit> Uint32 getExtraAttrId() const {
+      if (bit == TR_ExtraRowGCIBits)
+        return 0;
+      Uint32 no = 0;
+      if (m_bits & TR_ExtraRowGCIBits)
+        no++;
+      assert(bit == TR_ExtraRowAuthorBits);
+      //if (bit == TR_ExtraRowAuthorBits)
+      return no;
+    }
+
     /**
      * Descriptors for MM and DD part
      */
@@ -2950,10 +2967,15 @@ private:
   void initData();
   void initRecords();
 
+  // 2 words for optional GCI64 + AUTHOR info
+#define EXTRA_COPY_PROC_WORDS 2
+#define MAX_COPY_PROC_LEN (MAX_ATTRIBUTES_IN_TABLE + EXTRA_COPY_PROC_WORDS)
+
+
   void deleteScanProcedure(Signal* signal, Operationrec* regOperPtr);
   void allocCopyProcedure();
   void freeCopyProcedure();
-  void prepareCopyProcedure(Uint32 numAttrs);
+  void prepareCopyProcedure(Uint32 numAttrs, Uint16 tableBits);
   void releaseCopyProcedure();
   void copyProcedure(Signal* signal,
                      TablerecPtr regTabPtr,
@@ -2972,7 +2994,7 @@ private:
 //-----------------------------------------------------------------------------
 
 // Public methods
-  Uint32 getTabDescrOffsets(Uint32, Uint32, Uint32, Uint32*);
+  Uint32 getTabDescrOffsets(Uint32, Uint32, Uint32, Uint32, Uint32*);
   Uint32 getDynTabDescrOffsets(Uint32 MaskSize, Uint32* offset);
   Uint32 allocTabDescr(Uint32 allocSize);
   void releaseTabDescr(Uint32 desc);
@@ -3173,6 +3195,8 @@ private:
   Uint32 czero;
   Uint32 cCopyProcedure;
   Uint32 cCopyLastSeg;
+  Uint32 cCopyOverwrite;
+  Uint32 cCopyOverwriteLen;
 
  // A little bit bigger to cover overwrites in copy algorithms (16384 real size).
 #define ZATTR_BUFFER_SIZE 16384
@@ -3379,15 +3403,19 @@ private:
   void findFirstOp(OperationrecPtr&);
   bool is_rowid_lcp_scanned(const Local_key& key1,
                            const Dbtup::ScanOp& op);
-  void commit_operation(Signal*, Uint32, Tuple_header*, PagePtr,
+  void commit_operation(Signal*, Uint32, Uint32, Tuple_header*, PagePtr,
 			Operationrec*, Fragrecord*, Tablerec*);
   int retrieve_data_page(Signal*,
                          Page_cache_client::Request,
                          OperationrecPtr);
   int retrieve_log_page(Signal*, FragrecordPtr, OperationrecPtr);
 
-  void dealloc_tuple(Signal* signal, Uint32, Page*, Tuple_header*,
+  void dealloc_tuple(Signal* signal, Uint32, Uint32, Page*, Tuple_header*,
 		     KeyReqStruct*, Operationrec*, Fragrecord*, Tablerec*);
+  bool store_extra_row_bits(Uint32, const Tablerec*, Tuple_header*, Uint32,
+                            bool);
+  void read_extra_row_bits(Uint32, const Tablerec*, Tuple_header*, Uint32 *,
+                           bool);
 
   int handle_size_change_after_update(KeyReqStruct* req_struct,
 				      Tuple_header* org,

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp	2011-05-07 06:17:02 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp	2011-05-17 23:29:55 +0000
@@ -147,7 +147,8 @@ Dbtup::is_rowid_lcp_scanned(const Local_
 
 void
 Dbtup::dealloc_tuple(Signal* signal,
-		     Uint32 gci,
+		     Uint32 gci_hi,
+                     Uint32 gci_lo,
 		     Page* page,
 		     Tuple_header* ptr, 
                      KeyReqStruct * req_struct,
@@ -168,7 +169,7 @@ Dbtup::dealloc_tuple(Signal* signal,
     tmpptr.i = m_pgman_ptr.i;
     tmpptr.p = reinterpret_cast<Page*>(m_pgman_ptr.p);
     disk_page_free(signal, regTabPtr, regFragPtr, 
-		   &disk, tmpptr, gci);
+		   &disk, tmpptr, gci_hi);
   }
   
   if (! (bits & (Tuple_header::LCP_SKIP | Tuple_header::ALLOC)) && 
@@ -199,7 +200,12 @@ Dbtup::dealloc_tuple(Signal* signal,
   if (regTabPtr->m_bits & Tablerec::TR_RowGCI)
   {
     jam();
-    * ptr->get_mm_gci(regTabPtr) = gci;
+    * ptr->get_mm_gci(regTabPtr) = gci_hi;
+    if (regTabPtr->m_bits & Tablerec::TR_ExtraRowGCIBits)
+    {
+      Uint32 attrId = regTabPtr->getExtraAttrId<Tablerec::TR_ExtraRowGCIBits>();
+      store_extra_row_bits(attrId, regTabPtr, ptr, gci_lo, /* truncate */true);
+    }
   }
 }
 
@@ -288,7 +294,8 @@ static void dump_buf_hex(unsigned char *
 
 void
 Dbtup::commit_operation(Signal* signal,
-			Uint32 gci,
+			Uint32 gci_hi,
+                        Uint32 gci_lo,
 			Tuple_header* tuple_ptr, 
 			PagePtr pagePtr,
 			Operationrec* regOperPtr, 
@@ -309,6 +316,7 @@ Dbtup::commit_operation(Signal* signal,
   Uint32 fixsize= regTabPtr->m_offsets[MM].m_fix_header_size;
   Uint32 mm_vars= regTabPtr->m_attributes[MM].m_no_of_varsize;
   Uint32 mm_dyns= regTabPtr->m_attributes[MM].m_no_of_dynamic;
+  bool update_gci_at_commit = ! regOperPtr->op_struct.m_gci_written;
   if((mm_vars+mm_dyns) == 0)
   {
     jam();
@@ -399,7 +407,7 @@ Dbtup::commit_operation(Signal* signal,
     if(copy_bits & Tuple_header::DISK_ALLOC)
     {
       jam();
-      disk_page_alloc(signal, regTabPtr, regFragPtr, &key, diskPagePtr, gci);
+      disk_page_alloc(signal, regTabPtr, regFragPtr, &key, diskPagePtr, gci_hi);
     }
     
     if(regTabPtr->m_attributes[DD].m_no_of_varsize == 0)
@@ -419,7 +427,7 @@ Dbtup::commit_operation(Signal* signal,
     {
       jam();
       disk_page_undo_update(diskPagePtr.p, 
-			    &key, dst, sz, gci, logfile_group_id);
+			    &key, dst, sz, gci_hi, logfile_group_id);
     }
     
     memcpy(dst, disk_ptr, 4*sz);
@@ -452,10 +460,17 @@ Dbtup::commit_operation(Signal* signal,
   tuple_ptr->m_header_bits= copy_bits;
   tuple_ptr->m_operation_ptr_i= save;
   
-  if (regTabPtr->m_bits & Tablerec::TR_RowGCI)
+  if (regTabPtr->m_bits & Tablerec::TR_RowGCI  &&
+      update_gci_at_commit)
   {
     jam();
-    * tuple_ptr->get_mm_gci(regTabPtr) = gci;
+    * tuple_ptr->get_mm_gci(regTabPtr) = gci_hi;
+    if (regTabPtr->m_bits & Tablerec::TR_ExtraRowGCIBits)
+    {
+      Uint32 attrId = regTabPtr->getExtraAttrId<Tablerec::TR_ExtraRowGCIBits>();
+      store_extra_row_bits(attrId, regTabPtr, tuple_ptr, gci_lo,
+                           /* truncate */true);
+    }
   }
   
   if (regTabPtr->m_bits & Tablerec::TR_Checksum) {
@@ -837,7 +852,7 @@ skip_disk:
     if(regOperPtr.p->op_struct.op_type != ZDELETE)
     {
       jam();
-      commit_operation(signal, gci_hi, tuple_ptr, page,
+      commit_operation(signal, gci_hi, gci_lo, tuple_ptr, page,
 		       regOperPtr.p, regFragPtr.p, regTabPtr.p); 
     }
     else
@@ -847,7 +862,7 @@ skip_disk:
       {
 	ndbassert(tuple_ptr->m_header_bits & Tuple_header::DISK_PART);
       }
-      dealloc_tuple(signal, gci_hi, page.p, tuple_ptr,
+      dealloc_tuple(signal, gci_hi, gci_lo, page.p, tuple_ptr,
 		    &req_struct, regOperPtr.p, regFragPtr.p, regTabPtr.p);
     }
   } 

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2011-05-07 06:17:02 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2011-05-17 23:29:55 +0000
@@ -192,6 +192,8 @@ Dbtup::insertActiveOpList(OperationrecPt
       prevOpPtr.p->op_struct.m_wait_log_buffer;
     regOperPtr.p->op_struct.m_load_diskpage_on_commit= 
       prevOpPtr.p->op_struct.m_load_diskpage_on_commit;
+    regOperPtr.p->op_struct.m_gci_written=
+      prevOpPtr.p->op_struct.m_gci_written;
     regOperPtr.p->m_undo_buffer_space= prevOpPtr.p->m_undo_buffer_space;
     // start with prev mask (matters only for UPD o UPD)
 
@@ -629,6 +631,8 @@ void Dbtup::execTUPKEYREQ(Signal* signal
                 req_struct.attrinfo_len,
                 attrInfoIVal);
    
+   regOperPtr->op_struct.m_gci_written = 0;
+
    if (Roptype == ZINSERT && Local_key::isInvalid(pageid, pageidx))
    {
      // No tuple allocatated yet
@@ -1114,6 +1118,15 @@ int Dbtup::handleUpdateReq(Signal* signa
   
   if (!req_struct->interpreted_exec) {
     jam();
+
+    if (regTabPtr->m_bits & Tablerec::TR_ExtraRowAuthorBits)
+    {
+      jam();
+      Uint32 attrId =
+        regTabPtr->getExtraAttrId<Tablerec::TR_ExtraRowAuthorBits>();
+
+      store_extra_row_bits(attrId, regTabPtr, dst, /* default */ 0, false);
+    }
     int retValue = updateAttributes(req_struct,
 				    &cinBuffer[0],
 				    req_struct->attrinfo_len);
@@ -1660,6 +1673,14 @@ int Dbtup::handleInsertReq(Signal* signa
     terrorCode = ZAI_INCONSISTENCY_ERROR;
     goto update_error;
   }
+
+  if (regTabPtr->m_bits & Tablerec::TR_ExtraRowAuthorBits)
+  {
+    Uint32 attrId =
+      regTabPtr->getExtraAttrId<Tablerec::TR_ExtraRowAuthorBits>();
+
+    store_extra_row_bits(attrId, regTabPtr, tuple_ptr, /* default */ 0, false);
+  }
   
   if (!regTabPtr->m_default_value_location.isNull())
   {
@@ -2209,6 +2230,28 @@ int Dbtup::interpreterStartLab(Signal* s
 	return -1;
       }
     }
+
+    if ((RlogSize > 0) ||
+        (RfinalUpdateLen > 0))
+    {
+      /* Operation updates row,
+       * reset author pseudo-col before update takes effect
+       * This should probably occur only if the interpreted program
+       * did not explicitly write the value, but that requires a bit
+       * to record whether the value has been written.
+       */
+      Tablerec* regTabPtr = req_struct->tablePtrP;
+      Tuple_header* dst = req_struct->m_tuple_ptr;
+
+      if (regTabPtr->m_bits & Tablerec::TR_ExtraRowAuthorBits)
+      {
+        Uint32 attrId =
+          regTabPtr->getExtraAttrId<Tablerec::TR_ExtraRowAuthorBits>();
+
+        store_extra_row_bits(attrId, regTabPtr, dst, /* default */ 0, false);
+      }
+    }
+
     if (RfinalUpdateLen > 0) {
       jam();
       /* ---------------------------------------------------------------- */

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp	2011-05-07 06:17:02 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp	2011-05-17 23:29:55 +0000
@@ -51,6 +51,8 @@ void Dbtup::initData() 
 
   cCopyProcedure = RNIL;
   cCopyLastSeg = RNIL;
+  cCopyOverwrite = 0;
+  cCopyOverwriteLen = 0;
 
   // Records with constant sizes
   init_list_sizes();

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	2011-05-07 06:17:02 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	2011-05-17 23:29:55 +0000
@@ -76,6 +76,9 @@ Dbtup::execCREATE_TAB_REQ(Signal* signal
   memset(fragOperPtr.p->m_null_bits, 0, sizeof(fragOperPtr.p->m_null_bits));
   fragOperPtr.p->charsetIndex = 0;
   fragOperPtr.p->lqhBlockrefFrag = req->senderRef;
+  fragOperPtr.p->m_extra_row_gci_bits =
+    req->GCPIndicator > 1 ? req->GCPIndicator - 1 : 0;
+  fragOperPtr.p->m_extra_row_author_bits = req->extraRowAuthorBits;
 
   regTabPtr.p->m_createTable.m_fragOpPtrI = fragOperPtr.i;
   regTabPtr.p->m_createTable.defValSectionI = RNIL;
@@ -84,6 +87,9 @@ Dbtup::execCREATE_TAB_REQ(Signal* signal
   regTabPtr.p->m_bits |= (req->checksumIndicator ? Tablerec::TR_Checksum : 0);
   regTabPtr.p->m_bits |= (req->GCPIndicator ? Tablerec::TR_RowGCI : 0);
   regTabPtr.p->m_bits |= (req->forceVarPartFlag? Tablerec::TR_ForceVarPart : 0);
+  regTabPtr.p->m_bits |=
+    (req->GCPIndicator > 1 ? Tablerec::TR_ExtraRowGCIBits : 0);
+  regTabPtr.p->m_bits |= (req->extraRowAuthorBits ? Tablerec::TR_ExtraRowAuthorBits : 0);
 
   regTabPtr.p->m_offsets[MM].m_disk_ref_offset= 0;
   regTabPtr.p->m_offsets[MM].m_null_words= 0;
@@ -118,12 +124,26 @@ Dbtup::execCREATE_TAB_REQ(Signal* signal
   regTabPtr.p->m_no_of_attributes= req->noOfAttributes;
   regTabPtr.p->dynTabDescriptor[MM]= RNIL;
   regTabPtr.p->dynTabDescriptor[DD]= RNIL;
+  regTabPtr.p->m_no_of_extra_columns = 0;
+
+  if (regTabPtr.p->m_bits & Tablerec::TR_ExtraRowGCIBits)
+  {
+    jam();
+    regTabPtr.p->m_no_of_extra_columns++;
+  }
+
+  if (regTabPtr.p->m_bits & Tablerec::TR_ExtraRowAuthorBits)
+  {
+    jam();
+    regTabPtr.p->m_no_of_extra_columns++;
+  }
 
   {
     Uint32 offset[10];
     Uint32 allocSize= getTabDescrOffsets(req->noOfAttributes,
                                          req->noOfCharsets,
                                          req->noOfKeyAttr,
+                                         regTabPtr.p->m_no_of_extra_columns,
                                          offset);
     Uint32 tableDescriptorRef= allocTabDescr(allocSize);
     if (tableDescriptorRef == RNIL)
@@ -178,6 +198,8 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* 
   fragOperPtr.p->attributeCount--;
   const bool lastAttr = (fragOperPtr.p->attributeCount == 0);
 
+  Uint32 extraAttrId = 0;
+
   Uint32 firstTabDesIndex= regTabPtr.p->tabDescriptor + (attrId * ZAD_SIZE);
   setTabDescrWord(firstTabDesIndex, attrDescriptor);
   Uint32 attrLen = AttributeDescriptor::getSize(attrDescriptor);
@@ -321,7 +343,71 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* 
 	       signal, 2, JBB);
     return;
   }
-  
+
+  if (fragOperPtr.p->m_extra_row_gci_bits)
+  {
+    jam();
+
+    const Uint32 bits = fragOperPtr.p->m_extra_row_gci_bits;
+
+    /**
+     * Create attribute descriptor for extra row gci bits...
+     */
+    Uint32 desc = 0;
+    Uint32 off = 0;
+
+    AttributeDescriptor::setSize(desc, 0); // bit
+    AttributeDescriptor::setArraySize(desc, bits);
+    AttributeOffset::setNullFlagPos(off, fragOperPtr.p->m_null_bits[MM]);
+    fragOperPtr.p->m_null_bits[MM] += bits;
+
+    if (fragOperPtr.p->m_null_bits[MM] > AO_NULL_FLAG_POS_MASK)
+    {
+      jam();
+      terrorCode = ZTOO_MANY_BITS_ERROR;
+      goto error;
+    }
+
+    Uint32 idx = regTabPtr.p->tabDescriptor;
+    idx += ZAD_SIZE * (regTabPtr.p->m_no_of_attributes + extraAttrId);
+    setTabDescrWord(idx, desc);
+    setTabDescrWord(idx + 1, off);
+
+    extraAttrId++;
+  }
+
+  if (fragOperPtr.p->m_extra_row_author_bits)
+  {
+    jam();
+
+    const Uint32 bits = fragOperPtr.p->m_extra_row_author_bits;
+
+    /**
+     * Create attribute descriptor for extra row gci bits...
+     */
+    Uint32 desc = 0;
+    Uint32 off = 0;
+
+    AttributeDescriptor::setSize(desc, 0); // bit
+    AttributeDescriptor::setArraySize(desc, bits);
+    AttributeOffset::setNullFlagPos(off, fragOperPtr.p->m_null_bits[MM]);
+    fragOperPtr.p->m_null_bits[MM] += bits;
+
+    if (fragOperPtr.p->m_null_bits[MM] > AO_NULL_FLAG_POS_MASK)
+    {
+      jam();
+      terrorCode = ZTOO_MANY_BITS_ERROR;
+      goto error;
+    }
+
+    Uint32 idx = regTabPtr.p->tabDescriptor;
+    idx += ZAD_SIZE * (regTabPtr.p->m_no_of_attributes + extraAttrId);
+    setTabDescrWord(idx, desc);
+    setTabDescrWord(idx + 1, off);
+
+    extraAttrId++;
+  }
+
 #define BTW(x) ((x+31) >> 5)
   regTabPtr.p->m_offsets[MM].m_null_words= BTW(fragOperPtr.p->m_null_bits[MM]);
   regTabPtr.p->m_offsets[DD].m_null_words= BTW(fragOperPtr.p->m_null_bits[DD]);
@@ -1027,6 +1113,7 @@ Dbtup::handleAlterTablePrepare(Signal *s
     /* Allocate a new (possibly larger) table descriptor buffer. */
     Uint32 allocSize= getTabDescrOffsets(newNoOfAttr, newNoOfCharsets,
                                          newNoOfKeyAttrs,
+                                         regTabPtr->m_no_of_extra_columns,
                                          regAlterTabOpPtr.p->tabDesOffset);
     Uint32 tableDescriptorRef= allocTabDescr(allocSize);
     if (tableDescriptorRef == RNIL) {
@@ -1047,11 +1134,24 @@ Dbtup::handleAlterTablePrepare(Signal *s
       (CHARSET_INFO**)(desc + regAlterTabOpPtr.p->tabDesOffset[2]);
     memcpy(CharsetArray, regTabPtr->charsetArray,
            sizeof(*CharsetArray)*regTabPtr->noOfCharsets);
-    Uint32 *attrDesPtr= desc + regAlterTabOpPtr.p->tabDesOffset[4];
+    Uint32 * const attrDesPtrStart = desc + regAlterTabOpPtr.p->tabDesOffset[4];
+    Uint32 * attrDesPtr = attrDesPtrStart;
     memcpy(attrDesPtr,
            &tableDescriptor[regTabPtr->tabDescriptor].tabDescr,
-           (ZAD_SIZE<<2)*oldNoOfAttr);
-    attrDesPtr+= ZAD_SIZE*oldNoOfAttr;
+           4 * ZAD_SIZE * oldNoOfAttr);
+
+    /**
+     * Copy extra columns descriptors to end of attrDesPtr
+     */
+    {
+      const Uint32 * src = &tableDescriptor[regTabPtr->tabDescriptor].tabDescr;
+      src += ZAD_SIZE * oldNoOfAttr;
+
+      Uint32 * dst = attrDesPtr + (ZAD_SIZE * newNoOfAttr);
+      memcpy(dst, src, 4 * ZAD_SIZE * regTabPtr->m_no_of_extra_columns);
+    }
+
+    attrDesPtr+= ZAD_SIZE * oldNoOfAttr;
 
     /*
       Loop over the new attributes to add.
@@ -1122,6 +1222,7 @@ Dbtup::handleAlterTablePrepare(Signal *s
       *attrDesPtr++= attrDes2;
     }
     ndbassert(newNoOfCharsets==charsetIndex);
+    ndbrequire(attrDesPtr == attrDesPtrStart + (ZAD_SIZE * newNoOfAttr));
 
     regAlterTabOpPtr.p->noOfDynNullBits= dyn_nullbits;
     ndbassert(noDynamic ==
@@ -1841,6 +1942,7 @@ void Dbtup::releaseTabDescr(Tablerec* co
     getTabDescrOffsets(regTabPtr->m_no_of_attributes,
                        regTabPtr->noOfCharsets,
                        regTabPtr->noOfKeyAttr,
+                       regTabPtr->m_no_of_extra_columns,
                        offset);
 
     regTabPtr->tabDescriptor= RNIL;

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp	2011-04-13 08:51:04 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp	2011-05-17 23:29:55 +0000
@@ -25,6 +25,7 @@
 #include <AttributeDescriptor.hpp>
 #include "AttributeOffset.hpp"
 #include <AttributeHeader.hpp>
+#include <dblqh/Dblqh.hpp>
 
 void
 Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
@@ -1743,6 +1744,63 @@ int Dbtup::updateAttributes(KeyReqStruct
       inBufIndex += 1 + sz;
       req_struct->in_buf_index = inBufIndex;
     }
+    else if (attributeId == AttributeHeader::ROW_AUTHOR)
+    {
+      jam();
+      Uint32 sz= ahIn.getDataSize();
+      ndbrequire(sz == 1);
+
+      Uint32 value = * (inBuffer + inBufIndex + 1);
+      Uint32 attrId =
+        regTabPtr->getExtraAttrId<Tablerec::TR_ExtraRowAuthorBits>();
+
+      if (unlikely(!(regTabPtr->m_bits & Tablerec::TR_ExtraRowAuthorBits)))
+      {
+        return -ZATTRIBUTE_ID_ERROR;
+      }
+
+      if (unlikely(store_extra_row_bits(attrId, regTabPtr,
+                                        req_struct->m_tuple_ptr,
+                                        value, /* truncate */ false) == false))
+      {
+        return -ZAI_INCONSISTENCY_ERROR;
+      }
+      inBufIndex += 1 + sz;
+      req_struct->in_buf_index = inBufIndex;
+    }
+    else if (attributeId == AttributeHeader::ROW_GCI64)
+    {
+      jam();
+      Uint32 sz= ahIn.getDataSize();
+      ndbrequire(sz == 2);
+      Uint32 attrId =
+        regTabPtr->getExtraAttrId<Tablerec::TR_ExtraRowGCIBits>();
+      Uint32 gciLo = * (inBuffer + inBufIndex + 1);
+      Uint32 gciHi = * (inBuffer + inBufIndex + 2);
+
+      if (unlikely(!(regTabPtr->m_bits & Tablerec::TR_RowGCI)))
+      {
+        return -ZATTRIBUTE_ID_ERROR;
+      }
+
+      /* Record that GCI has been set explicitly */
+      regOperPtr->op_struct.m_gci_written = 1;
+
+      *req_struct->m_tuple_ptr->get_mm_gci(regTabPtr) = gciHi;
+
+      if (regTabPtr->m_bits & Tablerec::TR_ExtraRowGCIBits)
+      {
+        if (unlikely(store_extra_row_bits(attrId, regTabPtr,
+                                          req_struct->m_tuple_ptr,
+                                          gciLo, /*truncate*/ true) == false))
+        {
+          return -ZAI_INCONSISTENCY_ERROR;
+        }
+      }
+
+      inBufIndex+= 1 + sz;
+      req_struct->in_buf_index = inBufIndex;
+    }
     else
     {
       jam();
@@ -2502,6 +2560,48 @@ Dbtup::read_pseudo(const Uint32 * inBuff
       sz = 2;
     }
     break;
+  case AttributeHeader::ROW_GCI64:
+  {
+    sz = 0;
+    if (req_struct->tablePtrP->m_bits & Tablerec::TR_RowGCI)
+    {
+      Uint32 tmp0 = *req_struct->m_tuple_ptr->get_mm_gci(req_struct->tablePtrP);
+      Uint32 tmp1 = ~Uint32(0);
+      if (req_struct->tablePtrP->m_bits & Tablerec::TR_ExtraRowGCIBits)
+      {
+        Uint32 attrId =
+          req_struct->tablePtrP->getExtraAttrId<Tablerec::TR_ExtraRowGCIBits>();
+        read_extra_row_bits(attrId,
+                            req_struct->tablePtrP,
+                            req_struct->m_tuple_ptr,
+                            &tmp1,
+                            /* extend */ true);
+      }
+      Uint64 tmp = Uint64(tmp0) << 32 | tmp1;
+      memcpy(outBuffer + 1, &tmp, sizeof(tmp));
+      sz = 2;
+    }
+    break;
+  }
+  case AttributeHeader::ROW_AUTHOR:
+  {
+    sz = 0;
+    if (req_struct->tablePtrP->m_bits & Tablerec::TR_ExtraRowAuthorBits)
+    {
+      Uint32 attrId = req_struct->tablePtrP
+        ->getExtraAttrId<Tablerec::TR_ExtraRowAuthorBits>();
+
+      Uint32 tmp;
+      read_extra_row_bits(attrId,
+                          req_struct->tablePtrP,
+                          req_struct->m_tuple_ptr,
+                          &tmp,
+                          /* extend */ false);
+      outBuffer[1] = tmp;
+      sz = 1;
+    }
+    break;
+  }
   case AttributeHeader::ANY_VALUE:
   {
     /**
@@ -3426,3 +3526,85 @@ Dbtup::read_lcp_keys(Uint32 tableId,
 
   return ret;
 }
+
+bool
+Dbtup::store_extra_row_bits(Uint32 extra_no,
+                            const Tablerec* regTabPtr,
+                            Tuple_header* ptr,
+                            Uint32 value,
+                            bool truncate)
+{
+  jam();
+  if (unlikely(extra_no >= regTabPtr->m_no_of_extra_columns))
+    return false;
+  /**
+   * ExtraRowGCIBits are using regTabPtr->m_no_of_attributes + extra_no
+   */
+  Uint32 num_attr= regTabPtr->m_no_of_attributes;
+  Uint32 attrId = num_attr + extra_no;
+  Uint32 descr_start = regTabPtr->tabDescriptor;
+  TableDescriptor *tab_descr = &tableDescriptor[descr_start];
+  ndbrequire(descr_start + (attrId << ZAD_LOG_SIZE)<= cnoOfTabDescrRec);
+
+  Uint32 attrDescriptorIndex = attrId << ZAD_LOG_SIZE;
+  Uint32 attrDescriptor = tab_descr[attrDescriptorIndex].tabDescr;
+  Uint32 attrOffset = tab_descr[attrDescriptorIndex + 1].tabDescr;
+
+  Uint32 pos = AttributeOffset::getNullFlagPos(attrOffset);
+  Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor);
+  Uint32 maxVal = (1 << bitCount) - 1;
+  Uint32 *bits= ptr->get_null_bits(regTabPtr);
+
+  if (value > maxVal)
+  {
+    if (truncate)
+    {
+      value = maxVal;
+    }
+    else
+    {
+      return false;
+    }
+  }
+
+  Uint32 check = regTabPtr->m_offsets[MM].m_null_words;
+  BitmaskImpl::setField(check, bits, pos, bitCount, &value);
+  return true;
+}
+
+void
+Dbtup::read_extra_row_bits(Uint32 extra_no,
+                           const Tablerec* regTabPtr,
+                           Tuple_header* ptr,
+                           Uint32 * value,
+                           bool extend)
+{
+  /**
+   * ExtraRowGCIBits are using regTabPtr->m_no_of_attributes + extra_no
+   */
+  ndbrequire(extra_no < regTabPtr->m_no_of_extra_columns);
+  Uint32 num_attr= regTabPtr->m_no_of_attributes;
+  Uint32 attrId = num_attr + extra_no;
+  Uint32 descr_start = regTabPtr->tabDescriptor;
+  TableDescriptor *tab_descr = &tableDescriptor[descr_start];
+  ndbrequire(descr_start + (attrId << ZAD_LOG_SIZE)<= cnoOfTabDescrRec);
+
+  Uint32 attrDescriptorIndex = attrId << ZAD_LOG_SIZE;
+  Uint32 attrDescriptor = tab_descr[attrDescriptorIndex].tabDescr;
+  Uint32 attrOffset = tab_descr[attrDescriptorIndex + 1].tabDescr;
+
+  Uint32 pos = AttributeOffset::getNullFlagPos(attrOffset);
+  Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor);
+  Uint32 maxVal = (1 << bitCount) - 1;
+  Uint32 *bits= ptr->get_null_bits(regTabPtr);
+
+  Uint32 tmp;
+  Uint32 check = regTabPtr->m_offsets[MM].m_null_words;
+  BitmaskImpl::getField(check, bits, pos, bitCount, &tmp);
+
+  if (tmp == maxVal && extend)
+  {
+    tmp = ~Uint32(0);
+  }
+  * value = tmp;
+}

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp	2011-02-08 14:45:27 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp	2011-05-17 23:29:55 +0000
@@ -189,8 +189,15 @@ void Dbtup::allocCopyProcedure()
     ndbrequire(appendToSection(iVal, &ahWord, 1));
   }
 
+  /* Add space for extra attrs */
+  ahWord = 0;
+  for (Uint32 extra=0; extra < EXTRA_COPY_PROC_WORDS; extra++)
+    ndbrequire(appendToSection(iVal, &ahWord, 1));
+
   cCopyProcedure= iVal;
   cCopyLastSeg= RNIL;
+  cCopyOverwrite= 0;
+  cCopyOverwriteLen= 0;
 }
 
 void Dbtup::freeCopyProcedure()
@@ -201,7 +208,8 @@ void Dbtup::freeCopyProcedure()
   cCopyProcedure=RNIL;
 }
 
-void Dbtup::prepareCopyProcedure(Uint32 numAttrs)
+void Dbtup::prepareCopyProcedure(Uint32 numAttrs,
+                                 Uint16 tableBits)
 {
   /* Set length of copy procedure section to the
    * number of attributes supplied
@@ -209,22 +217,49 @@ void Dbtup::prepareCopyProcedure(Uint32 
   ndbassert(numAttrs <= MAX_ATTRIBUTES_IN_TABLE);
   ndbassert(cCopyProcedure != RNIL);
   ndbassert(cCopyLastSeg == RNIL);
+  ndbassert(cCopyOverwrite == 0);
+  ndbassert(cCopyOverwriteLen == 0);
   Ptr<SectionSegment> first;
   g_sectionSegmentPool.getPtr(first, cCopyProcedure);
 
   /* Record original 'last segment' of section */
   cCopyLastSeg= first.p->m_lastSegment;
 
+  /* Check table bits to see if we need to do extra reads */
+  Uint32 extraAttrIds[EXTRA_COPY_PROC_WORDS];
+  Uint32 extraReads = 0;
+
+  if (tableBits & Tablerec::TR_ExtraRowGCIBits)
+  {
+    AttributeHeader ah(AttributeHeader::ROW_GCI64,0);
+    extraAttrIds[extraReads++] = ah.m_value;
+  }
+  if (tableBits & Tablerec::TR_ExtraRowAuthorBits)
+  {
+    AttributeHeader ah(AttributeHeader::ROW_AUTHOR,0);
+    extraAttrIds[extraReads++] = ah.m_value;
+  }
+
   /* Modify section to represent relevant prefix 
    * of code by modifying size and lastSegment
    */
-  first.p->m_sz= numAttrs;
+  Uint32 newSize = numAttrs + extraReads;
+  first.p->m_sz= newSize;
 
+  if (extraReads)
+  {
+    cCopyOverwrite= numAttrs;
+    cCopyOverwriteLen = extraReads;
+
+    ndbrequire(writeToSection(first.i, numAttrs, extraAttrIds, extraReads));
+  }
+
+   /* Trim section size and lastSegment */
   Ptr<SectionSegment> curr= first;  
-  while(numAttrs > SectionSegment::DataLength)
+  while(newSize > SectionSegment::DataLength)
   {
     g_sectionSegmentPool.getPtr(curr, curr.p->m_nextSegment);
-    numAttrs-= SectionSegment::DataLength;
+    newSize-= SectionSegment::DataLength;
   }
   first.p->m_lastSegment= curr.i;
 }
@@ -238,10 +273,24 @@ void Dbtup::releaseCopyProcedure()
   Ptr<SectionSegment> first;
   g_sectionSegmentPool.getPtr(first, cCopyProcedure);
   
-  ndbassert(first.p->m_sz <= MAX_ATTRIBUTES_IN_TABLE);
-  first.p->m_sz= MAX_ATTRIBUTES_IN_TABLE;
+  ndbassert(first.p->m_sz <= MAX_COPY_PROC_LEN);
+  first.p->m_sz= MAX_COPY_PROC_LEN;
   first.p->m_lastSegment= cCopyLastSeg;
   
+  if (cCopyOverwriteLen)
+  {
+    ndbassert(cCopyOverwriteLen <= EXTRA_COPY_PROC_WORDS);
+    Uint32 attrids[EXTRA_COPY_PROC_WORDS];
+    for (Uint32 i=0; i < cCopyOverwriteLen; i++)
+    {
+      AttributeHeader ah(cCopyOverwrite + i, 0);
+      attrids[i] = ah.m_value;
+    }
+    ndbrequire(writeToSection(first.i, cCopyOverwrite, attrids, cCopyOverwriteLen));
+    cCopyOverwriteLen= 0;
+    cCopyOverwrite= 0;
+  }
+
   cCopyLastSeg= RNIL;
 }
   
@@ -257,8 +306,13 @@ void Dbtup::copyProcedure(Signal* signal
    * This assumes that there is only one fragment copy going
    * on at any time, which is verified by checking 
    * cCopyLastSeg == RNIL before starting each copy
+   *
+   * If the table has extra per-row metainformation that
+   * needs copied then we add that to the copy procedure
+   * as well.
    */
-  prepareCopyProcedure(regTabPtr.p->m_no_of_attributes);
+  prepareCopyProcedure(regTabPtr.p->m_no_of_attributes,
+                       regTabPtr.p->m_bits);
 
   SectionHandle handle(this);
   handle.m_cnt=1;

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp	2011-04-19 15:59:06 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp	2011-05-17 23:29:55 +0000
@@ -38,8 +38,11 @@
  */
 
 Uint32
-Dbtup::getTabDescrOffsets(Uint32 noOfAttrs, Uint32 noOfCharsets,
-                          Uint32 noOfKeyAttr, Uint32* offset)
+Dbtup::getTabDescrOffsets(Uint32 noOfAttrs,
+                          Uint32 noOfCharsets,
+                          Uint32 noOfKeyAttr,
+                          Uint32 extraColumns,
+                          Uint32* offset)
 {
   // belongs to configure.in
   unsigned sizeOfPointer = sizeof(CHARSET_INFO*);
@@ -53,7 +56,7 @@ Dbtup::getTabDescrOffsets(Uint32 noOfAtt
   offset[2] = allocSize += noOfAttrs * sizeOfReadFunction();
   offset[3] = allocSize += noOfCharsets * sizeOfPointer;
   offset[4] = allocSize += noOfKeyAttr;
-  offset[5] = allocSize += noOfAttrs * ZAD_SIZE;
+  offset[5] = allocSize += (noOfAttrs + extraColumns) * ZAD_SIZE;
   offset[6] = allocSize += (noOfAttrs+1) >> 1;  // real order
   allocSize += ZTD_TRAILER_SIZE;
   // return number of words
@@ -322,6 +325,7 @@ Dbtup::verifytabdes()
         const Uint32 alloc = getTabDescrOffsets(ptr.p->m_no_of_attributes,
                                                 ptr.p->noOfCharsets,
                                                 ptr.p->noOfKeyAttr,
+                                                ptr.p->m_no_of_extra_columns,
                                                 offset);
         const Uint32 desc = ptr.p->readKeyArray - offset[3];
         Uint32 size = alloc;

=== modified file 'storage/ndb/src/kernel/vm/LongSignal.cpp'
--- a/storage/ndb/src/kernel/vm/LongSignal.cpp	2011-02-22 06:57:40 +0000
+++ b/storage/ndb/src/kernel/vm/LongSignal.cpp	2011-05-17 23:29:55 +0000
@@ -414,3 +414,58 @@ releaseSection(SPC_ARG Uint32 firstSegme
                                      p->m_lastSegment);
   }
 }
+
+bool
+writeToSection(Uint32 firstSegmentIVal, Uint32 offset,
+               const Uint32* src,
+               Uint32 len)
+{
+  Ptr<SectionSegment> segPtr;
+
+  if (len == 0)
+    return true;
+
+  if (firstSegmentIVal == RNIL)
+  {
+    return false;
+  }
+  else
+  {
+    /* Section has at least one segment with data already */
+    g_sectionSegmentPool.getPtr(segPtr, firstSegmentIVal);
+
+    Uint32 existingLen= segPtr.p->m_sz;
+
+    assert(existingLen > 0);
+    if (offset >= existingLen)
+      return false;         /* No sparse sections or extension */
+    if (len > (existingLen - offset))
+      return false;         /* Would be extending beyond current length */
+
+    /* Advance through segments to the one containing the start offset */
+    while (offset >= SectionSegment::DataLength)
+    {
+      g_sectionSegmentPool.getPtr(segPtr, segPtr.p->m_nextSegment);
+      offset-= SectionSegment::DataLength;
+    }
+
+    /* Now overwrite the words */
+    while (true)
+    {
+      Uint32 wordsToCopy = MIN(len,
+                               SectionSegment::DataLength - offset);
+      memcpy(&segPtr.p->theData[offset], src, (wordsToCopy << 2));
+      src+= wordsToCopy;
+      len-= wordsToCopy;
+
+      if (!len)
+      {
+        return true;
+      }
+
+      offset = 0;
+      g_sectionSegmentPool.getPtr(segPtr, segPtr.p->m_nextSegment);
+    }
+  }
+}
+

=== modified file 'storage/ndb/src/kernel/vm/LongSignalImpl.hpp'
--- a/storage/ndb/src/kernel/vm/LongSignalImpl.hpp	2011-02-02 00:40:07 +0000
+++ b/storage/ndb/src/kernel/vm/LongSignalImpl.hpp	2011-05-17 23:29:55 +0000
@@ -48,6 +48,8 @@ bool import(SPC_ARG Ptr<SectionSegment> 
 bool appendToSection(SPC_ARG Uint32& firstSegmentIVal, const Uint32* src, Uint32 len);
 /* dupSection : Create new section as copy of src section */
 bool dupSection(SPC_ARG Uint32& copyFirstIVal, Uint32 srcFirstIVal);
+/* writeToSection : Overwrite section from offset with data.  */
+bool writeToSection(Uint32 firstSegmentIVal, Uint32 offset, const Uint32* src, Uint32 len);
 
 void release(SPC_ARG SegmentedSectionPtr & ptr);
 void releaseSection(SPC_ARG Uint32 firstSegmentIVal);

=== added file 'storage/ndb/src/kernel/vm/NdbSeqLock.hpp'
--- a/storage/ndb/src/kernel/vm/NdbSeqLock.hpp	1970-01-01 00:00:00 +0000
+++ b/storage/ndb/src/kernel/vm/NdbSeqLock.hpp	2011-05-17 07:06:30 +0000
@@ -0,0 +1,95 @@
+/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; version 2 of the License.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
+
+#ifndef NDB_SEQLOCK_HPP
+#define NDB_SEQLOCK_HPP
+
+#include <ndb_types.h>
+#include "mt-asm.h"
+
+#if defined (NDB_HAVE_RMB) && defined(NDB_HAVE_WMB)
+struct NdbSeqLock
+{
+  NdbSeqLock() { m_seq = 0;}
+  volatile Uint32 m_seq;
+
+  void write_lock();
+  void write_unlock();
+
+  Uint32 read_lock();
+  bool read_unlock(Uint32 val) const;
+};
+
+inline
+void
+NdbSeqLock::write_lock()
+{
+  assert((m_seq & 1) == 0);
+  m_seq++;
+  wmb();
+}
+
+inline
+void
+NdbSeqLock::write_unlock()
+{
+  assert((m_seq & 1) == 1);
+  wmb();
+  m_seq++;
+}
+
+inline
+Uint32
+NdbSeqLock::read_lock()
+{
+loop:
+  Uint32 val = m_seq;
+  rmb();
+  if (unlikely(val & 1))
+  {
+#ifdef NDB_HAVE_CPU_PAUSE
+    cpu_pause();
+#endif
+    goto loop;
+  }
+  return val;
+}
+
+inline
+bool
+NdbSeqLock::read_unlock(Uint32 val) const
+{
+  rmb();
+  return val == m_seq;
+}
+#else /** ! rmb() or wmb() */
+/**
+ * Only for ndbd...
+ */
+
+struct NdbSeqLock
+{
+  NdbSeqLock() { }
+
+  void write_lock() {}
+  void write_unlock() {}
+
+  Uint32 read_lock() {}
+  bool read_unlock(Uint32 val) const { return true;}
+};
+
+#endif
+
+#endif

=== modified file 'storage/ndb/src/kernel/vm/SimulatedBlock.cpp'
--- a/storage/ndb/src/kernel/vm/SimulatedBlock.cpp	2011-02-01 23:27:25 +0000
+++ b/storage/ndb/src/kernel/vm/SimulatedBlock.cpp	2011-05-17 23:29:55 +0000
@@ -1578,6 +1578,13 @@ SimulatedBlock::dupSection(Uint32& copyF
   return ::dupSection(SB_SP_ARG copyFirstIVal, srcFirstIVal);
 }
 
+bool
+SimulatedBlock::writeToSection(Uint32 firstSegmentIVal, Uint32 offset,
+                               const Uint32* src, Uint32 len)
+{
+  return ::writeToSection(firstSegmentIVal, offset, src, len);
+}
+
 class SectionSegmentPool& 
 SimulatedBlock::getSectionSegmentPool(){
   return g_sectionSegmentPool;
@@ -4397,3 +4404,13 @@ SimulatedBlock::ndbinfo_send_scan_conf(S
              signal_length, JBB);
 }
 
+#ifdef VM_TRACE
+void
+SimulatedBlock::assertOwnThread()
+{
+#ifdef NDBD_MULTITHREADED
+  mt_assert_own_thread(this);
+#endif
+}
+
+#endif

=== modified file 'storage/ndb/src/kernel/vm/SimulatedBlock.hpp'
--- a/storage/ndb/src/kernel/vm/SimulatedBlock.hpp	2011-01-30 20:56:00 +0000
+++ b/storage/ndb/src/kernel/vm/SimulatedBlock.hpp	2011-05-17 23:29:55 +0000
@@ -188,6 +188,15 @@ public:
   static bool isNdbMtLqh() { return globalData.isNdbMtLqh; }
   static Uint32 getLqhWorkers() { return globalData.ndbMtLqhWorkers; }
 
+  /**
+   * Assert that thread calling this function is "owner" of block instance
+   */
+#ifdef VM_TRACE
+  void assertOwnThread();
+#else
+  void assertOwnThread(){ }
+#endif
+
   /*
    * Instance key (1-4) is used only when sending a signal.  Receiver
    * maps it to actual instance (0, if receiver is not MT LQH).
@@ -341,6 +350,7 @@ protected:
   bool import(SegmentedSectionPtr& ptr, const Uint32* src, Uint32 len);
   bool appendToSection(Uint32& firstSegmentIVal, const Uint32* src, Uint32 len);
   bool dupSection(Uint32& copyFirstIVal, Uint32 srcFirstIVal);
+  bool writeToSection(Uint32 firstSegmentIVal, Uint32 offset, const Uint32* src, Uint32 len);
 
   void handle_invalid_sections_in_send_signal(Signal*) const;
   void handle_lingering_sections_after_execute(Signal*) const;

=== modified file 'storage/ndb/src/kernel/vm/mt-asm.h'
--- a/storage/ndb/src/kernel/vm/mt-asm.h	2011-02-02 00:40:07 +0000
+++ b/storage/ndb/src/kernel/vm/mt-asm.h	2011-05-16 11:44:52 +0000
@@ -25,22 +25,31 @@
  * GCC
  *******************/
 #if defined(__x86_64__) || defined (__i386__)
+
+#define NDB_HAVE_MB
+#define NDB_HAVE_RMB
+#define NDB_HAVE_WMB
+#define NDB_HAVE_READ_BARRIER_DEPENDS
+#define NDB_HAVE_XCNG
+#define NDB_HAVE_CPU_PAUSE
+
 /* Memory barriers, these definitions are for x64_64. */
 #define mb()    asm volatile("mfence":::"memory")
 /* According to Intel docs, it does not reorder loads. */
-/* #define rmb() asm volatile("lfence":::"memory") */                      
+/* #define rmb() asm volatile("lfence":::"memory") */
 #define rmb()   asm volatile("" ::: "memory")
 #define wmb()   asm volatile("" ::: "memory")
 #define read_barrier_depends()  do {} while(0)
 
-#define NDB_HAVE_XCNG
-static inline
+static
+inline
 int
 xcng(volatile unsigned * addr, int val)
 {
   asm volatile ("xchg %0, %1;" : "+r" (val) , "+m" (*addr));
   return val;
 }
+
 static
 inline
 void
@@ -50,6 +59,12 @@ cpu_pause()
 }
 
 #elif defined(__sparc__)
+
+#define NDB_HAVE_MB
+#define NDB_HAVE_RMB
+#define NDB_HAVE_WMB
+#define NDB_HAVE_READ_BARRIER_DEPENDS
+
 #define mb()    asm volatile("membar #LoadLoad | #LoadStore | #StoreLoad | #StoreStore":::"memory")
 #define rmb()   asm volatile("membar #LoadLoad" ::: "memory")
 #define wmb()   asm volatile("membar #StoreStore" ::: "memory")
@@ -71,6 +86,7 @@ xcng(volatile unsigned * addr, int val)
 }
 #define cpu_pause()
 #define NDB_HAVE_XCNG
+#define NDB_HAVE_CPU_PAUSE
 #else
 /* link error if used incorrectly (i.e wo/ having NDB_HAVE_XCNG) */
 extern  int xcng(volatile unsigned * addr, int val);
@@ -78,7 +94,7 @@ extern void cpu_pause();
 #endif
 
 #else
-#error "Unsupported architecture (gcc)"
+#define NDB_NO_ASM "Unsupported architecture (gcc)"
 #endif
 
 #elif defined(__sun)
@@ -91,20 +107,32 @@ extern void cpu_pause();
  *      i.e that it clobbers memory
  */
 #if defined(__x86_64__)
+#define NDB_HAVE_MB
+#define NDB_HAVE_RMB
+#define NDB_HAVE_WMB
+#define NDB_HAVE_READ_BARRIER_DEPENDS
+
 #define mb()    asm ("mfence")
 /* According to Intel docs, it does not reorder loads. */
 /* #define rmb() asm ("lfence") */
 #define rmb()   asm ("")
 #define wmb()   asm ("")
 #define read_barrier_depends()  do {} while(0)
+
 #elif defined(__sparc)
+#define NDB_HAVE_MB
+#define NDB_HAVE_RMB
+#define NDB_HAVE_WMB
+#define NDB_HAVE_READ_BARRIER_DEPENDS
+
 #define mb() asm ("membar #LoadLoad | #LoadStore | #StoreLoad | #StoreStore")
 #define rmb() asm ("membar #LoadLoad")
 #define wmb() asm ("membar #StoreStore")
 #define read_barrier_depends()  do {} while(0)
 #else
-#error "Unsupported architecture (sun studio)"
+#define NDB_NO_ASM "Unsupported architecture (sun studio)"
 #endif
+
 #if defined(__x86_64__) || defined(__sparc)
 /**
  * we should probably use assembler for x86 aswell...
@@ -116,6 +144,7 @@ extern void cpu_pause();
 
 #ifdef HAVE_ATOMIC_SWAP_32
 #define NDB_HAVE_XCNG
+#define NDB_HAVE_CPU_PAUSE
 #if defined(__sparc)
 static inline
 int
@@ -154,6 +183,12 @@ extern void cpu_pause();
 #endif
 #endif
 #elif defined (_MSC_VER)
+
+#define NDB_HAVE_MB
+#define NDB_HAVE_RMB
+#define NDB_HAVE_WMB
+#define NDB_HAVE_READ_BARRIER_DEPENDS
+
 #include <windows.h>
 #define mb()    MemoryBarrier()
 #define read_barrier_depends()  do {} while(0)
@@ -171,6 +206,8 @@ extern void cpu_pause();
 #endif
 
 #define NDB_HAVE_XCNG
+#define NDB_HAVE_CPU_PAUSE
+
 static inline
 int
 xcng(volatile unsigned * addr, int val)
@@ -186,7 +223,7 @@ cpu_pause()
   YieldProcessor();
 }
 #else
-#error "Unsupported compiler"
+#define NDB_NO_ASM "Unsupported compiler"
 #endif
 
 #endif

=== modified file 'storage/ndb/src/kernel/vm/mt.cpp'
--- a/storage/ndb/src/kernel/vm/mt.cpp	2011-04-20 05:46:35 +0000
+++ b/storage/ndb/src/kernel/vm/mt.cpp	2011-05-16 12:24:55 +0000
@@ -4170,6 +4170,22 @@ mt_wakeup(class SimulatedBlock* block)
   wakeup(&thrptr->m_waiter);
 }
 
+#ifdef VM_TRACE
+void
+mt_assert_own_thread(SimulatedBlock* block)
+{
+  Uint32 thr_no = block->getThreadId();
+  thr_data *thrptr = g_thr_repository.m_thread + thr_no;
+
+  if (unlikely(pthread_equal(thrptr->m_thr_id, pthread_self()) == 0))
+  {
+    fprintf(stderr, "mt_assert_own_thread() - assertion-failure\n");
+    fflush(stderr);
+    abort();
+  }
+}
+#endif
+
 /**
  * Global data
  */

=== modified file 'storage/ndb/src/kernel/vm/mt.hpp'
--- a/storage/ndb/src/kernel/vm/mt.hpp	2011-02-02 00:40:07 +0000
+++ b/storage/ndb/src/kernel/vm/mt.hpp	2011-05-16 12:24:55 +0000
@@ -74,4 +74,11 @@ Uint32 mt_get_thread_references_for_bloc
  */
 void mt_wakeup(class SimulatedBlock*);
 
+#ifdef VM_TRACE
+/**
+ * Assert that thread calling this function is "owner" of block instance
+ */
+void mt_assert_own_thread(class SimulatedBlock*);
+#endif
+
 #endif

=== modified file 'storage/ndb/src/ndbapi/Ndb.cpp'
--- a/storage/ndb/src/ndbapi/Ndb.cpp	2011-04-27 10:48:16 +0000
+++ b/storage/ndb/src/ndbapi/Ndb.cpp	2011-05-17 07:23:31 +0000
@@ -201,6 +201,7 @@ Ndb::NDB_connect(Uint32 tNode, Uint32 in
   tSignal->setData(theMyRef, 2);	// Set my block reference
   tSignal->setData(instance, 3);        // Set requested instance
   tNdbCon->Status(NdbTransaction::Connecting); // Set status to connecting
+  tNdbCon->theDBnode = tNode;
   Uint32 nodeSequence;
   tReturnCode= sendRecSignal(tNode, WAIT_TC_SEIZE, tSignal,
                              0, &nodeSequence);

=== modified file 'storage/ndb/src/ndbapi/NdbDictionary.cpp'
--- a/storage/ndb/src/ndbapi/NdbDictionary.cpp	2011-02-16 14:53:53 +0000
+++ b/storage/ndb/src/ndbapi/NdbDictionary.cpp	2011-05-17 23:29:55 +0000
@@ -934,6 +934,36 @@ NdbDictionary::Table::getRowGCIIndicator
 }
 
 void
+NdbDictionary::Table::setExtraRowGciBits(Uint32 val)
+{
+  if (val <= 31)
+  {
+    m_impl.m_extra_row_gci_bits = val;
+  }
+}
+
+Uint32
+NdbDictionary::Table::getExtraRowGciBits() const
+{
+  return m_impl.m_extra_row_gci_bits;
+}
+
+void
+NdbDictionary::Table::setExtraRowAuthorBits(Uint32 val)
+{
+  if (val <= 31)
+  {
+    m_impl.m_extra_row_author_bits = val;
+  }
+}
+
+Uint32
+NdbDictionary::Table::getExtraRowAuthorBits() const
+{
+  return m_impl.m_extra_row_author_bits;
+}
+
+void
 NdbDictionary::Table::setForceVarPart(bool val){
   m_impl.m_force_var_part = val;
 }

=== modified file 'storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp'
--- a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp	2011-05-12 09:01:21 +0000
+++ b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp	2011-05-17 23:29:55 +0000
@@ -378,6 +378,10 @@ NdbColumnImpl::create_pseudo_columns()
     NdbColumnImpl::create_pseudo("NDB$ROWID");
   NdbDictionary::Column::ROW_GCI=
     NdbColumnImpl::create_pseudo("NDB$ROW_GCI");
+  NdbDictionary::Column::ROW_GCI64 =
+    NdbColumnImpl::create_pseudo("NDB$ROW_GCI64");
+  NdbDictionary::Column::ROW_AUTHOR =
+    NdbColumnImpl::create_pseudo("NDB$ROW_AUTHOR");
   NdbDictionary::Column::ANY_VALUE=
     NdbColumnImpl::create_pseudo("NDB$ANY_VALUE");
   NdbDictionary::Column::COPY_ROWID=
@@ -408,6 +412,8 @@ NdbColumnImpl::destory_pseudo_columns()
   delete NdbDictionary::Column::RECORDS_IN_RANGE;
   delete NdbDictionary::Column::ROWID;
   delete NdbDictionary::Column::ROW_GCI;
+  delete NdbDictionary::Column::ROW_GCI64;
+  delete NdbDictionary::Column::ROW_AUTHOR;
   delete NdbDictionary::Column::ANY_VALUE;
   delete NdbDictionary::Column::OPTIMIZE;
   NdbDictionary::Column::FRAGMENT= 0;
@@ -421,6 +427,8 @@ NdbColumnImpl::destory_pseudo_columns()
   NdbDictionary::Column::RECORDS_IN_RANGE= 0;
   NdbDictionary::Column::ROWID= 0;
   NdbDictionary::Column::ROW_GCI= 0;
+  NdbDictionary::Column::ROW_GCI64= 0;
+  NdbDictionary::Column::ROW_AUTHOR= 0;
   NdbDictionary::Column::ANY_VALUE= 0;
   NdbDictionary::Column::OPTIMIZE= 0;
 
@@ -499,6 +507,18 @@ NdbColumnImpl::create_pseudo(const char 
     col->m_impl.m_attrSize = 8;
     col->m_impl.m_arraySize = 1;
     col->m_impl.m_nullable = true;
+  } else if(!strcmp(name, "NDB$ROW_GCI64")){
+    col->setType(NdbDictionary::Column::Bigunsigned);
+    col->m_impl.m_attrId = AttributeHeader::ROW_GCI64;
+    col->m_impl.m_attrSize = 8;
+    col->m_impl.m_arraySize = 1;
+    col->m_impl.m_nullable = true;
+  } else if(!strcmp(name, "NDB$ROW_AUTHOR")){
+    col->setType(NdbDictionary::Column::Unsigned);
+    col->m_impl.m_attrId = AttributeHeader::ROW_AUTHOR;
+    col->m_impl.m_attrSize = 4;
+    col->m_impl.m_arraySize = 1;
+    col->m_impl.m_nullable = true;
   } else if(!strcmp(name, "NDB$ANY_VALUE")){
     col->setType(NdbDictionary::Column::Unsigned);
     col->m_impl.m_attrId = AttributeHeader::ANY_VALUE;
@@ -638,6 +658,8 @@ NdbTableImpl::init(){
   m_hash_map_id = RNIL;
   m_hash_map_version = ~0;
   m_storageType = NDB_STORAGETYPE_DEFAULT;
+  m_extra_row_gci_bits = 0;
+  m_extra_row_author_bits = 0;
 }
 
 bool
@@ -832,6 +854,22 @@ NdbTableImpl::equal(const NdbTableImpl& 
     DBUG_RETURN(false);
   }
 
+  if (m_extra_row_gci_bits != obj.m_extra_row_gci_bits)
+  {
+    DBUG_PRINT("info",("m_extra_row_gci_bits %d != %d",
+                       (int32)m_extra_row_gci_bits,
+                       (int32)obj.m_extra_row_gci_bits));
+    DBUG_RETURN(false);
+  }
+
+  if (m_extra_row_author_bits != obj.m_extra_row_author_bits)
+  {
+    DBUG_PRINT("info",("m_extra_row_author_bits %d != %d",
+                       (int32)m_extra_row_author_bits,
+                       (int32)obj.m_extra_row_author_bits));
+    DBUG_RETURN(false);
+  }
+
   DBUG_RETURN(true);
 }
 
@@ -897,6 +935,8 @@ NdbTableImpl::assign(const NdbTableImpl&
   m_fragmentCount = org.m_fragmentCount;
   
   m_single_user_mode = org.m_single_user_mode;
+  m_extra_row_gci_bits = org.m_extra_row_gci_bits;
+  m_extra_row_author_bits = org.m_extra_row_author_bits;
 
   if (m_index != 0)
     delete m_index;
@@ -2751,6 +2791,8 @@ NdbDictInterface::parseTableInfo(NdbTabl
   impl->m_maxLoadFactor = tableDesc->MaxLoadFactor;
   impl->m_single_user_mode = tableDesc->SingleUserMode;
   impl->m_storageType = tableDesc->TableStorageType;
+  impl->m_extra_row_gci_bits = tableDesc->ExtraRowGCIBits;
+  impl->m_extra_row_author_bits = tableDesc->ExtraRowAuthorBits;
 
   impl->m_indexType = (NdbDictionary::Object::Type)
     getApiConstant(tableDesc->TableType,
@@ -3346,7 +3388,9 @@ NdbDictInterface::compChangeMask(const N
      impl.m_tablespace_version != old_impl.m_tablespace_version ||
      impl.m_id != old_impl.m_id ||
      impl.m_version != old_impl.m_version ||
-     sz < old_sz)
+     sz < old_sz ||
+     impl.m_extra_row_gci_bits != old_impl.m_extra_row_gci_bits ||
+     impl.m_extra_row_author_bits != old_impl.m_extra_row_author_bits)
   {
     DBUG_PRINT("info", ("Old and new table not compatible"));
     goto invalid_alter_table;
@@ -3534,6 +3578,8 @@ NdbDictInterface::serializeTableDesc(Ndb
   tmpTab->LinearHashFlag = impl.m_linear_flag;
   tmpTab->SingleUserMode = impl.m_single_user_mode;
   tmpTab->ForceVarPartFlag = impl.m_force_var_part;
+  tmpTab->ExtraRowGCIBits = impl.m_extra_row_gci_bits;
+  tmpTab->ExtraRowAuthorBits = impl.m_extra_row_author_bits;
 
   tmpTab->FragmentType = getKernelConstant(impl.m_fragmentType,
  					   fragmentTypeMapping,
@@ -8425,6 +8471,8 @@ const NdbDictionary::Column * NdbDiction
 const NdbDictionary::Column * NdbDictionary::Column::RECORDS_IN_RANGE = 0;
 const NdbDictionary::Column * NdbDictionary::Column::ROWID = 0;
 const NdbDictionary::Column * NdbDictionary::Column::ROW_GCI = 0;
+const NdbDictionary::Column * NdbDictionary::Column::ROW_GCI64 = 0;
+const NdbDictionary::Column * NdbDictionary::Column::ROW_AUTHOR = 0;
 const NdbDictionary::Column * NdbDictionary::Column::ANY_VALUE = 0;
 const NdbDictionary::Column * NdbDictionary::Column::COPY_ROWID = 0;
 const NdbDictionary::Column * NdbDictionary::Column::OPTIMIZE = 0;

=== modified file 'storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp'
--- a/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp	2011-05-12 09:01:21 +0000
+++ b/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp	2011-05-17 23:29:55 +0000
@@ -238,6 +238,8 @@ public:
   Uint16 m_fragmentCount;
   Uint8 m_single_user_mode;
   Uint8 m_storageType;  // NDB_STORAGETYPE_MEMORY or _DISK or DEFAULT
+  Uint8 m_extra_row_gci_bits;
+  Uint8 m_extra_row_author_bits;
 
   NdbIndexImpl * m_index;
   NdbColumnImpl * getColumn(unsigned attrId);

=== modified file 'storage/ndb/test/ndbapi/testRestartGci.cpp'
--- a/storage/ndb/test/ndbapi/testRestartGci.cpp	2011-02-02 00:40:07 +0000
+++ b/storage/ndb/test/ndbapi/testRestartGci.cpp	2011-05-18 05:25:47 +0000
@@ -28,10 +28,12 @@
  */
 
 struct SavedRecord {
-  int m_gci;
+  Uint64 m_gci;
+  Uint32 m_author;
   BaseString m_str;
-  SavedRecord(int _gci, BaseString _str){ 
+  SavedRecord(Uint64 _gci, Uint32 _author, BaseString _str){
     m_gci = _gci; 
+    m_author = _author;
     m_str.assign(_str); 
   }
   SavedRecord(){
@@ -40,7 +42,7 @@ struct SavedRecord {
   };
 };
 Vector<SavedRecord> savedRecords;
-
+Uint64 highestExpectedGci;
 
 #define CHECK(b) if (!(b)) { \
   ndbout << "ERR: "<< step->getName() \
@@ -48,14 +50,80 @@ Vector<SavedRecord> savedRecords;
   result = NDBT_FAILED; \
   break; }
 
+static
+int
+maybeExtraBits(Ndb* ndb, NdbDictionary::Table& tab, int when, void* arg)
+{
+  switch(when){
+  case 0: // Before
+    break;
+  case 1: // After
+    return 0;
+  default:
+    return 0;
+  }
+
+  bool useExtendedBits = ((rand() % 5) != 0);
+  Uint32 numGciBits= rand() % 32;      /* 0 -> 31 */
+  Uint32 numAuthorBits = rand() % 32;  /* 0 -> 31 */
+
+  if (useExtendedBits && (numGciBits || numAuthorBits))
+  {
+    ndbout_c("Creating table %s with %u extra Gci and %u extra Author bits",
+             tab.getName(), numGciBits, numAuthorBits);
+    tab.setExtraRowGciBits(numGciBits);
+    tab.setExtraRowAuthorBits(numAuthorBits);
+  }
+  else
+  {
+    ndbout_c("Table has no extra bits");
+  }
+
+  return 0;
+}
+
+int runDropTable(NDBT_Context* ctx, NDBT_Step* step)
+{
+  GETNDB(step)->getDictionary()->dropTable(ctx->getTab()->getName());
+  return NDBT_OK;
+}
+
+int runCreateTable(NDBT_Context* ctx, NDBT_Step* step)
+{
+
+  runDropTable(ctx, step);
+
+  /* Use extra proc to control whether we have extra bits */
+  if (NDBT_Tables::createTable(GETNDB(step),
+                               ctx->getTab()->getName(),
+                               false, false,
+                               maybeExtraBits) == NDBT_OK)
+  {
+    ctx->setTab(GETNDB(step)->
+                getDictionary()->
+                getTable(ctx->getTab()->getName()));
+    return NDBT_OK;
+  }
+  return NDBT_FAILED;
+}
+
 int runInsertRememberGci(NDBT_Context* ctx, NDBT_Step* step){
   int result = NDBT_OK;
   int records = ctx->getNumRecords();
   HugoOperations hugoOps(*ctx->getTab());
+  HugoCalculator hugoCalc(*ctx->getTab());
   Ndb* pNdb = GETNDB(step);
   int i = 0;
 
-  while(ctx->isTestStopped() == false && i < records){
+  ndbout_c("Inserting %u records", records);
+  Uint64 minGci = 0xffffffffffffffff;
+  Uint64 maxGci = 0;
+  Uint32 numAuthorBits = ctx->getTab()->getExtraRowAuthorBits();
+  Uint32 authorMask = (1 << numAuthorBits) -1;
+  ndbout_c("numAuthor bits is %u, mask is %x",
+           numAuthorBits, authorMask);
+
+  while(i < records){
     // Insert record and read it in same transaction
     CHECK(hugoOps.startTransaction(pNdb) == 0);
     CHECK(hugoOps.pkInsertRecord(pNdb, i) == 0);
@@ -64,14 +132,50 @@ int runInsertRememberGci(NDBT_Context* c
       result = NDBT_FAILED;
       break;
     }
+    /* Set the author column (if present) */
+    Uint32 authorVal = 0;
+    if (ctx->getTab()->getExtraRowAuthorBits() > 0)
+    {
+      authorVal = (rand() & authorMask);
+      /* Pain here due to need to use NdbRecord */
+      char rowBuff[NDB_MAX_TUPLE_SIZE];
+      const NdbDictionary::Table* tab = ctx->getTab();
+      CHECK(hugoCalc.setValues((Uint8*) rowBuff, tab->getDefaultRecord(),
+                               i, 0) == 0);
+      NdbOperation::SetValueSpec setValueSpec;
+      setValueSpec.column = NdbDictionary::Column::ROW_AUTHOR;
+      setValueSpec.value = &authorVal;
+      NdbOperation::OperationOptions opts;
+      opts.optionsPresent= NdbOperation::OperationOptions::OO_SETVALUE;
+      opts.extraSetValues= &setValueSpec;
+      opts.numExtraSetValues = 1;
+
+      const NdbOperation* update = hugoOps.getTransaction()->
+        updateTuple(tab->getDefaultRecord(), rowBuff,
+                    tab->getDefaultRecord(), rowBuff,
+                    NULL, /* mask */
+                    &opts,
+                    sizeof(opts));
+      CHECK(update != NULL);
+    }
+    /* Read row back */
     CHECK(hugoOps.pkReadRecord(pNdb, i) == 0);
     if (hugoOps.execute_Commit(pNdb) != 0){
       ndbout << "Did not find record in DB " << i << endl;
       result = NDBT_FAILED;
       break;
     }
-    savedRecords.push_back(SavedRecord(hugoOps.getRecordGci(0),
-				     hugoOps.getRecordStr(0)));
+    Uint64 gci;
+    CHECK(hugoOps.getTransaction()->getGCI(&gci) == 0);
+
+    if (gci < minGci)
+      minGci = gci;
+    if (gci > maxGci)
+      maxGci = gci;
+
+    savedRecords.push_back(SavedRecord(gci,
+                                       authorVal,
+                                       hugoOps.getRecordStr(0)));
 
     CHECK(hugoOps.closeTransaction(pNdb) == 0);
     i++;
@@ -79,13 +183,21 @@ int runInsertRememberGci(NDBT_Context* c
     NdbSleep_MilliSleep(10);
   };
 
+  ndbout_c("  Inserted records from gci %x/%x to gci %x/%x",
+           (Uint32) (minGci >> 32), (Uint32) (minGci & 0xffffffff),
+           (Uint32) (maxGci >> 32), (Uint32) (maxGci & 0xffffffff));
+
+  highestExpectedGci = maxGci;
+
   return result;
 }
 
-int runRestart(NDBT_Context* ctx, NDBT_Step* step){
+int runRestartAll(NDBT_Context* ctx, NDBT_Step* step){
   Ndb* pNdb = GETNDB(step);
   NdbRestarter restarter;
 
+  ndbout_c("Restart of all nodes");
+
   // Restart cluster with abort
   if (restarter.restartAll(false, false, true) != 0){
     ctx->stopTest();
@@ -103,6 +215,42 @@ int runRestart(NDBT_Context* ctx, NDBT_S
   return NDBT_OK;
 }
 
+int runRestartOneInitial(NDBT_Context* ctx, NDBT_Step* step){
+  Ndb* pNdb = GETNDB(step);
+  NdbRestarter restarter;
+
+  if (restarter.getNumDbNodes() < 2)
+    return NDBT_OK;
+
+  /* We don't restart the Master as we need to know a
+   * non-restarted node to reliably get the restartGci
+   * afterwards!
+   * Should be no real reason not to restart the master.
+   */
+  int node = restarter.getRandomNotMasterNodeId(rand());
+  ndbout_c("Restarting node %u initial", node);
+
+  if (restarter.restartOneDbNode(node,
+                                 true,  /* Initial */
+                                 false, /* Nostart */
+                                 true)  /* Abort */
+      != 0)
+  {
+    ctx->stopTest();
+    return NDBT_FAILED;
+  }
+
+  if (restarter.waitClusterStarted(300) != 0){
+    return NDBT_FAILED;
+  }
+
+  if (pNdb->waitUntilReady() != 0){
+    return NDBT_FAILED;
+  }
+
+  return NDBT_OK;
+}
+
 int runRestartGciControl(NDBT_Context* ctx, NDBT_Step* step){
   int records = ctx->getNumRecords();
   Ndb* pNdb = GETNDB(step);
@@ -118,10 +266,38 @@ int runRestartGciControl(NDBT_Context* c
     NdbSleep_MilliSleep(10);
   }
 
-  // Stop the other thread
-  ctx->stopTest();
+  return runRestartAll(ctx,step);
+}
+
+int runDetermineRestartGci(NDBT_Context* ctx, NDBT_Step* step)
+{
+  Ndb* pNdb = GETNDB(step);
+  Uint32 restartGci;
+  int res = pNdb->getDictionary()->getRestartGCI(&restartGci);
+  if (res != 0)
+  {
+    ndbout << "Failed to retrieve restart gci" << endl;
+    ndbout << pNdb->getDictionary()->getNdbError() << endl;
+    return NDBT_FAILED;
+  }
+
+  ndbout_c("Restart GCI is %u (0x%x)",
+           restartGci, restartGci);
 
-  return runRestart(ctx,step);
+  ndbout_c("Highest expected GCI was %x/%x",
+           (Uint32) (highestExpectedGci >> 32),
+           (Uint32) (highestExpectedGci & 0xffffffff));
+
+  highestExpectedGci = ((Uint64) restartGci) << 32 | 0xffffffff;
+  ndbout_c("Resetting Highest expected GCI to align with restart Gci (%x/%x)",
+           (Uint32) (highestExpectedGci >> 32),
+           (Uint32) (highestExpectedGci & 0xffffffff));
+  return NDBT_OK;
+}
+
+int runRequireExact(NDBT_Context* ctx, NDBT_Step* step){
+  ctx->incProperty("ExactGCI");
+  return NDBT_OK;
 }
 
 int runVerifyInserts(NDBT_Context* ctx, NDBT_Step* step){
@@ -130,17 +306,9 @@ int runVerifyInserts(NDBT_Context* ctx, 
   UtilTransactions utilTrans(*ctx->getTab());
   HugoOperations hugoOps(*ctx->getTab());
   NdbRestarter restarter;
+  Uint32 extraGciBits = ctx->getTab()->getExtraRowGciBits();
+  Uint32 firstSaturatedValue = (1 << extraGciBits) -1;
 
-  Uint32 restartGCI;
-  int res = pNdb->getDictionary()->getRestartGCI(&restartGCI);
-  if (res != 0)
-  {
-    ndbout << "Failed to retreive restart gci" << endl;
-    ndbout << pNdb->getDictionary()->getNdbError() << endl;
-    return NDBT_FAILED;
-  }
-
-  ndbout << "restartGCI = " << restartGCI << endl;
   int count = 0;
   if (utilTrans.selectCount(pNdb, 64, &count) != 0){
     return NDBT_FAILED;
@@ -151,7 +319,7 @@ int runVerifyInserts(NDBT_Context* ctx, 
   int recordsWithLowerOrSameGci = 0;
   unsigned i; 
   for (i = 0; i < savedRecords.size(); i++){
-    if (savedRecords[i].m_gci <= (int)restartGCI)
+    if (savedRecords[i].m_gci <= highestExpectedGci)
       recordsWithLowerOrSameGci++;
   }
   if (recordsWithLowerOrSameGci != count){
@@ -159,10 +327,13 @@ int runVerifyInserts(NDBT_Context* ctx, 
     result = NDBT_FAILED;
   }
 
+  bool exactGCIonly = ctx->getProperty("ExactGCI", (unsigned) 0);
 
   // RULE2: The records found in db should have same or lower 
   // gci as in the vector
   int recordsWithIncorrectGci = 0;
+  int recordsWithRoundedGci = 0;
+  int recordsWithIncorrectAuthor = 0;
   for (i = 0; i < savedRecords.size(); i++){
     CHECK(hugoOps.startTransaction(pNdb) == 0);
     /* First read of row to check contents */
@@ -173,13 +344,15 @@ int runVerifyInserts(NDBT_Context* ctx, 
     CHECK(readOp != NULL);
     CHECK(readOp->readTuple() == 0);
     CHECK(hugoOps.equalForRow(readOp, i) == 0);
-    NdbRecAttr* rowGci = readOp->getValue(NdbDictionary::Column::ROW_GCI);
+    NdbRecAttr* rowGci = readOp->getValue(NdbDictionary::Column::ROW_GCI64);
+    NdbRecAttr* rowAuthor = readOp->getValue(NdbDictionary::Column::ROW_AUTHOR);
     CHECK(rowGci != NULL);
+    CHECK(rowAuthor != NULL);
     if (hugoOps.execute_Commit(pNdb) != 0){
       // Record was not found in db'
 
       // Check record gci
-      if (savedRecords[i].m_gci <= (int)restartGCI){
+      if (savedRecords[i].m_gci <= highestExpectedGci) {
 	ndbout << "ERR: Record "<<i<<" should have existed" << endl;
 	result = NDBT_FAILED;
       }
@@ -189,7 +362,7 @@ int runVerifyInserts(NDBT_Context* ctx, 
          * Let's disappear it, so that it doesn't cause confusion
          * after further restarts.
          */
-        savedRecords[i].m_gci = (Uint32(1) << 31) -1; // Big number
+        savedRecords[i].m_gci = (Uint64(1) << 63) -1; // Big number
       }
     } else {
       // Record was found in db
@@ -200,16 +373,50 @@ int runVerifyInserts(NDBT_Context* ctx, 
 	result = NDBT_FAILED;
       }
       // Check record gci in range
-      if (savedRecords[i].m_gci > (int)restartGCI){
+      Uint64 expectedRecordGci = savedRecords[i].m_gci;
+      if (expectedRecordGci > highestExpectedGci){
 	ndbout << "ERR: Record "<<i<<" should not have existed" << endl;
 	result = NDBT_FAILED;
       }
+      bool expectRounding = (expectedRecordGci && 0xffffffff) >= firstSaturatedValue;
+      Uint64 expectedRoundedGci = (expectedRecordGci | 0xffffffff);
+      Uint64 readGci = rowGci->u_64_value();
+      Uint64 expectedRead = (expectRounding)?expectedRoundedGci :
+        expectedRecordGci;
       // Check record gci is exactly correct
-      if (savedRecords[i].m_gci != rowGci->int32_value()){
-        ndbout << "ERR: Record "<<i<<" should have GCI " <<
-          savedRecords[i].m_gci << ", but has " << 
-          rowGci->int32_value() << endl;
-        recordsWithIncorrectGci++;
+      if (expectedRead != readGci){
+        if ((!exactGCIonly) &&
+            (expectedRoundedGci == readGci))
+        {
+          /* Record rounded, though bits can be represented
+           * presumably due to Redo gci truncation
+           */
+          recordsWithRoundedGci++;
+        }
+        else
+        {
+          ndbout_c("ERR: Record %u should have GCI %x/%x, but has "
+                   "%x/%x.",
+                   i,
+                   (Uint32) (expectedRead >> 32),
+                   (Uint32) (expectedRead & 0xffffffff),
+                   (Uint32) (readGci >> 32),
+                   (Uint32) (readGci & 0xffffffff));
+          recordsWithIncorrectGci++;
+          result = NDBT_FAILED;
+        }
+      }
+
+      // Check author value is correct.
+      Uint32 expectedAuthor = savedRecords[i].m_author;
+
+      if (rowAuthor->u_32_value() != expectedAuthor)
+      {
+        ndbout_c("ERR: Record %u should have Author %d, but has %d.",
+                 i,
+                 expectedAuthor,
+                 rowAuthor->u_32_value());
+        recordsWithIncorrectAuthor++;
         result = NDBT_FAILED;
       }
     }
@@ -222,17 +429,26 @@ int runVerifyInserts(NDBT_Context* ctx, 
   ndbout << "There are " << savedRecords.size() 
 	 << " records in vector" << endl;
 
-  ndbout << "There are " << recordsWithLowerOrSameGci 
-	 << " records with lower or same gci than " << restartGCI <<  endl;
+  ndbout_c("There are %u records with lower or same gci than %x/%x",
+           recordsWithLowerOrSameGci,
+           (Uint32)(highestExpectedGci >> 32),
+           (Uint32)(highestExpectedGci & 0xffffffff));
   
+  ndbout_c("There are %u records with rounded Gcis.  Exact GCI flag is %u",
+           recordsWithRoundedGci, exactGCIonly);
+
   ndbout << "There are " << recordsWithIncorrectGci
          << " records with incorrect Gci on recovery." << endl;
 
+  ndbout << "There are " << recordsWithIncorrectAuthor
+         << " records with incorrect Author on recovery." << endl;
+
   return result;
 }
 
 int runClearGlobals(NDBT_Context* ctx, NDBT_Step* step){
   savedRecords.clear();
+  highestExpectedGci = 0;
   return NDBT_OK;
 }
 
@@ -247,27 +463,276 @@ int runClearTable(NDBT_Context* ctx, NDB
 }
 
 
+int runLoadTable(NDBT_Context* ctx, NDBT_Step* step)
+{
+  int records = ctx->getNumRecords();
+  HugoTransactions hugoTrans(*ctx->getTab());
+  if (hugoTrans.loadTable(GETNDB(step), records, 512, false, 0, true) != 0){
+    return NDBT_FAILED;
+  }
+  return NDBT_OK;
+}
+
+int runNodeInitialRestarts(NDBT_Context* ctx, NDBT_Step* step)
+{
+  NdbRestarter restarter;
+  const Uint32 numRestarts = 4;
+  for (Uint32 nr = 0; nr < numRestarts; nr++)
+  {
+    if (ctx->isTestStopped())
+    {
+      return NDBT_OK;
+    }
+    int nodeId = restarter.getNode(NdbRestarter::NS_RANDOM);
+    ndbout_c("Restarting node %u", nodeId);
+
+    if (restarter.restartOneDbNode(nodeId, NdbRestarter::NRRF_INITIAL) != 0)
+    {
+      ndbout_c("Error restarting node");
+      ctx->stopTest();
+      return NDBT_FAILED;
+    }
+
+    if (restarter.waitClusterStarted(300) != 0)
+    {
+      ctx->stopTest();
+      return NDBT_FAILED;
+    }
+
+    if (GETNDB(step)->waitUntilReady() != 0)
+    {
+      ctx->stopTest();
+      return NDBT_FAILED;
+    }
+  }
+
+  ctx->stopTest();
+
+  return NDBT_OK;
+}
+
+int runUpdateVerifyGCI(NDBT_Context* ctx, NDBT_Step* step)
+{
+  HugoOperations hugoOps(*ctx->getTab());
+  HugoCalculator hugoCalc(*ctx->getTab());
+  Ndb* pNdb = GETNDB(step);
+
+  /* Loop, updating the first record in the table, and checking
+   * that it has the GCI it should
+   */
+  Uint64 loopCount = 0;
+  Uint64 distinctCount = 0;
+  Uint64 expectedGCI = 0;
+  Uint64 lastGoodReadGCI = 0;
+  Uint32 extraGciBits = ctx->getTab()->getExtraRowGciBits();
+  Uint32 firstSaturatedValue = (1 << extraGciBits) -1;
+  ndbout_c("Extra GCI bits : %u, firstSaturatedValue : %u",
+           extraGciBits,
+           firstSaturatedValue);
+  int result = NDBT_OK;
+  while (!ctx->isTestStopped())
+  {
+    CHECK(hugoOps.startTransaction(pNdb) == 0);
+    /* Define a read op to get the 'existing' GCI */
+    NdbTransaction* trans = hugoOps.getTransaction();
+    CHECK(hugoOps.pkReadRecord(pNdb,
+                               0,
+                               1) == 0);
+    NdbOperation* readOp = trans->getNdbOperation(ctx->getTab());
+    CHECK(readOp != NULL);
+    CHECK(readOp->readTuple() == 0);
+    CHECK(hugoOps.equalForRow(readOp, 0) == 0);
+    NdbRecAttr* rowGci = readOp->getValue(NdbDictionary::Column::ROW_GCI64);
+    CHECK(rowGci != NULL);
+
+    /* Define an update op to set the next GCI */
+    CHECK(hugoOps.pkUpdateRecord(pNdb, 0, 1, loopCount+1) == 0);
+
+    if (hugoOps.execute_Commit(pNdb) != 0)
+    {
+      if (hugoOps.getNdbError().classification ==
+          NdbError::NodeRecoveryError)
+      {
+        hugoOps.closeTransaction(pNdb);
+        ndbout_c("Temporary error at loopCount %llu", loopCount);
+        continue;
+      }
+
+      ndbout << "Error executing : " << hugoOps.getNdbError() << endl;
+      return NDBT_FAILED;
+    }
+
+    /* First check the data is as expected */
+    CHECK(hugoCalc.verifyRowValues(&hugoOps.get_row(0)) == 0);
+    CHECK((Uint64)hugoCalc.getUpdatesValue(&hugoOps.get_row(0)) == loopCount);
+    //ndbout_c("Updates value is %u", hugoCalc.getUpdatesValue(&hugoOps.get_row(0)));
+
+    Uint64 committedGCI;
+    CHECK(trans->getGCI(&committedGCI) == 0);
+    Uint32 gci_lo = Uint32(committedGCI & 0xffffffff);
+
+    Uint64 saturatedCommittedGCI = (gci_lo >= firstSaturatedValue) ?
+      committedGCI | 0xffffffff : committedGCI;
+    Uint64 rowGCI64 = rowGci->u_64_value();
+
+//    ndbout_c("Read row GCI64 %x/%x.  Committed GCI64 : %x/%x.  Saturated GCI64 :%x/%x Last good read : %x/%x",
+//             Uint32(rowGCI64 >> 32),
+//             Uint32(rowGCI64 & 0xffffffff),
+//             Uint32(committedGCI >> 32),
+//             Uint32(committedGCI & 0xffffffff),
+//             Uint32(saturatedCommittedGCI >> 32),
+//             Uint32(saturatedCommittedGCI & 0xffffffff),
+//             Uint32(lastGoodReadGCI >> 32),
+//             Uint32(lastGoodReadGCI & 0xffffffff));
+
+
+    if (rowGCI64 < lastGoodReadGCI)
+    {
+      ndbout_c("ERROR : Read row GCI value (%x/%x) lower than previous value (%x/%x)",
+               (Uint32) (rowGCI64 >> 32),
+               (Uint32) (rowGCI64 & 0xffffffff),
+               Uint32(lastGoodReadGCI >> 32),
+               Uint32(lastGoodReadGCI & 0xffffffff));
+    }
+    /* We certainly should not read a committed GCI value that's
+     * bigger than the read's commit-point GCI
+     */
+    if (saturatedCommittedGCI < rowGCI64)
+    {
+      ndbout_c("ERROR : Saturated committed GCI (%x/%x) lower than actual read GCI (%x/%x)",
+               Uint32(saturatedCommittedGCI >>32),
+               Uint32(saturatedCommittedGCI & 0xffffffff),
+               (Uint32) (rowGCI64 >> 32),
+               (Uint32) (rowGCI64 & 0xffffffff));
+    }
+    /* If we've read a committed GCI then we should certainly not
+     * be committing at lower values
+     */
+    if (saturatedCommittedGCI < lastGoodReadGCI)
+    {
+      ndbout_c("ERROR : Saturated committed GCI (%x/%x) lower than a previously"
+               "read GCI (%x/%x)",
+               Uint32(saturatedCommittedGCI >>32),
+               Uint32(saturatedCommittedGCI & 0xffffffff),
+               Uint32(lastGoodReadGCI >> 32),
+               Uint32(lastGoodReadGCI & 0xffffffff));
+    };
+    /* If we've previously had a particular committed GCI then we
+     * should certainly not now have a lower committed GCI
+     */
+    if (saturatedCommittedGCI < expectedGCI)
+    {
+      ndbout_c("ERROR : Saturated committed GCI (%x/%x) lower than expected GCI"
+               " (%x/%x)",
+               Uint32(saturatedCommittedGCI >>32),
+               Uint32(saturatedCommittedGCI & 0xffffffff),
+               Uint32(expectedGCI >> 32),
+               Uint32(expectedGCI & 0xffffffff));
+    }
+
+    if (loopCount > 0)
+    {
+      if (rowGCI64 != expectedGCI)
+      {
+        ndbout_c("MISMATCH : Expected GCI of %x/%x, but found %x/%x",
+                 (Uint32) (expectedGCI >> 32),
+                 (Uint32) (expectedGCI & 0xffffffff),
+                 (Uint32) (rowGCI64 >> 32),
+                 (Uint32) (rowGCI64 & 0xffffffff));
+        ndbout_c("At loopcount %llu", loopCount);
+        ndbout_c("Last good read GCI %x/%x",
+                 Uint32(lastGoodReadGCI >> 32),
+                 Uint32(lastGoodReadGCI & 0xffffffff));
+        ndbout_c("Read committed GCI : %x/%x",
+                 Uint32(saturatedCommittedGCI >>32),
+                 Uint32(saturatedCommittedGCI & 0xffffffff));
+        ndbout_c("Transaction coordinator node : %u",
+                 trans->getConnectedNodeId());
+        return NDBT_FAILED;
+      }
+
+      if (saturatedCommittedGCI != expectedGCI)
+      {
+        distinctCount++;
+      }
+    }
+
+    expectedGCI = saturatedCommittedGCI;
+    lastGoodReadGCI = rowGCI64;
+
+    hugoOps.closeTransaction(pNdb);
+    loopCount++;
+
+    /* Sleep to avoid excessive updating */
+    NdbSleep_MilliSleep(10);
+  }
+
+  ndbout_c("%llu updates with %llu distinct GCI values",
+           loopCount,
+           distinctCount);
+
+  return result;
+}
+
 NDBT_TESTSUITE(testRestartGci);
 TESTCASE("InsertRestartGci", 
 	 "Verify that only expected records are still in NDB\n"
 	 "after a restart" ){
-  INITIALIZER(runClearTable);
+  INITIALIZER(runCreateTable);
   INITIALIZER(runClearGlobals);
-  STEP(runInsertRememberGci);
-  STEP(runRestartGciControl);
+  INITIALIZER(runInsertRememberGci);
+  INITIALIZER(runRestartGciControl);
+  INITIALIZER(runDetermineRestartGci);
+  TC_PROPERTY("ExactGCI", Uint32(0)); /* Recovery from Redo == inexact low word */
   VERIFIER(runVerifyInserts);
   /* Restart again - LCP after first restart will mean that this
    * time we recover from LCP, not Redo
    */
-  VERIFIER(runRestart);
+  VERIFIER(runRestartAll);
+  VERIFIER(runDetermineRestartGci);
+  VERIFIER(runVerifyInserts);  // Check GCIs again
+  /* Restart again - one node, initial.  This will check
+   * COPYFRAG behaviour
+   */
+  VERIFIER(runRestartOneInitial);
   VERIFIER(runVerifyInserts);  // Check GCIs again
+  VERIFIER(runClearTable);
+  /* Re-fill table with records, will just be in Redo
+   * Then restart, testing COPYFRAG behaviour with
+   * non #ffff... low word
+   */
+  VERIFIER(runClearGlobals);
+  VERIFIER(runInsertRememberGci);
+  VERIFIER(runRestartOneInitial);
+  /* Require exact GCI match from here - no Redo messing it up */
+  VERIFIER(runRequireExact);
+  VERIFIER(runVerifyInserts);
+  /* Now-restart all nodes - all inserts should be
+   * in LCP, and should be restored correctly
+   */
+  VERIFIER(runRestartAll);
+  VERIFIER(runDetermineRestartGci);
+  VERIFIER(runVerifyInserts);
+  FINALIZER(runClearTable);
+  FINALIZER(runDropTable);
+}
+TESTCASE("InitialNodeRestartUpdate",
+         "Check that initial node restart (copyfrag) does "
+         "not affect GCI recording")
+{
+  INITIALIZER(runCreateTable);
+  INITIALIZER(runLoadTable);
+  STEP(runNodeInitialRestarts);
+  STEP(runUpdateVerifyGCI);
   FINALIZER(runClearTable);
+  FINALIZER(runDropTable);
 }
 NDBT_TESTSUITE_END(testRestartGci);
 
 int main(int argc, const char** argv){
   ndb_init();
   NDBT_TESTSUITE_INSTANCE(testRestartGci);
+  testRestartGci.setCreateTable(false);
   return testRestartGci.execute(argc, argv);
 }
 

=== modified file 'storage/ndb/test/run-test/daily-basic-tests.txt'
--- a/storage/ndb/test/run-test/daily-basic-tests.txt	2011-05-09 08:49:19 +0000
+++ b/storage/ndb/test/run-test/daily-basic-tests.txt	2011-05-18 12:56:24 +0000
@@ -930,9 +930,9 @@ max-time: 7200
 cmd: testTransactions
 args:
 
-max-time: 1500
+max-time: 3000
 cmd: testRestartGci
-args: T6 
+args: T6 D1
 
 max-time: 1500
 cmd: testBlobs

=== modified file 'storage/ndb/test/src/NDBT_Table.cpp'
--- a/storage/ndb/test/src/NDBT_Table.cpp	2011-02-02 00:40:07 +0000
+++ b/storage/ndb/test/src/NDBT_Table.cpp	2011-05-17 23:29:55 +0000
@@ -39,6 +39,8 @@ operator <<(class NdbOut& ndbout, const 
   ndbout << "SingleUserMode: " << (Uint32) tab.getSingleUserMode() << endl;
   ndbout << "ForceVarPart: " << tab.getForceVarPart() << endl;
   ndbout << "FragmentCount: " << tab.getFragmentCount() << endl;
+  ndbout << "ExtraRowGciBits: " << tab.getExtraRowGciBits() << endl;
+  ndbout << "ExtraRowAuthorBits: " << tab.getExtraRowAuthorBits() << endl;
 
   //<< ((tab.getTupleKey() == TupleId) ? " tupleid" : "") <<endl;
   ndbout << "TableStatus: ";

=== modified file 'storage/ndb/tools/select_all.cpp'
--- a/storage/ndb/tools/select_all.cpp	2011-02-04 09:45:35 +0000
+++ b/storage/ndb/tools/select_all.cpp	2011-05-18 12:56:24 +0000
@@ -49,6 +49,8 @@ static int _dumpDisk = 0;
 static int use_rowid = 0;
 static int nodata = 0;
 static int use_gci = 0;
+static int use_gci64 = 0;
+static int use_author = 0;
 
 static struct my_option my_long_options[] =
 {
@@ -86,6 +88,12 @@ static struct my_option my_long_options[
   { "gci", NDB_OPT_NOSHORT, "Dump gci",
     (uchar**) &use_gci, (uchar**) &use_gci, 0,
     GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, 
+  { "gci64", NDB_OPT_NOSHORT, "Dump ROW$GCI64",
+    (uchar**) &use_gci64, (uchar**) &use_gci64, 0,
+    GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
+  { "author", NDB_OPT_NOSHORT, "Dump ROW$AUTHOR",
+    (uchar**) &use_author, (uchar**) &use_author, 0,
+    GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
   { "tupscan", 't', "Scan in tup order",
     (uchar**) &_tup, (uchar**) &_tup, 0,
     GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, 
@@ -328,7 +336,7 @@ int scanReadRecords(Ndb* pNdb, 
     if(_dumpDisk && disk)
       disk_ref = pOp->getValue(NdbDictionary::Column::DISK_REF);
 
-    NdbRecAttr * rowid= 0, *frag = 0, *gci = 0;
+    NdbRecAttr * rowid= 0, *frag = 0, *gci = 0, *gci64 = 0, *author = 0;
     if (use_rowid)
     {
       frag = pOp->getValue(NdbDictionary::Column::FRAGMENT);
@@ -339,7 +347,17 @@ int scanReadRecords(Ndb* pNdb, 
     {
       gci = pOp->getValue(NdbDictionary::Column::ROW_GCI);
     }
+
+    if (use_gci64)
+    {
+      gci64 = pOp->getValue(NdbDictionary::Column::ROW_GCI64);
+    }
     
+    if (use_author)
+    {
+      author = pOp->getValue(NdbDictionary::Column::ROW_AUTHOR);
+    }
+
     check = pTrans->execute(NdbTransaction::NoCommit);   
     if( check == -1 ) {
       const NdbError err = pTrans->getNdbError();
@@ -386,6 +404,18 @@ int scanReadRecords(Ndb* pNdb, 
         ndbout << "DISK_REF";
       }
 
+      if (gci64)
+      {
+        DELIMITER;
+        ndbout << "ROW$GCI64";
+      }
+
+      if (author)
+      {
+        DELIMITER;
+        ndbout << "ROW$AUTHOR";
+      }
+
       ndbout << endl;
     }
 #undef DELIMITER
@@ -426,8 +456,30 @@ int scanReadRecords(Ndb* pNdb, 
 	       << " m_page: " << disk_ref->u_32_value() 
 	       << " m_page_idx: " << *(Uint16*)(disk_ref->aRef() + 4) << " ]";
       }
+
+      if (gci64)
+      {
+	if (gci64->isNULL())
+	  ndbout << "\tNULL";
+        else
+        {
+          Uint64 tmp = gci64->u_64_value();
+          ndbout << "\t" << Uint32(tmp >> 32) << "/" << Uint32(tmp);
+        }
+      }
+
+      if (author)
+      {
+	if (author->isNULL())
+	  ndbout << "\tNULL";
+        else
+        {
+          ndbout << "\t" << author->u_32_value();
+        }
+      }
+
       
-      if (rowid || disk_ref || gci || !nodata)
+      if (rowid || disk_ref || gci || !nodata || gci64 || author)
 	ndbout << endl;
       eof = pOp->nextResult();
     }

No bundle (reason: revision is a merge (you can force generation of a bundle with env var BZR_FORCE_BUNDLE=1)).
Thread
bzr commit into mysql-5.5-cluster branch (magnus.blaudd:3340) Magnus Blåudd19 May