List:Commits« Previous MessageNext Message »
From:Mikael Ronstrom Date:January 9 2012 12:50pm
Subject:bzr push into mysql-5.5-cluster-7.2 branch (mikael.ronstrom:3685 to 3690)
View as plain text  
 3690 Mikael Ronstrom	2012-01-09 [merge]
      merge

    modified:
      storage/ndb/memcache/src/ClusterConnectionPool.cc
      storage/ndb/src/ndbjtie/ndbapi_jtie.hpp
 3689 jonas oreland	2012-01-05 [merge]
      merge 72 into wl5929_72

    modified:
      storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
      storage/ndb/src/kernel/blocks/trpman.cpp
      storage/ndb/src/kernel/blocks/trpman.hpp
      storage/ndb/src/kernel/vm/SimulatedBlock.hpp
      storage/ndb/src/kernel/vm/TransporterCallback.cpp
      storage/ndb/src/kernel/vm/TransporterCallbackKernel.hpp
      storage/ndb/src/kernel/vm/mt.cpp
      storage/ndb/src/kernel/vm/mt_thr_config.cpp
      storage/ndb/src/kernel/vm/mt_thr_config.hpp
 3688 jonas oreland	2012-01-04 [merge]
      ndb - merge 72 to wl5929_72

    modified:
      storage/ndb/src/kernel/vm/ArrayPool.hpp
 3687 jonas oreland	2012-01-04 [merge]
      ndb - merge 70 to wl5929_72

    modified:
      storage/ndb/src/kernel/vm/mt.cpp
 3686 jonas oreland	2012-01-04 [merge]
      ndb - merge 72 into wl5929_72

    added:
      mysql-test/suite/ndb_rpl/r/ndb_rpl_bug_13440282.result
      mysql-test/suite/ndb_rpl/r/ndb_rpl_ddl_open_trans.result
      mysql-test/suite/ndb_rpl/t/ndb_rpl_bug_13440282.test
      mysql-test/suite/ndb_rpl/t/ndb_rpl_ddl_open_trans.test
      storage/ndb/src/kernel/vm/test_context.cpp
      storage/ndb/src/kernel/vm/test_context.hpp
    modified:
      libmysqld/libmysqld.c
      mysql-test/suite/ndb/r/ndb_column_properties.result
      mysql-test/suite/ndb/r/ndb_multi.result
      mysql-test/suite/ndb/t/ndb_column_properties.test
      mysql-test/suite/ndb/t/ndb_multi.test
      mysql-test/suite/ndb_team/t/ndb_autodiscover3.test
      mysql-test/suite/sys_vars/t/disabled.def
      sql/ha_ndb_index_stat.cc
      sql/ha_ndbcluster.cc
      sql/ha_ndbcluster_binlog.cc
      sql/ndb_local_schema.cc
      sql/ndb_local_schema.h
      sql/ndb_thd_ndb.h
      storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/AbstractDomainFieldHandlerImpl.java
      storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/AbstractDomainTypeHandlerImpl.java
      storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/DomainFieldHandlerImpl.java
      storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/DomainTypeHandlerImpl.java
      storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/spi/DomainTypeHandler.java
      storage/ndb/clusterj/clusterj-core/src/main/resources/com/mysql/clusterj/core/Bundle.properties
      storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-bad-connection-lifecycle-interceptor.properties
      storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-no-connection-lifecycle-interceptor.properties
      storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-no-statement-interceptor.properties
      storage/ndb/clusterj/clusterj-jdbc/src/test/resources/clusterj.properties
      storage/ndb/clusterj/clusterj-jpatest/src/main/java/com/mysql/clusterj/jpatest/AbstractJPABaseTest.java
      storage/ndb/clusterj/clusterj-openjpa/crundOpenjpaClusterj.properties
      storage/ndb/clusterj/clusterj-openjpa/crundOpenjpaMysql.properties
      storage/ndb/clusterj/clusterj-openjpa/src/main/java/com/mysql/clusterj/openjpa/NdbOpenJPADomainTypeHandlerImpl.java
      storage/ndb/clusterj/clusterj-openjpa/src/test/resources/META-INF/persistence.xml
      storage/ndb/clusterj/clusterj-test/src/main/java/regression/Bug54619.java
      storage/ndb/clusterj/clusterj-test/src/main/java/testsuite/clusterj/domaintypehandler/CrazyDomainTypeHandlerFactoryImpl.java
      storage/ndb/clusterj/clusterj-tie/src/test/resources/clusterj.properties
      storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
      storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
      storage/ndb/src/kernel/blocks/dbtup/tuppage.hpp
      storage/ndb/src/kernel/error/ErrorReporter.cpp
      storage/ndb/src/kernel/vm/CMakeLists.txt
      storage/ndb/src/kernel/vm/DLList.hpp
      storage/ndb/src/kernel/vm/DynArr256.cpp
      storage/ndb/src/kernel/vm/SLList.hpp
      storage/ndb/test/ndbapi/testNodeRestart.cpp
      storage/ndb/test/ndbapi/testSystemRestart.cpp
 3685 Mikael Ronström	2012-01-02
      Another removal of false CPU cache line sharing

    modified:
      storage/ndb/src/kernel/vm/ArrayPool.hpp
=== modified file 'libmysqld/libmysqld.c'
--- a/libmysqld/libmysqld.c	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/libmysqld/libmysqld.c	revid:mikael.ronstrom@stripped
@@ -85,7 +85,7 @@ mysql_real_connect(MYSQL *mysql,const ch
 		   const char *passwd, const char *db,
 		   uint port, const char *unix_socket,ulong client_flag)
 {
-  char name_buff[USERNAME_LENGTH];
+  char name_buff[USERNAME_LENGTH + 1];
 
   DBUG_ENTER("mysql_real_connect");
   DBUG_PRINT("enter",("host: %s  db: %s  user: %s (libmysqld)",

=== modified file 'mysql-test/suite/ndb/r/ndb_column_properties.result'
--- a/mysql-test/suite/ndb/r/ndb_column_properties.result	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/mysql-test/suite/ndb/r/ndb_column_properties.result	revid:mikael.ronstrom@stripped6-sanff2aqtuj8wph0
@@ -8,6 +8,7 @@ CREATE TABLESPACE ts1
 ADD DATAFILE 'datafile.dat'
 USE LOGFILE GROUP lg1
 INITIAL_SIZE 6M
+EXTENT_SIZE 256k
 ENGINE NDB;
 create table t1 (a int column_format DYNAMIC STORAGE DISK) TABLESPACE ts1 engine NDB;
 Warnings:

=== modified file 'mysql-test/suite/ndb/r/ndb_multi.result'
--- a/mysql-test/suite/ndb/r/ndb_multi.result	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/mysql-test/suite/ndb/r/ndb_multi.result	revid:mikael.ronstrom@stripped2aqtuj8wph0
@@ -212,3 +212,9 @@ show tables;
 Tables_in_test
 t1
 drop table t1;
+SHOW TABLES FROM mysql LIKE 'ndb_schema';
+Tables_in_mysql (ndb_schema)
+SELECT count(1) FROM INFORMATION_SCHEMA.TABLES
+WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'ndb_schema';
+count(1)
+0

=== modified file 'mysql-test/suite/ndb/t/ndb_column_properties.test'
--- a/mysql-test/suite/ndb/t/ndb_column_properties.test	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/mysql-test/suite/ndb/t/ndb_column_properties.test	revid:mikael.ronstrom@stripped8wph0
@@ -14,6 +14,7 @@ CREATE TABLESPACE ts1
 ADD DATAFILE 'datafile.dat'
 USE LOGFILE GROUP lg1
 INITIAL_SIZE 6M
+EXTENT_SIZE 256k
 ENGINE NDB;
 
 create table t1 (a int column_format DYNAMIC STORAGE DISK) TABLESPACE ts1 engine NDB;

=== modified file 'mysql-test/suite/ndb/t/ndb_multi.test'
--- a/mysql-test/suite/ndb/t/ndb_multi.test	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/mysql-test/suite/ndb/t/ndb_multi.test	revid:mikael.ronstrom@oracle.com-20120109124556-sanff2aqtuj8wph0
@@ -261,3 +261,10 @@ commit;
 show tables;
 drop table t1;
 
+#
+# The mysql.ndb_schema table should be not be visible in SHOW TABLES
+# or I_S.TABLES
+#
+SHOW TABLES FROM mysql LIKE 'ndb_schema';
+SELECT count(1) FROM INFORMATION_SCHEMA.TABLES
+  WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'ndb_schema';

=== added file 'mysql-test/suite/ndb_rpl/r/ndb_rpl_bug_13440282.result'
--- a/mysql-test/suite/ndb_rpl/r/ndb_rpl_bug_13440282.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/ndb_rpl/r/ndb_rpl_bug_13440282.result	revid:mikael.ronstrom@strippedqtuj8wph0
@@ -0,0 +1,118 @@
+include/master-slave.inc
+[connection master]
+CREATE TABLE `loadreptable` (
+`nid` int(11) NOT NULL,
+`nom` char(255) DEFAULT NULL,
+`prenom` char(255) DEFAULT NULL,
+`abc` char(255) DEFAULT NULL,
+`wkz` char(255) DEFAULT NULL,
+`xyz` char(255) DEFAULT NULL,
+PRIMARY KEY (`nid`) USING HASH
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
+CREATE PROCEDURE MAJ ()
+BEGIN
+DECLARE fini INT default 0;
+WHILE fini < 20 DO
+DELETE FROM loadreptable WHERE nid > 2;
+UPDATE loadreptable SET nid=nid+1 ORDER BY nid DESC;
+UPDATE loadreptable SET
+nom="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxx";
+INSERT INTO loadreptable VALUES(1,"w","t","y","k","b");
+SET fini=fini+1;
+END WHILE;
+END ;
+//
+call MAJ();
+"master"
+select count(*) from loadreptable;
+count(*)
+3
+"slave"
+select count(*) from loadreptable;
+count(*)
+3
+call MAJ();
+"master"
+select count(*) from loadreptable;
+count(*)
+3
+"slave"
+select count(*) from loadreptable;
+count(*)
+3
+call MAJ();
+"master"
+select count(*) from loadreptable;
+count(*)
+3
+"slave"
+select count(*) from loadreptable;
+count(*)
+3
+call MAJ();
+"master"
+select count(*) from loadreptable;
+count(*)
+3
+"slave"
+select count(*) from loadreptable;
+count(*)
+3
+call MAJ();
+"master"
+select count(*) from loadreptable;
+count(*)
+3
+"slave"
+select count(*) from loadreptable;
+count(*)
+3
+call MAJ();
+"master"
+select count(*) from loadreptable;
+count(*)
+3
+"slave"
+select count(*) from loadreptable;
+count(*)
+3
+call MAJ();
+"master"
+select count(*) from loadreptable;
+count(*)
+3
+"slave"
+select count(*) from loadreptable;
+count(*)
+3
+call MAJ();
+"master"
+select count(*) from loadreptable;
+count(*)
+3
+"slave"
+select count(*) from loadreptable;
+count(*)
+3
+call MAJ();
+"master"
+select count(*) from loadreptable;
+count(*)
+3
+"slave"
+select count(*) from loadreptable;
+count(*)
+3
+call MAJ();
+"master"
+select count(*) from loadreptable;
+count(*)
+3
+"slave"
+select count(*) from loadreptable;
+count(*)
+3
+drop table loadreptable;
+drop procedure MAJ;
+include/rpl_end.inc

=== added file 'mysql-test/suite/ndb_rpl/r/ndb_rpl_ddl_open_trans.result'
--- a/mysql-test/suite/ndb_rpl/r/ndb_rpl_ddl_open_trans.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/ndb_rpl/r/ndb_rpl_ddl_open_trans.result	revid:mikael.ronstrom@stripped-sanff2aqtuj8wph0
@@ -0,0 +1,53 @@
+include/master-slave.inc
+[connection master]
+create table t1 ( a int ) engine = ndb;
+begin;
+insert into t1 values(1);
+alter table t1 rename t2;
+commit;
+drop table t2;
+set global ndb_check_shares=1;
+set global ndb_check_shares=1;
+create table t1 ( a int primary key) engine = ndb;
+begin;
+insert into t1 values(1);
+alter online table t1 add column b int column_format dynamic;
+commit;
+drop table t1;
+set global ndb_check_shares=1;
+set global ndb_check_shares=1;
+create table t1 ( a int primary key) engine = ndb;
+begin;
+insert into t1 values(1);
+alter offline table t1 add column b int column_format dynamic;
+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
+commit;
+drop table t1;
+set global ndb_check_shares=1;
+set global ndb_check_shares=1;
+create table t1 ( a int primary key, b int) engine = ndb;
+begin;
+insert into t1 values(1, 1);
+create online index ind_b on t1(b);
+commit;
+drop table t1;
+set global ndb_check_shares=1;
+set global ndb_check_shares=1;
+create table t1 ( a int primary key, b int, index ind_b (b)) engine = ndb;
+begin;
+insert into t1 values(1, 1);
+drop index ind_b on t1;
+commit;
+drop table t1;
+set global ndb_check_shares=1;
+set global ndb_check_shares=1;
+create database testdb;
+create table testdb.t1 (a int) engine = ndb;
+begin;
+insert into testdb.t1 values(1);
+alter database testdb charset = latin1;
+commit;
+drop database testdb;
+set global ndb_check_shares=1;
+set global ndb_check_shares=1;
+include/rpl_end.inc

=== added file 'mysql-test/suite/ndb_rpl/t/ndb_rpl_bug_13440282.test'
--- a/mysql-test/suite/ndb_rpl/t/ndb_rpl_bug_13440282.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_bug_13440282.test	revid:mikael.ronstrom@stripped
@@ -0,0 +1,53 @@
+--source include/have_ndb.inc
+--source include/have_binlog_format_mixed_or_row.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
+
+CREATE TABLE `loadreptable` (
+ `nid` int(11) NOT NULL,
+ `nom` char(255) DEFAULT NULL,
+ `prenom` char(255) DEFAULT NULL,
+ `abc` char(255) DEFAULT NULL,
+ `wkz` char(255) DEFAULT NULL,
+ `xyz` char(255) DEFAULT NULL,
+ PRIMARY KEY (`nid`) USING HASH
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
+ 
+delimiter //;
+CREATE PROCEDURE MAJ ()
+BEGIN
+DECLARE fini INT default 0;
+WHILE fini < 20 DO
+DELETE FROM loadreptable WHERE nid > 2;
+UPDATE loadreptable SET nid=nid+1 ORDER BY nid DESC;
+UPDATE loadreptable SET
+nom="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxx";
+INSERT INTO loadreptable VALUES(1,"w","t","y","k","b");
+SET fini=fini+1;
+END WHILE;
+END ;
+//
+delimiter ;//
+
+--sync_slave_with_master
+
+let $i=10;
+while ($i)
+{
+  --connection master
+  call MAJ();
+  --echo "master"
+  select count(*) from loadreptable;
+  --sync_slave_with_master
+  --connection slave
+  --echo "slave"
+  select count(*) from loadreptable;
+  dec $i;
+}
+
+--connection master
+drop table loadreptable;
+drop procedure MAJ;
+
+--sync_slave_with_master
+--source include/rpl_end.inc

=== added file 'mysql-test/suite/ndb_rpl/t/ndb_rpl_ddl_open_trans.test'
--- a/mysql-test/suite/ndb_rpl/t/ndb_rpl_ddl_open_trans.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/ndb_rpl/t/ndb_rpl_ddl_open_trans.test	revid:mikael.ronstrom@strippedf2aqtuj8wph0
@@ -0,0 +1,7 @@
+--source include/have_ndb.inc
+--source include/ndb_have_online_alter.inc
+--source suite/ndb_rpl/ndb_master-slave.inc
+
+--source suite/ndb/t/ndb_ddl_open_trans.test
+
+--source include/rpl_end.inc

=== modified file 'mysql-test/suite/ndb_team/t/ndb_autodiscover3.test'
--- a/mysql-test/suite/ndb_team/t/ndb_autodiscover3.test	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/mysql-test/suite/ndb_team/t/ndb_autodiscover3.test	revid:mikael.ronstrom@stripped6-sanff2aqtuj8wph0
@@ -79,14 +79,6 @@ select * from t2 order by a limit 3;
 select * from t2;
 show tables like 't2';
 reset master;
-#
-# Add this in 5.5...I don't want to disable all test
-#   btw, we should add a new testcase for this
---disable_query_log
---disable_result_log
-drop table if exists t2;
---enable_result_log
---enable_query_log
 create table t2 (a int key) engine=ndbcluster;
 insert into t2 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
 select * from t2 order by a limit 3;
@@ -117,15 +109,6 @@ reset master;
 select * from t2;
 show tables like 't2';
 reset master;
-#
-# TODO 5.5 failure...
-# TODO we should write more comprehensive testcase for this
-#
---disable_query_log
---disable_result_log
-drop table if exists t2;
---enable_result_log
---enable_query_log
 create table t2 (a int key) engine=ndbcluster;
 insert into t2 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
 select * from t2 order by a limit 3;

=== modified file 'mysql-test/suite/sys_vars/t/disabled.def'
--- a/mysql-test/suite/sys_vars/t/disabled.def	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/mysql-test/suite/sys_vars/t/disabled.def	revid:mikael.ronstrom@stripped6-sanff2aqtuj8wph0
@@ -12,5 +12,6 @@
 transaction_prealloc_size_basic_32  : Bug#11748572
 transaction_prealloc_size_basic_64  : Bug#11748572
 query_cache_size_basic_32           : Bug#11748572
+query_cache_size_basic_64           : Bug#11748572
 #thread_cache_size_func             : Bug#11750172: 2008-11-07 joro main.thread_cache_size_func fails in pushbuild when run with pool of threads
 

=== modified file 'sql/ha_ndb_index_stat.cc'
--- a/sql/ha_ndb_index_stat.cc	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/sql/ha_ndb_index_stat.cc	revid:mikael.ronstrom@stripped
@@ -82,6 +82,7 @@ struct Ndb_index_stat {
   char id[32];
 #endif
   time_t access_time;   /* by any table handler */
+  time_t update_time;   /* latest successful update by us */
   time_t load_time;     /* when stats were created by kernel */
   time_t read_time;     /* when stats were read by us (>= load_time) */
   uint sample_version;  /* goes with read_time */
@@ -556,7 +557,8 @@ struct Ndb_index_stat_glob {
   uint query_count;
   uint query_no_stats;
   uint query_error;
-  uint event_ok;          /* Events received for known index */
+  uint event_act;         /* Events acted on */
+  uint event_skip;        /* Events skipped (likely event-to-self) */
   uint event_miss;        /* Events received for unknown index */
   uint refresh_count;     /* Successful cache refreshes */
   uint clean_count;       /* Times old caches (1 or more) cleaned */
@@ -569,7 +571,7 @@ struct Ndb_index_stat_glob {
   uint cache_high_bytes;  /* Max ever of above */
   uint cache_drop_bytes;  /* Part of above waiting to be evicted */
   uint cache_evict_bytes; /* Part of above waiting to be evicted */
-  char status[2][512];
+  char status[2][1024];
   uint status_i;
 
   Ndb_index_stat_glob();
@@ -592,7 +594,8 @@ Ndb_index_stat_glob::Ndb_index_stat_glob
   query_count= 0;
   query_no_stats= 0;
   query_error= 0;
-  event_ok= 0;
+  event_act= 0;
+  event_skip= 0;
   event_miss= 0;
   refresh_count= 0;
   clean_count= 0;
@@ -651,7 +654,8 @@ Ndb_index_stat_glob::set_status()
   sprintf(p, ",query:(all:%u,nostats:%u,error:%u)",
              query_count, query_no_stats, query_error);
   p+= strlen(p);
-  sprintf(p, ",event:(ok:%u,miss:%u)", event_ok, event_miss);
+  sprintf(p, ",event:(act:%u,skip:%u,miss:%u)",
+             event_act, event_skip, event_miss);
   p+= strlen(p);
   sprintf(p, ",cache:(refresh:%u,clean:%u,pinned:%u,drop:%u,evict:%u)",
              refresh_count, clean_count, pinned_count, drop_count, evict_count);
@@ -695,7 +699,8 @@ Ndb_index_stat_glob::zero_total()
   query_count= 0;
   query_no_stats= 0;
   query_error= 0;
-  event_ok= 0;
+  event_act= 0;
+  event_skip= 0;
   event_miss= 0;
   refresh_count= 0;
   clean_count= 0;
@@ -719,6 +724,7 @@ Ndb_index_stat::Ndb_index_stat()
   memset(id, 0, sizeof(id));
 #endif
   access_time= 0;
+  update_time= 0;
   load_time= 0;
   read_time= 0;
   sample_version= 0;
@@ -1324,6 +1330,7 @@ ndb_index_stat_cache_evict(Ndb_index_sta
 struct Ndb_index_stat_proc {
   NdbIndexStat* is_util; // For metadata and polling
   Ndb *ndb;
+  time_t start; // start of current processing slice
   time_t now;
   int lt;
   bool busy;
@@ -1394,6 +1401,9 @@ ndb_index_stat_proc_update(Ndb_index_sta
     pr.lt= Ndb_index_stat::LT_Error;
     return;
   }
+
+  pr.now= ndb_index_stat_time();
+  st->update_time= pr.now;
   pr.lt= Ndb_index_stat::LT_Read;
 }
 
@@ -1943,11 +1953,30 @@ ndb_index_stat_proc_event(Ndb_index_stat
   /*
     Put on Check list if idle.
     We get event also for our own analyze but this should not matter.
+
+    bug#13524696
+    The useless event-to-self makes an immediate second analyze wait
+    for loop_idle time since the entry moves to LT_Check temporarily.
+    Ignore the event if an update was done near this processing slice.
    */
   pr.lt= st->lt;
   if (st->lt == Ndb_index_stat::LT_Idle ||
       st->lt == Ndb_index_stat::LT_Error)
-    pr.lt= Ndb_index_stat::LT_Check;
+  {
+    if (st->update_time < pr.start)
+    {
+      DBUG_PRINT("index_stat", ("st %s accept event for check", st->id));
+      pr.lt= Ndb_index_stat::LT_Check;
+    }
+    else
+    {
+      DBUG_PRINT("index_stat", ("st %s ignore likely event to self", st->id));
+    }
+  }
+  else
+  {
+    DBUG_PRINT("index_stat", ("st %s ignore event on lt=%d", st->id, st->lt));
+  }
 }
 
 void
@@ -1995,11 +2024,15 @@ ndb_index_stat_proc_event(Ndb_index_stat
      */
     if (st != 0)
     {
-      DBUG_PRINT("index_stat", ("st %s proc %s", st->id, "Event"));
+      DBUG_PRINT("index_stat", ("st %s proc %s", st->id, "event"));
       ndb_index_stat_proc_event(pr, st);
       if (pr.lt != st->lt)
+      {
         ndb_index_stat_list_move(st, pr.lt);
-      glob.event_ok++;
+        glob.event_act++;
+      }
+      else
+        glob.event_skip++;
     }
     else
     {
@@ -2164,6 +2197,8 @@ ndb_index_stat_proc(Ndb_index_stat_proc 
   Ndb_index_stat_glob old_glob= ndb_index_stat_glob;
 #endif
 
+  pr.start= pr.now= ndb_index_stat_time();
+
   ndb_index_stat_proc_new(pr);
   ndb_index_stat_proc_update(pr);
   ndb_index_stat_proc_read(pr);

=== modified file 'sql/ha_ndbcluster.cc'
--- a/sql/ha_ndbcluster.cc	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/sql/ha_ndbcluster.cc	revid:mikael.ronstrom@strippedtuj8wph0
@@ -58,6 +58,7 @@
 #include "ndb_component.h"
 #include "ndb_util_thread.h"
 #include "ndb_local_connection.h"
+#include "ndb_local_schema.h"
 
 // ndb interface initialization/cleanup
 extern "C" void ndb_init_internal();
@@ -11205,8 +11206,7 @@ int ha_ndbcluster::delete_table(const ch
   DBUG_ENTER("ha_ndbcluster::delete_table");
   DBUG_PRINT("enter", ("name: %s", name));
 
-  if ((thd == injector_thd) ||
-      (thd_ndb->options & TNO_NO_NDB_DROP_TABLE))
+  if (thd == injector_thd)
   {
     /*
       Table was dropped remotely is already
@@ -12298,44 +12298,45 @@ ndbcluster_find_files(handlerton *hton, 
     }
   }
 
-#ifndef NDB_NO_MYSQL_RM_TABLE_PART2
-  /*
-    Delete old files
-
-    ndbcluster_find_files() may be called from I_S code and ndbcluster_binlog
-    thread in situations when some tables are already open. This means that
-    code below will try to obtain exclusive metadata lock on some table
-    while holding shared meta-data lock on other tables. This might lead to a
-    deadlock but such a deadlock should be detected by MDL deadlock detector.
-  */
-  List_iterator_fast<char> it3(delete_list);
-  while ((file_name_str= it3++))
+  if (thd == injector_thd)
   {
-    DBUG_PRINT("info", ("Removing table %s/%s", db, file_name_str));
-    // Delete the table and all related files
-    TABLE_LIST table_list;
-    table_list.init_one_table(db, strlen(db),
-                              file_name_str, strlen(file_name_str),
-                              file_name_str,
-                              TL_WRITE);
-    table_list.mdl_request.set_type(MDL_EXCLUSIVE);
-    /*
-      set TNO_NO_NDB_DROP_TABLE flag to not drop ndb table.
-      it should not exist anyways
-    */
-    thd_ndb->options|= TNO_NO_NDB_DROP_TABLE;
-    (void)mysql_rm_table_part2(thd, &table_list,
-                               false,   /* if_exists */
-                               false,   /* drop_temporary */
-                               false,   /* drop_view */
-                               true     /* dont_log_query*/);
-    thd_ndb->options&= ~TNO_NO_NDB_DROP_TABLE;
-    trans_commit_implicit(thd); /* Safety, should be unnecessary. */
-    thd->mdl_context.release_transactional_locks();
-    /* Clear error message that is returned when table is deleted */
-    thd->clear_error();
+    /*
+      Don't delete anything when called from
+      the binlog thread. This is a kludge to avoid
+      that something is deleted when "Ndb schema dist"
+      uses find_files() to check for "local tables in db"
+    */
+  }
+  else
+  {
+    /*
+      Delete old files
+      (.frm files with corresponding .ndb + does not exists in NDB)
+    */
+    List_iterator_fast<char> it3(delete_list);
+    while ((file_name_str= it3++))
+    {
+      DBUG_PRINT("info", ("Deleting local files for table '%s.%s'",
+                          db, file_name_str));
+
+      // Delete the table and its related files from disk
+      Ndb_local_schema::Table local_table(thd, db, file_name_str);
+      local_table.remove_table();
+
+      // Flush the table out of ndbapi's dictionary cache
+      Ndb_table_guard ndbtab_g(ndb->getDictionary(), file_name_str);
+      ndbtab_g.invalidate();
+
+      // Flush the table from table def. cache.
+      TABLE_LIST table_list;
+      memset(&table_list, 0, sizeof(table_list));
+      table_list.db= (char*)db;
+      table_list.alias= table_list.table_name= file_name_str;
+      close_cached_tables(thd, &table_list, false, 0);
+
+      DBUG_ASSERT(!thd->is_error());
+    }
   }
-#endif
 
   // Create new files
   List_iterator_fast<char> it2(create_list);
@@ -12354,20 +12355,18 @@ ndbcluster_find_files(handlerton *hton, 
   my_hash_free(&ok_tables);
   my_hash_free(&ndb_tables);
 
-  // Delete schema file from files
+  /* Hide mysql.ndb_schema table */
   if (!strcmp(db, NDB_REP_DB))
   {
-    uint count = 0;
-    while (count++ < files->elements)
+    LEX_STRING* file_name;
+    List_iterator<LEX_STRING> it(*files);
+    while ((file_name= it++))
     {
-      file_name = (LEX_STRING *)files->pop();
       if (!strcmp(file_name->str, NDB_SCHEMA_TABLE))
       {
-        DBUG_PRINT("info", ("skip %s.%s table, it should be hidden to user",
-                   NDB_REP_DB, NDB_SCHEMA_TABLE));
-        continue;
+        DBUG_PRINT("info", ("Hiding table '%s.%s'", db, file_name->str));
+        it.remove();
       }
-      files->push_back(file_name); 
     }
   }
   } // extra bracket to avoid gcc 2.95.3 warning

=== modified file 'sql/ha_ndbcluster_binlog.cc'
--- a/sql/ha_ndbcluster_binlog.cc	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/sql/ha_ndbcluster_binlog.cc	revid:mikael.ronstrom@oracle.com-20120109124556-sanff2aqtuj8wph0
@@ -3048,6 +3048,9 @@ class Ndb_schema_event_handler {
     ndbcluster_rename_share(m_thd, share);
     free_share(&share);  // temporary ref.
 
+    ndbapi_invalidate_table(schema->db, schema->name);
+    mysqld_close_cached_table(schema->db, schema->name);
+
     DBUG_VOID_RETURN;
   }
 

=== modified file 'sql/ndb_local_schema.cc'
--- a/sql/ndb_local_schema.cc	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/sql/ndb_local_schema.cc	revid:mikael.ronstrom@oracle.com-20120109124556-sanff2aqtuj8wph0
@@ -85,8 +85,19 @@ void Ndb_local_schema::Base::log_warning
   my_vsnprintf(buf, sizeof(buf), fmt, args);
   va_end(args);
 
-  sql_print_warning("Ndb schema[%s.%s]: %s",
-                    m_db, m_name, buf);
+  if (m_push_warnings)
+  {
+    // Append the error which caused the error to thd's warning list
+    push_warning_printf(m_thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
+                        ER_GET_ERRMSG, "Ndb schema[%s.%s]: %s",
+                        m_db, m_name, buf);
+  }
+  else
+  {
+    // Print the warning to log file
+    sql_print_warning("Ndb schema[%s.%s]: %s",
+                      m_db, m_name, buf);
+  }
 }
 
 
@@ -94,6 +105,12 @@ Ndb_local_schema::Base::Base(THD* thd, c
   m_thd(thd),
   m_db(db), m_name(name)
 {
+  /*
+    System(or daemon) threads report error to log file
+    all other threads use push_warning
+  */
+  m_push_warnings = (thd->command != COM_DAEMON);
+
   m_have_mdl_lock= mdl_try_lock();
 }
 

=== modified file 'sql/ndb_local_schema.h'
--- a/sql/ndb_local_schema.h	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/sql/ndb_local_schema.h	revid:mikael.ronstrom@stripped2aqtuj8wph0
@@ -26,6 +26,7 @@ class Ndb_local_schema
   */
   class Base {
     bool m_have_mdl_lock;
+    bool m_push_warnings;
 
     bool mdl_try_lock(void) const;
     void mdl_unlock(void);

=== modified file 'sql/ndb_thd_ndb.h'
--- a/sql/ndb_thd_ndb.h	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/sql/ndb_thd_ndb.h	revid:mikael.ronstrom@stripped
@@ -39,13 +39,6 @@ enum THD_NDB_OPTIONS
     lock, as one other mysqld already has the lock.
   */
   TNO_NO_LOCK_SCHEMA_OP= 1 << 1
-  /*
-    Skip drop of ndb table in delete_table.  Used when calling
-    mysql_rm_table_part2 in "show tables", as we do not want to
-    remove ndb tables "by mistake".  The table should not exist
-    in ndb in the first place.
-  */
-  ,TNO_NO_NDB_DROP_TABLE=    1 << 2
 };
 
 enum THD_NDB_TRANS_OPTIONS

=== modified file 'storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/AbstractDomainFieldHandlerImpl.java'
--- a/storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/AbstractDomainFieldHandlerImpl.java	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/AbstractDomainFieldHandlerImpl.java	revid:mikael.ronstrom@stripped-20120109124556-sanff2aqtuj8wph0
@@ -417,7 +417,7 @@ public abstract class AbstractDomainFiel
 
     protected void reportErrors() {
         if (errorMessages != null) {
-            throw new ClusterJUserException(errorMessages.toString());
+            domainTypeHandler.setUnsupported(errorMessages.toString());
         }
     }
 

=== modified file 'storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/AbstractDomainTypeHandlerImpl.java'
--- a/storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/AbstractDomainTypeHandlerImpl.java	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/AbstractDomainTypeHandlerImpl.java	revid:mikael.ronstrom@oracle.com-20120109124556-sanff2aqtuj8wph0
@@ -115,6 +115,9 @@ public abstract class AbstractDomainType
     /** Set of index names to check for duplicates. */
     protected Set<String> indexNames = new HashSet<String>();
 
+    /** Errors reported during construction; see getUnsupported(), setUnsupported(String) */
+    private StringBuilder reasons = null;
+
     /** Register a primary key column field. This is used to associate
      * primary key and partition key column names with field handlers.
      * This method is called by the DomainFieldHandlerImpl constructor
@@ -428,4 +431,15 @@ public abstract class AbstractDomainType
         return fieldNames;
     }
 
+    public void setUnsupported(String reason) {
+        if (reasons == null) {
+            reasons = new StringBuilder();
+        }
+        reasons.append(reason);
+    }
+
+    public String getUnsupported() {
+        return reasons == null?null:reasons.toString();
+    }
+
 }

=== modified file 'storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/DomainFieldHandlerImpl.java'
--- a/storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/DomainFieldHandlerImpl.java	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/DomainFieldHandlerImpl.java	revid:mikael.ronstrom@strippednff2aqtuj8wph0
@@ -255,7 +255,7 @@ public class DomainFieldHandlerImpl exte
             } else {
                 objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType;
                 error(
-                    local.message("ERR_Unsupported_Field_Type", type.getName()));
+                    local.message("ERR_Unsupported_Field_Type", type.getName(), name));
             }
         }
         // Handle indexes. One index can be annotated on this field.
@@ -438,7 +438,7 @@ public class DomainFieldHandlerImpl exte
                     this.type = Byte.class;
                     break;
                 case Undefined:
-                    error(local.message("ERR_Unsupported_Field_Type", "Undefined"));
+                    error(local.message("ERR_Unsupported_Field_Type", "Undefined", name));
                     objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType;
                     break;
                 case Unsigned:
@@ -458,7 +458,7 @@ public class DomainFieldHandlerImpl exte
                     this.type = Short.class;
                     break;
                 default:
-                    error(local.message("ERR_Unsupported_Field_Type", this.storeColumnType));
+                    error(local.message("ERR_Unsupported_Field_Type", this.storeColumnType, name));
                     objectOperationHandlerDelegate = objectOperationHandlerUnsupportedType;
             }
         }

=== modified file 'storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/DomainTypeHandlerImpl.java'
--- a/storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/DomainTypeHandlerImpl.java	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/metadata/DomainTypeHandlerImpl.java	revid:mikael.ronstrom@stripped
@@ -45,10 +45,8 @@ import java.lang.reflect.Proxy;
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 /** This instance manages a persistence-capable type.
  * Currently, only interfaces can be persistence-capable. Persistent
@@ -226,12 +224,20 @@ public class DomainTypeHandlerImpl<T> ex
             fieldNames = fieldNameList.toArray(new String[fieldNameList.size()]);
             // done with methods; if anything in unmatched we have a problem
             if ((!unmatchedGetMethods.isEmpty()) || (!unmatchedSetMethods.isEmpty())) {
-                throw new ClusterJUserException(
+                setUnsupported(
                         local.message("ERR_Unmatched_Methods", 
                         unmatchedGetMethods, unmatchedSetMethods));
             }
 
         }
+
+        // Check that no errors were reported during field analysis
+        String reasons = getUnsupported();
+        if (reasons != null) {
+            throw new ClusterJUserException(
+                    local.message("ERR_Field_Construction", name, reasons.toString()));
+        }
+
         // Check that all index columnNames have corresponding fields
         // indexes without fields will be unusable for query
         for (IndexHandlerImpl indexHandler:indexHandlerImpls) {

=== modified file 'storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/spi/DomainTypeHandler.java'
--- a/storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/spi/DomainTypeHandler.java	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql/clusterj/core/spi/DomainTypeHandler.java	revid:mikael.ronstrom@stripped0
@@ -90,4 +90,6 @@ public interface DomainTypeHandler<T> {
 
     public void operationSetValues(ValueHandler valueHandler, Operation op);
 
+    public void setUnsupported(String reason);
+
 }

=== modified file 'storage/ndb/clusterj/clusterj-core/src/main/resources/com/mysql/clusterj/core/Bundle.properties'
--- a/storage/ndb/clusterj/clusterj-core/src/main/resources/com/mysql/clusterj/core/Bundle.properties	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-core/src/main/resources/com/mysql/clusterj/core/Bundle.properties	revid:mikael.ronstrom@stripped8wph0
@@ -36,6 +36,7 @@ ERR_Get_Constructor:Cannot get Construct
 ERR_Annotate_Set_Method:Property {0}: Cannot annotate set methods with {1}.
 ERR_Primary_Field_Type:For class {0}, primary key column {1}: field type {2} is not supported.
 ERR_Primary_Column_Type:For class {0}, primary key column {1}: column type {2} is not supported.
+ERR_Field_Construction:Error in metadata initialization for {0}:\n{1}
 ERR_Value_Delegate:For field {0} column {1} valueDelegate {2}, error executing {3}.
 ERR_Filter_Value:Error performing filter operation for field {0} column {1} \
 valueDelegate {2}, value {3}.

=== modified file 'storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-bad-connection-lifecycle-interceptor.properties'
--- a/storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-bad-connection-lifecycle-interceptor.properties	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-bad-connection-lifecycle-interceptor.properties	revid:mikael.ronstrom@stripped56-sanff2aqtuj8wph0
@@ -1,3 +1,18 @@
-jdbc.url=jdbc:mysql://localhost:9306/test?connectionLifecycleInterceptors=jdbctest.BadConnectionLifecycleInterceptor&poop=doop&com.mysql.clusterj.connectstring=localhost:9311
+# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+jdbc.url=jdbc:mysql://localhost:3306/test?connectionLifecycleInterceptors=jdbctest.BadConnectionLifecycleInterceptor&com.mysql.clusterj.connectstring=localhost:1186
 jdbc.driverName=com.mysql.jdbc.Driver
-ndb.connectString=localhost:9311
+ndb.connectString=localhost:1186

=== modified file 'storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-no-connection-lifecycle-interceptor.properties'
--- a/storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-no-connection-lifecycle-interceptor.properties	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-no-connection-lifecycle-interceptor.properties	revid:mikael.ronstrom@strippedsanff2aqtuj8wph0
@@ -1,3 +1,18 @@
-jdbc.url=jdbc:mysql://localhost:9306/test?statementInterceptors=com.mysql.clusterj.jdbc.StatementInterceptor&poop=doop&com.mysql.clusterj.connectstring=localhost:9311
+# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+jdbc.url=jdbc:mysql://localhost:3306/test?statementInterceptors=com.mysql.clusterj.jdbc.StatementInterceptor&com.mysql.clusterj.connectstring=localhost:1186
 jdbc.driverName=com.mysql.jdbc.Driver
-ndb.connectString=localhost:9311
+ndb.connectString=localhost:1186

=== modified file 'storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-no-statement-interceptor.properties'
--- a/storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-no-statement-interceptor.properties	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-jdbc/src/test/resources/bad-connection-no-statement-interceptor.properties	revid:mikael.ronstrom@stripped4556-sanff2aqtuj8wph0
@@ -1,3 +1,18 @@
-jdbc.url=jdbc:mysql://localhost:9306/test?connectionLifecycleInterceptors=com.mysql.clusterj.jdbc.ConnectionLifecycleInterceptor&poop=doop&com.mysql.clusterj.connectstring=localhost:9311
+# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+jdbc.url=jdbc:mysql://localhost:3306/test?connectionLifecycleInterceptors=com.mysql.clusterj.jdbc.ConnectionLifecycleInterceptor&com.mysql.clusterj.connectstring=localhost:1186
 jdbc.driverName=com.mysql.jdbc.Driver
-ndb.connectString=localhost:9311
+ndb.connectString=localhost:1186

=== modified file 'storage/ndb/clusterj/clusterj-jdbc/src/test/resources/clusterj.properties'
--- a/storage/ndb/clusterj/clusterj-jdbc/src/test/resources/clusterj.properties	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-jdbc/src/test/resources/clusterj.properties	revid:mikael.ronstrom@stripped0120109124556-sanff2aqtuj8wph0
@@ -1,10 +1,25 @@
-com.mysql.clusterj.connectstring=localhost:9311
+# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+com.mysql.clusterj.connectstring=localhost:1186
 com.mysql.clusterj.connect.retries=4
 com.mysql.clusterj.connect.delay=5
 com.mysql.clusterj.connect.verbose=1
 com.mysql.clusterj.connect.timeout.before=30
 com.mysql.clusterj.connect.timeout.after=20
-com.mysql.clusterj.jdbc.url=jdbc:mysql://localhost:9306/test?statementInterceptors=com.mysql.clusterj.jdbc.StatementInterceptor&connectionLifecycleInterceptors=com.mysql.clusterj.jdbc.ConnectionLifecycleInterceptor&com.mysql.clusterj.connectstring=localhost:9311&cachePrepStmts=true&rewriteBatchedStatements=true
+com.mysql.clusterj.jdbc.url=jdbc:mysql://localhost:3306/test?statementInterceptors=com.mysql.clusterj.jdbc.StatementInterceptor&connectionLifecycleInterceptors=com.mysql.clusterj.jdbc.ConnectionLifecycleInterceptor&com.mysql.clusterj.connectstring=localhost:1186&cachePrepStmts=true&rewriteBatchedStatements=true
 com.mysql.clusterj.jdbc.driver=com.mysql.jdbc.Driver
 com.mysql.clusterj.jdbc.username=root
 com.mysql.clusterj.jdbc.password=

=== modified file 'storage/ndb/clusterj/clusterj-jpatest/src/main/java/com/mysql/clusterj/jpatest/AbstractJPABaseTest.java'
--- a/storage/ndb/clusterj/clusterj-jpatest/src/main/java/com/mysql/clusterj/jpatest/AbstractJPABaseTest.java	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-jpatest/src/main/java/com/mysql/clusterj/jpatest/AbstractJPABaseTest.java	revid:mikael.ronstrom@stripped0120109124556-sanff2aqtuj8wph0
@@ -409,7 +409,7 @@ public abstract class AbstractJPABaseTes
         }
     }
 
-    protected void removeAll(Class<? extends IdBase> modelClass) {
+    protected void removeAll(Class<?> modelClass) {
         Query query = em.createQuery("DELETE FROM " + modelClass.getSimpleName());
         em.getTransaction().begin();
         query.executeUpdate();

=== modified file 'storage/ndb/clusterj/clusterj-openjpa/crundOpenjpaClusterj.properties'
--- a/storage/ndb/clusterj/clusterj-openjpa/crundOpenjpaClusterj.properties	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-openjpa/crundOpenjpaClusterj.properties	revid:mikael.ronstrom@stripped8wph0
@@ -1,5 +1,4 @@
-# Copyright 2010 Sun Microsystems, Inc.
-#  All rights reserved. Use is subject to license terms.
+# Copyright (c) 2010, 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
@@ -18,7 +17,7 @@
 #exclude=navA->B0,navA->B0_opt
 
 # OpenJPA - MySQL JDBC connection settings
-openjpa.ConnectionURL=jdbc:mysql://localhost:9306/test
+openjpa.ConnectionURL=jdbc:mysql://localhost:3306/test
 openjpa.ConnectionDriverName=com.mysql.jdbc.Driver
 openjpa.ConnectionUserName=md
 openjpa.ConnectionPassword=
@@ -28,7 +27,7 @@ openjpa.Log=DefaultLevel=WARN
 openjpa.ConnectionRetainMode=transaction
 
 # OpenJPA - ClusterJ settings
-openjpa.ndb.connectString=localhost:9311
+openjpa.ndb.connectString=localhost:1186
 openjpa.BrokerFactory=ndb
 
 # JPA - Derby connection settings

=== modified file 'storage/ndb/clusterj/clusterj-openjpa/crundOpenjpaMysql.properties'
--- a/storage/ndb/clusterj/clusterj-openjpa/crundOpenjpaMysql.properties	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-openjpa/crundOpenjpaMysql.properties	revid:mikael.ronstrom@strippedom-20120109124556-sanff2aqtuj8wph0
@@ -1,5 +1,4 @@
-# Copyright 2010 Sun Microsystems, Inc.
-#  All rights reserved. Use is subject to license terms.
+# Copyright (c) 2010, 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
@@ -18,7 +17,7 @@
 #exclude=navA->B0,navA->B0_opt
 
 # OpenJPA - MySQL JDBC connection settings
-openjpa.ConnectionURL=jdbc:mysql://localhost:9306/test
+openjpa.ConnectionURL=jdbc:mysql://localhost:3306/test
 openjpa.ConnectionDriverName=com.mysql.jdbc.Driver
 openjpa.ConnectionUserName=md
 openjpa.ConnectionPassword=

=== modified file 'storage/ndb/clusterj/clusterj-openjpa/src/main/java/com/mysql/clusterj/openjpa/NdbOpenJPADomainTypeHandlerImpl.java'
--- a/storage/ndb/clusterj/clusterj-openjpa/src/main/java/com/mysql/clusterj/openjpa/NdbOpenJPADomainTypeHandlerImpl.java	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-openjpa/src/main/java/com/mysql/clusterj/openjpa/NdbOpenJPADomainTypeHandlerImpl.java	revid:mikael.ronstrom@stripped
@@ -1,5 +1,5 @@
 /*
-   Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+   Copyright (c) 2010, 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
@@ -653,7 +653,7 @@ public class NdbOpenJPADomainTypeHandler
         }
     }
 
-    private void setUnsupported(String reason) {
+    public void setUnsupported(String reason) {
         if (status != Status.BAD) {
             if (logger.isDetailEnabled()) logger.detail("Class " + typeName + " marked as BAD.");
             status = Status.BAD;

=== modified file 'storage/ndb/clusterj/clusterj-openjpa/src/test/resources/META-INF/persistence.xml'
--- a/storage/ndb/clusterj/clusterj-openjpa/src/test/resources/META-INF/persistence.xml	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-openjpa/src/test/resources/META-INF/persistence.xml	revid:mikael.ronstrom@oracle.com-20120109124556-sanff2aqtuj8wph0
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+   Copyright (c) 2010, 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
@@ -22,12 +22,12 @@
     <class>com.mysql.clusterj.jpatest.model.B0</class>
     <!--
     <properties>
-      <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:9306/test"/>
+      <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/test"/>
       <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
       <property name="openjpa.ConnectionRetainMode" value="transaction"/>
       <property name="openjpa.DataCache" value="false"/>
       <property name="openjpa.BrokerFactory" value="ndb"/>
-      <property name="openjpa.ndb.connectString" value="localhost:9311"/>
+      <property name="openjpa.ndb.connectString" value="localhost:1186"/>
     </properties>
     -->
   </persistence-unit>
@@ -57,13 +57,13 @@
     <class>com.mysql.clusterj.jpatest.model.TimestampAsUtilDateTypes</class>
     <class>com.mysql.clusterj.jpatest.model.TimestampAsSqlTimestampTypes</class>
     <properties>
-      <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:9306/test"/>
+      <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/test"/>
       <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
       <property name="openjpa.ConnectionRetainMode" value="transaction"/>
       <property name="openjpa.DataCache" value="false"/>
       <property name="openjpa.Log" value="SQL=trace"/>
       <property name="openjpa.BrokerFactory" value="ndb"/>
-      <property name="openjpa.ndb.connectString" value="localhost:9311"/>
+      <property name="openjpa.ndb.connectString" value="localhost:1186"/>
     </properties>
   </persistence-unit>
   <persistence-unit name="jdbc" transaction-type="RESOURCE_LOCAL">
@@ -83,7 +83,7 @@
     <class>com.mysql.clusterj.jpatest.model.LongIntStringPKOneOne</class>
     <class>com.mysql.clusterj.jpatest.model.LongIntStringFKOneOne</class>
     <properties>
-      <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:9306/test"/>
+      <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/test"/>
       <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
       <property name="openjpa.ConnectionRetainMode" value="transaction"/>
       <property name="openjpa.DataCache" value="false"/>
@@ -94,7 +94,7 @@
     <class>com.mysql.clusterj.jpatest.model.Employee</class>
     <properties>
       <property name="openjpa.BrokerFactory" value="ndb"/>
-      <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:9306/test"/>
+      <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/test"/>
       <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
     </properties>
   </persistence-unit>

=== modified file 'storage/ndb/clusterj/clusterj-test/src/main/java/regression/Bug54619.java'
--- a/storage/ndb/clusterj/clusterj-test/src/main/java/regression/Bug54619.java	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-test/src/main/java/regression/Bug54619.java	revid:mikael.ronstrom@stripped6-sanff2aqtuj8wph0
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2010, 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
@@ -112,7 +112,7 @@ class Manager {
 
     static void createClusterJSession() {
         Properties properties = new Properties();
-        properties.put("com.mysql.clusterj.connectstring", "localhost:9311");
+        properties.put("com.mysql.clusterj.connectstring", "localhost:1186");
         properties.put("com.mysql.clusterj.database", "test");
         sessionfactory = ClusterJHelper.getSessionFactory(properties);
 

=== modified file 'storage/ndb/clusterj/clusterj-test/src/main/java/testsuite/clusterj/domaintypehandler/CrazyDomainTypeHandlerFactoryImpl.java'
--- a/storage/ndb/clusterj/clusterj-test/src/main/java/testsuite/clusterj/domaintypehandler/CrazyDomainTypeHandlerFactoryImpl.java	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-test/src/main/java/testsuite/clusterj/domaintypehandler/CrazyDomainTypeHandlerFactoryImpl.java	revid:mikael.ronstrom@stripped
@@ -1,5 +1,5 @@
 /*
-   Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+   Copyright (c) 2010, 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
@@ -196,6 +196,10 @@ public class CrazyDomainTypeHandlerFacto
                 public void objectSetKeys(Object keys, Object instance) {
                     throw new UnsupportedOperationException("Not supported yet.");
                 }
+
+                public void setUnsupported(String reason) {
+                    throw new UnsupportedOperationException("Not supported yet.");
+               }
             };
         } else {
             return null;

=== modified file 'storage/ndb/clusterj/clusterj-tie/src/test/resources/clusterj.properties'
--- a/storage/ndb/clusterj/clusterj-tie/src/test/resources/clusterj.properties	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/clusterj/clusterj-tie/src/test/resources/clusterj.properties	revid:mikael.ronstrom@strippeduj8wph0
@@ -1,4 +1,4 @@
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 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
@@ -13,16 +13,15 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-#com.mysql.clusterj.connectstring=127.0.0.1:9311
-com.mysql.clusterj.connectstring=localhost:9311
+com.mysql.clusterj.connectstring=localhost:1186
 #com.mysql.clusterj.connect.host=localhost
-#com.mysql.clusterj.connect.port=9311
+#com.mysql.clusterj.connect.port=1186
 com.mysql.clusterj.connect.retries=4
 com.mysql.clusterj.connect.delay=5
 com.mysql.clusterj.connect.verbose=1
 com.mysql.clusterj.connect.timeout.before=30
 com.mysql.clusterj.connect.timeout.after=20
-com.mysql.clusterj.jdbc.url=jdbc:mysql://localhost:9306/test
+com.mysql.clusterj.jdbc.url=jdbc:mysql://localhost:3306/test
 com.mysql.clusterj.jdbc.driver=com.mysql.jdbc.Driver
 com.mysql.clusterj.jdbc.username=root
 com.mysql.clusterj.jdbc.password=

=== modified file 'storage/ndb/memcache/src/ClusterConnectionPool.cc'
--- a/storage/ndb/memcache/src/ClusterConnectionPool.cc	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/memcache/src/ClusterConnectionPool.cc	revid:mikael.ronstrom@stripped120109124556-sanff2aqtuj8wph0
@@ -165,7 +165,7 @@ Ndb_cluster_connection * ClusterConnecti
 
   conn = connect(connect_string);
   
-  if(conn->node_id()) {
+  if(conn && conn->node_id()) {
     pool_connections[pool_size++] = conn;
   }
   else {

=== modified file 'storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp'
--- a/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp	revid:mikael.ronstrom@stripped24556-sanff2aqtuj8wph0
@@ -57,6 +57,7 @@ extern int simulate_error_during_shutdow
 // Index pages used by ACC instances
 Uint32 g_acc_pages_used[1 + MAX_NDBMT_LQH_WORKERS];
 
+extern void mt_init_receiver_cache();
 extern void mt_set_section_chunk_size();
 
 Cmvmi::Cmvmi(Block_context& ctx) :
@@ -83,6 +84,7 @@ Cmvmi::Cmvmi(Block_context& ctx) :
   g_sectionSegmentPool.setSize(long_sig_buffer_size,
                                true,true,true,CFG_DB_LONG_SIGNAL_BUFFER);
 
+  mt_init_receiver_cache();
   mt_set_section_chunk_size();
 
   // Add received signals

=== modified file 'storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp	revid:mikael.ronstrom@strippedf2aqtuj8wph0
@@ -2345,6 +2345,17 @@ Dbacc::removerow(Uint32 opPtrI, const Lo
   /* Mark element disappeared */
   opbits |= Operationrec::OP_ELEMENT_DISAPPEARED;
   opbits &= ~Uint32(Operationrec::OP_COMMIT_DELETE_CHECK);
+
+  /**
+   * This function is (currently?) only used when refreshTuple()
+   *   inserts a record...and later wants to remove it
+   *
+   * Since this should not affect row-count...we change the optype to UPDATE
+   *   execACC_COMMITREQ will be called in same timeslice as this change...
+   */
+  opbits &= ~Uint32(Operationrec::OP_MASK);
+  opbits |= ZUPDATE;
+
   operationRecPtr.p->m_op_bits = opbits;
 
 #ifdef VM_TRACE
@@ -2383,6 +2394,11 @@ void Dbacc::execACC_COMMITREQ(Signal* si
 	return;
       } else {
 	jam();
+#ifdef ERROR_INSERT
+        ndbrequire(fragrecptr.p->noOfElements > 0);
+#else
+        ndbassert(fragrecptr.p->noOfElements > 0);
+#endif
 	fragrecptr.p->noOfElements--;
 	fragrecptr.p->slack += fragrecptr.p->elementLength;
 	if (fragrecptr.p->slack > fragrecptr.p->slackCheck) { 
@@ -2402,16 +2418,6 @@ void Dbacc::execACC_COMMITREQ(Signal* si
       }//if
     } else {
       jam();                                                /* EXPAND PROCESS HANDLING */
-      if (unlikely(opbits & Operationrec::OP_ELEMENT_DISAPPEARED))
-      {
-        jam();
-        /* Commit of refresh of non existing tuple.
-         *   ZREFRESH->ZWRITE->ZINSERT
-         * Do not affect element count
-         */
-        ndbrequire((opbits & Operationrec::OP_MASK) == ZINSERT);
-        return;
-      }
       fragrecptr.p->noOfElements++;
       fragrecptr.p->slack -= fragrecptr.p->elementLength;
       if (fragrecptr.p->slack >= (1u << 31)) { 

=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp	revid:mikael.ronstrom@stripped
@@ -4617,11 +4617,11 @@ void Dblqh::execLQHKEYREQ(Signal* signal
     nextPos += 2;
   }
 
+  regTcPtr->m_fire_trig_pass = 0;
   Uint32 Tdeferred = LqhKeyReq::getDeferredConstraints(Treqinfo);
   if (isLongReq && Tdeferred)
   {
     regTcPtr->m_flags |= TcConnectionrec::OP_DEFERRED_CONSTRAINTS;
-    regTcPtr->m_fire_trig_pass = 0;
   }
 
   UintR TitcKeyLen = 0;
@@ -11910,6 +11910,12 @@ Uint32 Dblqh::sendKeyinfo20(Signal* sign
 #endif
   const bool longable = true; // TODO is_api && !old_dest;
 
+  if (isNdbMtLqh())
+  {
+    jam();
+    nodeId = 0; // prevent execute direct
+  }
+
   Uint32 * dst = keyInfo->keyData;
   dst += nodeId == getOwnNodeId() ? 0 : KeyInfo20::DataLength;
 
@@ -11943,11 +11949,6 @@ Uint32 Dblqh::sendKeyinfo20(Signal* sign
   {
     jam();
     
-    if (isNdbMtLqh() && instance() != refToInstance(ref))
-    {
-      jam();
-      nodeId = 0; // prevent execute direct
-    }
     if (nodeId == getOwnNodeId())
     {
       EXECUTE_DIRECT(refToBlock(ref), GSN_KEYINFO20, signal,

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	revid:mikael.ronstrom@stripped2aqtuj8wph0
@@ -741,6 +741,7 @@ Dbtup::checkDeferredTriggersDuringPrepar
       NoOfFiredTriggers::setDeferredBit(req_struct->no_fired_triggers);
       return;
     }
+    triggerList.next(trigPtr);
   }
 }
 

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/tuppage.hpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/tuppage.hpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/blocks/dbtup/tuppage.hpp	revid:mikael.ronstrom@stripped
@@ -259,6 +259,11 @@ struct Tup_varsize_page
   {
     return ((get_index_word(page_idx) & FREE) != 0) ? true : false;
   }
+
+  bool is_empty() const
+  {
+    return high_index == 1;
+  }
 };
 
 NdbOut& operator<< (NdbOut& out, const Tup_varsize_page& page);

=== modified file 'storage/ndb/src/kernel/blocks/trpman.cpp'
--- a/storage/ndb/src/kernel/blocks/trpman.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/blocks/trpman.cpp	revid:mikael.ronstrom@stripped2aqtuj8wph0
@@ -81,19 +81,22 @@ Trpman::execOPEN_COMREQ(Signal* signal)
 	   && c_error_9000_nodes_mask.get(tStartingNode)))
 #endif
     {
-      if (handles_this_node(tStartingNode))
+      if (!handles_this_node(tStartingNode))
       {
-        globalTransporterRegistry.do_connect(tStartingNode);
-        globalTransporterRegistry.setIOState(tStartingNode, HaltIO);
-
-        //-----------------------------------------------------
-        // Report that the connection to the node is opened
-        //-----------------------------------------------------
-        signal->theData[0] = NDB_LE_CommunicationOpened;
-        signal->theData[1] = tStartingNode;
-        sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);
-        //-----------------------------------------------------
+        jam();
+        goto done;
       }
+
+      globalTransporterRegistry.do_connect(tStartingNode);
+      globalTransporterRegistry.setIOState(tStartingNode, HaltIO);
+
+      //-----------------------------------------------------
+      // Report that the connection to the node is opened
+      //-----------------------------------------------------
+      signal->theData[0] = NDB_LE_CommunicationOpened;
+      signal->theData[1] = tStartingNode;
+      sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);
+      //-----------------------------------------------------
     }
   }
   else
@@ -101,8 +104,7 @@ Trpman::execOPEN_COMREQ(Signal* signal)
     for(unsigned int i = 1; i < MAX_NODES; i++ )
     {
       jam();
-      if (i != getOwnNodeId() &&
-          getNodeInfo(i).m_type == tData2 &&
+      if (i != getOwnNodeId() && getNodeInfo(i).m_type == tData2 &&
           handles_this_node(i))
       {
 	jam();
@@ -122,6 +124,7 @@ Trpman::execOPEN_COMREQ(Signal* signal)
     }
   }
 
+done:
   if (userRef != 0)
   {
     jam();
@@ -386,25 +389,28 @@ Trpman::execDBINFO_SCANREQ(Signal *signa
 
     while (rnode < MAX_NODES)
     {
-      if (handles_this_node(rnode))
+      if (!handles_this_node(rnode))
       {
-        switch(getNodeInfo(rnode).m_type)
-        {
-        default:
-        {
-          jam();
-          Ndbinfo::Row row(signal, req);
-          row.write_uint32(getOwnNodeId()); // Node id
-          row.write_uint32(rnode); // Remote node id
-          row.write_uint32(globalTransporterRegistry.getPerformState(rnode)); // State
-          ndbinfo_send_row(signal, req, row, rl);
-         break;
-        }
+        rnode++;
+        continue;
+      }
 
-        case NodeInfo::INVALID:
-          jam();
-          break;
-        }
+      switch(getNodeInfo(rnode).m_type)
+      {
+      default:
+      {
+        jam();
+        Ndbinfo::Row row(signal, req);
+        row.write_uint32(getOwnNodeId()); // Node id
+        row.write_uint32(rnode); // Remote node id
+        row.write_uint32(globalTransporterRegistry.getPerformState(rnode)); // State
+        ndbinfo_send_row(signal, req, row, rl);
+       break;
+      }
+
+      case NodeInfo::INVALID:
+        jam();
+       break;
       }
 
       rnode++;
@@ -474,7 +480,7 @@ Trpman::execDUMP_STATE_ORD(Signal* signa
 	  signal->theData[1] = i;
           signal->theData[4] = 2;
           execOPEN_COMREQ(signal);
-	}
+        }
       }
     }
     c_error_9000_nodes_mask.clear();

=== modified file 'storage/ndb/src/kernel/blocks/trpman.hpp'
--- a/storage/ndb/src/kernel/blocks/trpman.hpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/blocks/trpman.hpp	revid:mikael.ronstrom@oracle.com-20120109124556-sanff2aqtuj8wph0
@@ -32,7 +32,7 @@ public:
   BLOCK_DEFINES(Trpman);
 
   void execCLOSE_COMREQ(Signal *signal);
-  void execCLOSE_COMCONF(Signal *signal);
+  void execCLOSE_COMCONF(Signal * signal);
   void execOPEN_COMREQ(Signal *signal);
   void execENABLE_COMREQ(Signal *signal);
   void execDISCONNECT_REP(Signal *signal);

=== modified file 'storage/ndb/src/kernel/error/ErrorReporter.cpp'
--- a/storage/ndb/src/kernel/error/ErrorReporter.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/error/ErrorReporter.cpp	revid:mikael.ronstrom@strippedanff2aqtuj8wph0
@@ -45,6 +45,20 @@ static void dumpJam(FILE* jamStream, 
 		    const Uint32 thrdTheEmulatedJam[],
                     Uint32 aBlockNumber);
 
+static
+const char *
+ndb_basename(const char * path)
+{
+  const char separator = '/';
+  const char * p = path + strlen(path);
+  while (p > path && p[0] != separator)
+    p--;
+
+  if (p[0] == separator)
+    return p + 1;
+
+  return p;
+}
 
 const char*
 ErrorReporter::formatTimeStampString(){
@@ -152,7 +166,7 @@ ErrorReporter::formatMessage(int thr_no,
                        faultID, 
                        (problemData == NULL) ? "" : problemData, 
                        objRef, 
-                       my_progname, 
+                       ndb_basename(my_progname),
                        processId, 
                        thrbuf,
                        NDB_VERSION_STRING,
@@ -161,14 +175,11 @@ ErrorReporter::formatMessage(int thr_no,
 
   if (theNameOfTheTraceFile)
   {
-    for (Uint32 i = 1 ; i < num_threads; i++)
+    sofar = (int)strlen(messptr);
+    if(sofar < MESSAGE_LENGTH)
     {
-      sofar = (int)strlen(messptr);
-      if(sofar < MESSAGE_LENGTH)
-      {
-	BaseString::snprintf(messptr + sofar, MESSAGE_LENGTH - sofar,
-			     " %s_t%u", theNameOfTheTraceFile, i);
-      }
+      BaseString::snprintf(messptr + sofar, MESSAGE_LENGTH - sofar,
+                           " [t%u..t%u]", 1, num_threads);
     }
   }
 
@@ -237,7 +248,7 @@ ErrorReporter::handleError(int messageID
       nst = s_errorHandlerShutdownType;
   }
   
-  WriteMessage(messageID, problemData, objRef, nst);
+  WriteMessage(messageID, ndb_basename(problemData), objRef, nst);
 
   g_eventLogger->info("%s", problemData);
   g_eventLogger->info("%s", objRef);

=== modified file 'storage/ndb/src/kernel/vm/ArrayPool.hpp'
--- a/storage/ndb/src/kernel/vm/ArrayPool.hpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/vm/ArrayPool.hpp	revid:mikael.ronstrom@strippedf2aqtuj8wph0
@@ -253,24 +253,24 @@ public:
 #endif
 
 protected:
-  Uint32 size;
   T * theArray;
-  void * alloc_ptr;
-  Uint32 noOfFreeMin;
+  Uint32 size;
   /*
    * Protect size and theArray which are very seldomly updated from
    * updates of often updated variables such as firstFree, noOfFree.
    * Protect here means to have them on separate CPU cache lines to
    * avoid false CPU cache line sharing.
    */
-  Uint32 protect_read_var[12];
+  char protect_read_var[64 - (sizeof(Uint32) + sizeof(void*))];
   Uint32 firstFree;
   Uint32 noOfFree;
+  Uint32 noOfFreeMin;
 #ifdef ARRAY_GUARD
+  bool chunk;
   Uint32 bitmaskSz;
   Uint32 *theAllocatedBitmask;
-  bool chunk;
 #endif
+  void * alloc_ptr;
 };
 
 template <class T>

=== modified file 'storage/ndb/src/kernel/vm/CMakeLists.txt'
--- a/storage/ndb/src/kernel/vm/CMakeLists.txt	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/vm/CMakeLists.txt	revid:mikael.ronstrom@oracle.com-20120109124556-sanff2aqtuj8wph0
@@ -67,3 +67,13 @@ SET_TARGET_PROPERTIES(mt_thr_config-t
                       PROPERTIES COMPILE_FLAGS "-DTEST_MT_THR_CONFIG")
 TARGET_LINK_LIBRARIES(mt_thr_config-t ndbgeneral)
 
+ADD_EXECUTABLE(DynArr256-t DynArr256.cpp test_context.cpp)
+SET_TARGET_PROPERTIES(DynArr256-t
+                      PROPERTIES COMPILE_FLAGS "-DTAP_TEST")
+TARGET_LINK_LIBRARIES(DynArr256-t ndbkernel ndbsched ndberror
+                      ndbtransport
+		      ndbmgmcommon
+                      ndbmgmapi 
+                      ndbportlib
+		      ndbgeneral)
+

=== modified file 'storage/ndb/src/kernel/vm/DLList.hpp'
--- a/storage/ndb/src/kernel/vm/DLList.hpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/vm/DLList.hpp	revid:mikael.ronstrom@stripped
@@ -1,5 +1,5 @@
 /*
-   Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+   Copyright (c) 2003, 2010, 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
@@ -21,13 +21,32 @@
 #include "ArrayPool.hpp"
 
 /**
- * Template class used for implementing an
- *   list of object retreived from a pool
+ * DLMList implements a intrusive list using chaining
+ *   (with a double links)
+ *
+ * The entries in the (uninstansiated) meta class passed to the
+ * list must have the following methods:
+ *
+ *  -# nextList(U&) returning a reference to the next link
+ *  -# prevList(U&) returning a reference to the prev link
  */
-template <typename P, typename T, typename U = T>
-class DLListImpl 
+
+template <typename T, typename U = T> struct DLListDefaultMethods {
+static inline Uint32& nextList(U& t) { return t.nextList; }
+static inline Uint32& prevList(U& t) { return t.prevList; }
+};
+
+template <typename P, typename T, typename M = DLListDefaultMethods<T> >
+class DLMList
 {
 public:
+  explicit DLMList(P& thePool);
+  ~DLMList() { }
+private:
+  DLMList(const DLMList&);
+  DLMList&  operator=(const DLMList&);
+
+public:
   /**
    * List head
    */
@@ -55,8 +74,6 @@ public:
     }
   };
   
-  DLListImpl(P& thePool);
-  
   /**
    * Allocate an object from pool - update Ptr
    *
@@ -169,12 +186,12 @@ protected:
   P & thePool;
 };
 
-template <typename P, typename T, typename U = T>
-class LocalDLListImpl : public DLListImpl<P,T,U> 
+template <typename P, typename T, typename M = DLListDefaultMethods<T> >
+class LocalDLMList : public DLMList<P, T, M>
 {
 public:
-  LocalDLListImpl(P & thePool, typename DLListImpl<P,T,U>::HeadPOD & _src)
-    : DLListImpl<P,T,U>(thePool), src(_src)
+  LocalDLMList(P& thePool, typename DLMList<P, T, M>::HeadPOD& _src)
+    : DLMList<P, T, M>(thePool), src(_src)
   {
     this->head = src;
 #ifdef VM_TRACE
@@ -183,19 +200,20 @@ public:
 #endif
   }
   
-  ~LocalDLListImpl(){
+  ~LocalDLMList()
+  {
 #ifdef VM_TRACE
     assert(src.in_use == true);
 #endif
     src = this->head;
   }
 private:
-  typename DLListImpl<P,T,U>::HeadPOD & src;
+  typename DLMList<P, T, M>::HeadPOD& src;
 };
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
-DLListImpl<P,T,U>::DLListImpl(P & _pool)
+DLMList<P, T, M>::DLMList(P& _pool)
   : thePool(_pool)
 {
   // Require user defined constructor on T since we fiddle
@@ -203,9 +221,9 @@ DLListImpl<P,T,U>::DLListImpl(P & _pool)
   ASSERT_TYPE_HAS_CONSTRUCTOR(T);
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
-DLListImpl<P,T,U>::Head::Head()
+DLMList<P, T, M>::Head::Head()
 {
   this->init();
 }
@@ -215,10 +233,10 @@ DLListImpl<P,T,U>::Head::Head()
  *
  * Return i
  */
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-DLListImpl<P,T,U>::seize(Ptr<T> & p)
+DLMList<P, T, M>::seize(Ptr<T>& p)
 {
   if (likely(thePool.seize(p)))
   {
@@ -233,10 +251,10 @@ DLListImpl<P,T,U>::seize(Ptr<T> & p)
  *
  * Return i
  */
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-DLListImpl<P,T,U>::seizeId(Ptr<T> & p, Uint32 ir)
+DLMList<P, T, M>::seizeId(Ptr<T>& p, Uint32 ir)
 {
   if (likely(thePool.seizeId(p, ir)))
   {
@@ -246,75 +264,75 @@ DLListImpl<P,T,U>::seizeId(Ptr<T> & p, U
   return false;
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-DLListImpl<P,T,U>::findId(Uint32 i) const 
+DLMList<P, T, M>::findId(Uint32 i) const
 {
   return thePool.findId(i);
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-DLListImpl<P,T,U>::add(Ptr<T> & p)
+DLMList<P, T, M>::add(Ptr<T>& p)
 {
   T * t = p.p;
   Uint32 ff = head.firstItem;
   
-  t->U::nextList = ff;
-  t->U::prevList = RNIL;
+  M::nextList(*t) = ff;
+  M::prevList(*t) = RNIL;
   head.firstItem = p.i;
   
   if(ff != RNIL)
   {
     T * t2 = thePool.getPtr(ff);
-    t2->U::prevList = p.i;
+    M::prevList(*t2) = p.i;
   }
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-DLListImpl<P,T,U>::add(Uint32 first, Ptr<T> & lastPtr)
+DLMList<P, T, M>::add(Uint32 first, Ptr<T>& lastPtr)
 {
   Uint32 ff = head.firstItem;
 
   head.firstItem = first;
-  lastPtr.p->U::nextList = ff;
+  M::nextList(*lastPtr.p) = ff;
   
   if(ff != RNIL)
   {
     T * t2 = thePool.getPtr(ff);
-    t2->U::prevList = lastPtr.i;
+    M::prevList(*t2) = lastPtr.i;
   }
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-DLListImpl<P,T,U>::remove(Ptr<T> & p)
+DLMList<P, T, M>::remove(Ptr<T>& p)
 {
   remove(p.p);
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-DLListImpl<P,T,U>::remove(T * p)
+DLMList<P, T, M>::remove(T * p)
 {
   T * t = p;
-  Uint32 ni = t->U::nextList;
-  Uint32 pi = t->U::prevList;
+  Uint32 ni = M::nextList(*t);
+  Uint32 pi = M::prevList(*t);
 
   if(ni != RNIL){
     T * tn = thePool.getPtr(ni);
-    tn->U::prevList = pi;
+    M::prevList(*tn) = pi;
   }
   
   if(pi != RNIL){
     T * tp = thePool.getPtr(pi);
-    tp->U::nextList = ni;
+    M::nextList(*tp) = ni;
   } else {
     head.firstItem = ni;
   }
@@ -323,10 +341,10 @@ DLListImpl<P,T,U>::remove(T * p)
 /**
  * Return an object to pool
  */
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-DLListImpl<P,T,U>::release(Uint32 i)
+DLMList<P, T, M>::release(Uint32 i)
 {
   Ptr<T> p;
   p.i = i;
@@ -337,60 +355,60 @@ DLListImpl<P,T,U>::release(Uint32 i)
 /**
  * Return an object to pool
  */
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-DLListImpl<P,T,U>::release(Ptr<T> & p)
+DLMList<P, T, M>::release(Ptr<T>& p)
 {
   remove(p);
   thePool.release(p);
 }  
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-DLListImpl<P,T,U>::release()
+DLMList<P, T, M>::release()
 {
   Ptr<T> ptr;
   Uint32 curr = head.firstItem;
   while(curr != RNIL)
   {
     thePool.getPtr(ptr, curr);
-    curr = ptr.p->U::nextList;
+    curr = M::nextList(*ptr.p);
     thePool.release(ptr);
   }
   head.firstItem = RNIL;
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-DLListImpl<P,T,U>::remove()
+DLMList<P, T, M>::remove()
 {
   head.firstItem = RNIL;
 }  
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-DLListImpl<P,T,U>::getPtr(Ptr<T> & p, Uint32 i) const 
+DLMList<P, T, M>::getPtr(Ptr<T>& p, Uint32 i) const
 {
   p.i = i;
   p.p = thePool.getPtr(i);
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-DLListImpl<P,T,U>::getPtr(Ptr<T> & p) const 
+DLMList<P, T, M>::getPtr(Ptr<T>& p) const
 {
   thePool.getPtr(p);
 }
   
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 T * 
-DLListImpl<P,T,U>::getPtr(Uint32 i) const 
+DLMList<P, T, M>::getPtr(Uint32 i) const
 {
   return thePool.getPtr(i);
 }
@@ -400,10 +418,10 @@ DLListImpl<P,T,U>::getPtr(Uint32 i) cons
  *
  * Return i
  */
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-DLListImpl<P,T,U>::first(Ptr<T> & p) const 
+DLMList<P, T, M>::first(Ptr<T>& p) const
 {
   Uint32 i = head.firstItem;
   p.i = i;
@@ -416,12 +434,12 @@ DLListImpl<P,T,U>::first(Ptr<T> & p) con
   return false;
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-DLListImpl<P,T,U>::next(Ptr<T> & p) const 
+DLMList<P, T, M>::next(Ptr<T>& p) const
 {
-  Uint32 i = p.p->U::nextList;
+  Uint32 i = M::nextList(*p.p);
   p.i = i;
   if(i != RNIL){
     p.p = thePool.getPtr(i);
@@ -431,28 +449,42 @@ DLListImpl<P,T,U>::next(Ptr<T> & p) cons
   return false;
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-DLListImpl<P,T,U>::hasNext(const Ptr<T> & p) const 
+DLMList<P, T, M>::hasNext(const Ptr<T>& p) const
 {
-  return p.p->U::nextList != RNIL;
+  return M::nextList(*p.p) != RNIL;
 }
 
 // Specializations
 
-template <typename T, typename U = T>
-class DLList : public DLListImpl<ArrayPool<T>, T, U>
+template <typename P, typename T, typename U = T, typename M = DLListDefaultMethods<T, U> >
+class DLListImpl : public DLMList<P, T, M >
+{
+public:
+  DLListImpl(P& p) : DLMList<P, T, M >(p) {}
+};
+
+template <typename P, typename T, typename U = T, typename M = DLListDefaultMethods<T, U> >
+class LocalDLListImpl : public LocalDLMList<P, T, M > {
+public:
+  LocalDLListImpl(P& p, typename DLMList<P, T, M>::HeadPOD& _src)
+    : LocalDLMList<P, T, M>(p, _src) {}
+};
+
+template <typename T, typename U = T, typename M = DLListDefaultMethods<T, U> >
+class DLList : public DLMList<ArrayPool<T>, T, M >
 {
 public:
-  DLList(ArrayPool<T> & p) : DLListImpl<ArrayPool<T>, T, U>(p) {}
+  DLList(ArrayPool<T>& p) : DLMList<ArrayPool<T>, T, M >(p) {}
 };
 
-template <typename T, typename U = T>
-class LocalDLList : public LocalDLListImpl<ArrayPool<T>, T, U> {
+template <typename T, typename U = T, typename M = DLListDefaultMethods<T, U> >
+class LocalDLList : public LocalDLMList<ArrayPool<T>, T, M > {
 public:
-  LocalDLList(ArrayPool<T> & p, typename DLList<T,U>::HeadPOD & _src)
-    : LocalDLListImpl<ArrayPool<T>, T, U>(p, _src) {}
+  LocalDLList(ArrayPool<T>& p, typename DLList<T, U, M>::HeadPOD& _src)
+    : LocalDLMList<ArrayPool<T>, T, M>(p, _src) {}
 };
 
 #endif

=== modified file 'storage/ndb/src/kernel/vm/DynArr256.cpp'
--- a/storage/ndb/src/kernel/vm/DynArr256.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/vm/DynArr256.cpp	revid:mikael.ronstrom@oracle.com-20120109124556-sanff2aqtuj8wph0
@@ -637,20 +637,6 @@ DynArr256Pool::release(Uint32 ptrI)
 
 #ifdef UNIT_TEST
 
-#include <NdbTick.h>
-#include "ndbd_malloc_impl.hpp"
-#include "SimulatedBlock.hpp"
-
-Ndbd_mem_manager mm;
-Configuration cfg;
-Block_context ctx(cfg, mm);
-struct BB : public SimulatedBlock
-{
-  BB(int no, Block_context& ctx) : SimulatedBlock(no, ctx) {}
-};
-
-BB block(DBACC, ctx);
-
 static
 void
 simple(DynArr256 & arr, int argc, char* argv[])
@@ -759,7 +745,7 @@ read(DynArr256& arr, int argc, char ** a
   Uint32 seed = time(0);
   Uint32 seq = 0, seqmask = 0;
 
-  for (Uint32 i = 2; i<argc; i++)
+  for (Uint32 i = 1; i<argc; i++)
   {
     if (strncmp(argv[i], "--mbytes=", sizeof("--mbytes=")-1) == 0)
     {
@@ -831,7 +817,7 @@ write(DynArr256& arr, int argc, char ** 
   Uint64 mbytes = 16*1024;
   Uint32 seed = time(0);
 
-  for (Uint32 i = 2; i<argc; i++)
+  for (Uint32 i = 1; i<argc; i++)
   {
     if (strncmp(argv[i], "--mbytes=", sizeof("--mbytes=")-1) == 0)
     {
@@ -888,32 +874,30 @@ write(DynArr256& arr, int argc, char ** 
   }
 }
 
+static
+void
+usage(FILE *f, int argc, char **argv)
+{
+  fprintf(stderr, "Usage:\n");
+  fprintf(stderr, "\t%s --simple <index1> <index2> ... <indexN>\n", argv[0]);
+  fprintf(stderr, "\t%s --basic\n", argv[0]);
+  fprintf(stderr, "\t%s { --read | --write } [ --mbytes=<megabytes> | --mbytes=<gigabytes>[gG] ] [ --cnt=<count> ] [ --seq ]\n", argv[0]);
+  fprintf(stderr, "defaults:\n");
+  fprintf(stderr, "\t--mbytes=16g\n");
+  fprintf(stderr, "\t--cnt=100000\n");
+}
+
+# include "test_context.hpp"
+
 int
 main(int argc, char** argv)
 {
-  if (0)
-  {
-    for (Uint32 i = 0; i<30; i++)
-    {
-      Uint32 b = (i + 1) >> 4;
-      Uint32 p = i - (b << 4) + b;
-      printf("[ %d %d %d ]\n", i, b, p);
-    }
-    return 0;
+  if (argc == 1) {
+    usage(stderr, argc, argv);
+    exit(2);
   }
 
-  Pool_context pc;
-  pc.m_block = &block;
-  
-  Resource_limit rl;
-  rl.m_min = 0;
-  rl.m_max = 10000;
-  rl.m_resource_id = 0;
-  mm.set_resource_limit(rl);
-  if(!mm.init())
-  {
-    abort();
-  }
+  Pool_context pc = test_context(10000 /* pages */);
 
   DynArr256Pool pool;
   pool.init(0x2001, pc);
@@ -922,13 +906,18 @@ main(int argc, char** argv)
   DynArr256 arr(pool, head);
 
   if (strcmp(argv[1], "--simple") == 0)
-    simple(arr, argc, argv);
+    simple(arr, argc - 1, argv + 1);
   else if (strcmp(argv[1], "--basic") == 0)
-    basic(arr, argc, argv);
+    basic(arr, argc - 1, argv + 1);
   else if (strcmp(argv[1], "--read") == 0)
-    read(arr, argc, argv);
+    read(arr, argc - 1, argv + 1);
   else if (strcmp(argv[1], "--write") == 0)
-    write(arr, argc, argv);
+    write(arr, argc - 1, argv + 1);
+  else
+  {
+    usage(stderr, argc, argv);
+    exit(2);
+  }
 
   DynArr256::ReleaseIterator iter;
   arr.init(iter);
@@ -943,75 +932,20 @@ main(int argc, char** argv)
 	   cnt);
   
   return 0;
-#if 0
-  printf("sizeof(DA256Page): %d\n", sizeof(DA256Page));
-
-  DA256Page page;
-
-  for (Uint32 i = 0; i<10000; i++)
-  {
-    Uint32 arg = rand() & 255;
-    Uint32 base = 0;
-    Uint32 idx = arg & 256;
-    printf("%d\n", arg);
-
-    assert(base <= 30);
-    
-    if (idx == 255)
-    {
-      Uint32 b = (base + 1) >> 4;
-      Uint32 p = base - (b << 4) + b;
-      Uint32 magic = page.m_header[b].m_magic;
-      Uint32 retVal = page.m_header[b].m_data[p];
-      
-      require(magic & (1 << p));
-      return retVal;
-    }
-    else
-    {
-      // 4 bit extra offset per idx
-      Uint32 line = idx / 15;
-      Uint32 off = idx % 15;
-      
-      {
-	Uint32 pos = 1 + idx + line;
-	Uint32 magic = pos & ~15;
-	
-	Uint32 * ptr = (Uint32*)&page.m_nodes[base];
-	assert((ptr + pos) == &page.m_nodes[base].m_lines[line].m_data[off]);
-	assert((ptr + magic) == &page.m_nodes[base].m_lines[line].m_magic);
-      }
-    }
-  }
-#endif
-}
-
-Uint32 g_currentStartPhase;
-Uint32 g_start_type;
-NdbNodeBitmask g_nowait_nodes;
-
-void
-UpgradeStartup::sendCmAppChg(Ndbcntr& cntr, Signal* signal, Uint32 startLevel){
 }
 
-void
-UpgradeStartup::execCM_APPCHG(SimulatedBlock & block, Signal* signal){
-}
-
-void
-UpgradeStartup::sendCntrMasterReq(Ndbcntr& cntr, Signal* signal, Uint32 n){
-}
-
-void
-UpgradeStartup::execCNTR_MASTER_REPLY(SimulatedBlock & block, Signal* signal){
-}
+#endif
 
-#include <SimBlockList.hpp>
+#ifdef TAP_TEST
+#include <NdbTap.hpp>
+#include "test_context.hpp"
 
-void
-SimBlockList::unload()
+TAPTEST(DynArr256)
 {
+  Pool_context pc = test_context(100);
 
-}
+  OK(true);
 
+  return 1;
+}
 #endif

=== modified file 'storage/ndb/src/kernel/vm/SLList.hpp'
--- a/storage/ndb/src/kernel/vm/SLList.hpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/vm/SLList.hpp	revid:mikael.ronstrom@stripped20120109124556-sanff2aqtuj8wph0
@@ -1,6 +1,5 @@
 /*
-   Copyright (C) 2003-2006 MySQL AB
-    All rights reserved. Use is subject to license terms.
+   Copyright (C) 2003-2006, 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
@@ -23,13 +22,30 @@
 #include <NdbOut.hpp>
 
 /**
- * Template class used for implementing an
- *   list of object retreived from a pool
+ * SLMList implements a intrusive list using chaining
+ *   (with a single link)
+ *
+ * The entries in the (uninstansiated) meta class passed to the
+ * list must have the following methods:
+ *
+ *  -# nextList(U&) returning a reference to the next link
  */
-template <typename P, typename T, typename U = T>
-class SLListImpl 
+
+template <typename T, typename U = T> struct SLListDefaultMethods {
+static inline Uint32& nextList(U& t) { return t.nextList; }
+};
+
+template <typename P, typename T, typename M = SLListDefaultMethods<T> >
+class SLMList
 {
 public:
+  explicit SLMList(P& thePool);
+  ~SLMList() { }
+private:
+  SLMList(const SLMList&);
+  SLMList&  operator=(const SLMList&);
+
+public:
   /**
    * List head
    */
@@ -46,8 +62,6 @@ public:
     }
   };
   
-  SLListImpl(P & thePool);
-  
   /**
    * Allocate an object from pool - update Ptr
    *
@@ -119,7 +133,7 @@ public:
    * Add
    */
   void add(Ptr<T> & p){
-    p.p->U::nextList = head.firstItem;
+    M::nextList(*p.p) = head.firstItem;
     head.firstItem = p.i;
   }
 
@@ -142,7 +156,7 @@ public:
     while(i != RNIL){
       c++;
       const T * t = thePool.getPtr(i);
-      i = t->U::nextList;
+      i = M::nextList(*t);
     }
     return c;
   }
@@ -168,75 +182,75 @@ protected:
   P & thePool;
 };
 
-template <typename P, typename T, typename U = T>
-class LocalSLListImpl : public SLListImpl<P, T, U> 
+template <typename P, typename T, typename M = SLListDefaultMethods<T> >
+class LocalSLMList : public SLMList<P, T, M>
 {
 public:
-  LocalSLListImpl(P & thePool, typename SLListImpl<P, T, U>::HeadPOD & _src)
-    : SLListImpl<P, T, U>(thePool), src(_src)
+  LocalSLMList(P& thePool, typename SLMList<P, T, M>::HeadPOD& _src)
+    : SLMList<P, T, M>(thePool), src(_src)
   {
     this->head = src;
   }
   
-  ~LocalSLListImpl(){
+  ~LocalSLMList(){
     src = this->head;
   }
 private:
-  typename SLListImpl<P, T, U>::HeadPOD & src;
+  typename SLMList<P, T, M>::HeadPOD& src;
 };
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
-SLListImpl<P, T, U>::SLListImpl(P & _pool):
+SLMList<P, T, M>::SLMList(P& _pool):
   thePool(_pool)
 {
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
-SLListImpl<P, T, U>::Head::Head()
+SLMList<P, T, M>::Head::Head()
 {
   this->init();
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-SLListImpl<P, T, U>::seize(Ptr<T> & p)
+SLMList<P, T, M>::seize(Ptr<T>& p)
 {
   thePool.seize(p);
   T * t = p.p;
   Uint32 ff = head.firstItem;
   if(p.i != RNIL)
   {
-    t->U::nextList = ff;
+    M::nextList(*t) = ff;
     head.firstItem = p.i;
     return true;
   }
   return false;
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-SLListImpl<P, T, U>::seizeId(Ptr<T> & p, Uint32 ir)
+SLMList<P, T, M>::seizeId(Ptr<T>& p, Uint32 ir)
 {
   thePool.seizeId(p, ir);
   T * t = p.p;
   Uint32 ff = head.firstItem;
   if(p.i != RNIL)
   {
-    t->U::nextList = ff;
+    M::nextList(*t) = ff;
     head.firstItem = p.i;
     return true;
   }
   return false;
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-SLListImpl<P, T, U>::seizeN(Ptr<T> & p, Uint32 n)
+SLMList<P, T, M>::seizeN(Ptr<T>& p, Uint32 n)
 {
   for(Uint32 i = 0; i < n; i++)
   {
@@ -249,7 +263,7 @@ SLListImpl<P, T, U>::seizeN(Ptr<T> & p, 
       {
 	p.i = head.firstItem;
 	thePool.getPtr(p);
-	head.firstItem = p.p->U::nextList;
+         head.firstItem = M::nextList(*p.p);
 	thePool.release(p);
       }
       return false;
@@ -266,75 +280,75 @@ SLListImpl<P, T, U>::seizeN(Ptr<T> & p, 
 }
 
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-SLListImpl<P, T, U>::remove()
+SLMList<P, T, M>::remove()
 {
   head.firstItem = RNIL;
 }  
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-SLListImpl<P, T, U>::remove_front(Ptr<T> & p)
+SLMList<P, T, M>::remove_front(Ptr<T>& p)
 {
   p.i = head.firstItem;
   if (p.i != RNIL)
   {
     p.p = thePool.getPtr(p.i);
-    head.firstItem = p.p->U::nextList;
+    head.firstItem = M::nextList(*p.p);
     return true;
   }
   return false;
 }  
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void
-SLListImpl<P, T, U>::add(Uint32 first, Ptr<T> & last)
+SLMList<P, T, M>::add(Uint32 first, Ptr<T>& last)
 {
-  last.p->U::nextList = head.firstItem;
+  M::nextList(*last.p) = head.firstItem;
   head.firstItem = first;
 }  
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-SLListImpl<P, T, U>::release()
+SLMList<P, T, M>::release()
 {
   Ptr<T> ptr;
   Uint32 curr = head.firstItem;
   while(curr != RNIL)
   {
     thePool.getPtr(ptr, curr);
-    curr = ptr.p->U::nextList;
+    curr = M::nextList(*ptr.p);
     thePool.release(ptr);
   }
   head.firstItem = RNIL;
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-SLListImpl<P, T, U>::getPtr(Ptr<T> & p, Uint32 i) const 
+SLMList<P, T, M>::getPtr(Ptr<T>& p, Uint32 i) const
 {
   p.i = i;
   p.p = thePool.getPtr(i);
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 void 
-SLListImpl<P, T, U>::getPtr(Ptr<T> & p) const 
+SLMList<P, T, M>::getPtr(Ptr<T>& p) const
 {
   thePool.getPtr(p);
 }
   
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 T * 
-SLListImpl<P, T, U>::getPtr(Uint32 i) const 
+SLMList<P, T, M>::getPtr(Uint32 i) const
 {
   return thePool.getPtr(i);
 }
@@ -344,10 +358,10 @@ SLListImpl<P, T, U>::getPtr(Uint32 i) co
  *
  * Return i
  */
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-SLListImpl<P, T, U>::first(Ptr<T> & p) const 
+SLMList<P, T, M>::first(Ptr<T>& p) const
 {
   Uint32 i = head.firstItem;
   p.i = i;
@@ -360,12 +374,12 @@ SLListImpl<P, T, U>::first(Ptr<T> & p) c
   return false;
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-SLListImpl<P, T, U>::next(Ptr<T> & p) const 
+SLMList<P, T, M>::next(Ptr<T>& p) const
 {
-  Uint32 i = p.p->U::nextList;
+  Uint32 i = M::nextList(*p.p);
   p.i = i;
   if(i != RNIL)
   {
@@ -376,28 +390,44 @@ SLListImpl<P, T, U>::next(Ptr<T> & p) co
   return false;
 }
 
-template <typename P, typename T, typename U>
+template <typename P, typename T, typename M>
 inline
 bool
-SLListImpl<P, T, U>::hasNext(const Ptr<T> & p) const 
+SLMList<P, T, M>::hasNext(const Ptr<T>& p) const
 {
-  return p.p->U::nextList != RNIL;
+  return M::nextList(*p.p) != RNIL;
 }
 
 // Specializations
 
-template <typename T, typename U = T>
-class SLList : public SLListImpl<ArrayPool<T>, T, U>
+template <typename P, typename T, typename U = T, typename M = SLListDefaultMethods<T, U> >
+class SLListImpl : public SLMList<P, T, M>
+{
+public:
+  SLListImpl(P& p) : SLMList<P, T, M>(p) {}
+};
+
+template <typename P, typename T, typename U = T, typename M = SLListDefaultMethods<T, U> >
+class LocalSLListImpl : public LocalSLMList<P, T, M> {
+public:
+  LocalSLListImpl(P& p, typename SLMList<P, T, M>::Head& _src)
+    : LocalSLMList<P, T, M>(p, _src) {}
+};
+
+//
+
+template <typename T, typename U = T, typename M = SLListDefaultMethods<T, U> >
+class SLList : public SLMList<ArrayPool<T>, T, M>
 {
 public:
-  SLList(ArrayPool<T> & p) : SLListImpl<ArrayPool<T>, T, U>(p) {}
+  SLList(ArrayPool<T>& p) : SLMList<ArrayPool<T>, T, M>(p) {}
 };
 
-template <typename T, typename U = T>
-class LocalSLList : public LocalSLListImpl<ArrayPool<T>,T,U> {
+template <typename T, typename U = T, typename M = SLListDefaultMethods<T, U> >
+class LocalSLList : public LocalSLMList<ArrayPool<T>, T, M> {
 public:
-  LocalSLList(ArrayPool<T> & p, typename SLList<T,U>::Head & _src)
-    : LocalSLListImpl<ArrayPool<T>,T,U>(p, _src) {}
+  LocalSLList(ArrayPool<T>& p, typename SLMList<ArrayPool<T>, T, M>::Head& _src)
+    : LocalSLMList<ArrayPool<T>, T, M>(p, _src) {}
 };
 
 

=== modified file 'storage/ndb/src/kernel/vm/SimulatedBlock.hpp'
--- a/storage/ndb/src/kernel/vm/SimulatedBlock.hpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/vm/SimulatedBlock.hpp	revid:mikael.ronstrom@stripped
@@ -636,9 +636,9 @@ private:
    */
 protected:
   enum { MaxInstances = 3 +
-                        MAX_NDBMT_TC_THREADS +
-                        MAX_NDBMT_LQH_WORKERS +
-                        MAX_NDBMT_RECEIVE_THREADS };
+         MAX_NDBMT_TC_THREADS +
+         MAX_NDBMT_LQH_WORKERS +
+         MAX_NDBMT_RECEIVE_THREADS };
 private:
   SimulatedBlock** theInstanceList; // set in main, indexed by instance
   SimulatedBlock* theMainInstance;  // set in all

=== modified file 'storage/ndb/src/kernel/vm/TransporterCallback.cpp'
--- a/storage/ndb/src/kernel/vm/TransporterCallback.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/vm/TransporterCallback.cpp	revid:mikael.ronstrom@stripped124556-sanff2aqtuj8wph0
@@ -114,19 +114,18 @@ TransporterRegistry globalTransporterReg
 #endif
 
 #ifdef NDBD_MULTITHREADED
-struct ReceiverThreadCache
+static struct ReceiverThreadCache
 {
   SectionSegmentPool::Cache cache_instance;
-  char not_used[96];
-};
-static ReceiverThreadCache rec_cache[MAX_NDBMT_RECEIVE_THREADS];
+  char pad[64 - sizeof(SectionSegmentPool::Cache)];
+} g_receiver_thread_cache[MAX_NDBMT_RECEIVE_THREADS];
 
 void
-init_receiver_cache()
+mt_init_receiver_cache()
 {
-  for (Uint32 i = 0; i < MAX_NDBMT_RECEIVE_THREADS; i++)
+  for (unsigned i = 0; i < NDB_ARRAY_SIZE(g_receiver_thread_cache); i++)
   {
-    rec_cache[i].cache_instance.init_cache(1024,1024);
+    g_receiver_thread_cache[i].cache_instance.init_cache(1024,1024);
   }
 }
 
@@ -137,6 +136,7 @@ mt_set_section_chunk_size()
 }
 
 #else
+void mt_init_receiver_cache(){}
 void mt_set_section_chunk_size(){}
 void init_receiver_cache(){}
 #endif
@@ -151,8 +151,9 @@ TransporterCallbackKernel::deliver_signa
 {
 #ifdef NDBD_MULTITHREADED
   assert(recvThreadId < MAX_NDBMT_RECEIVE_THREADS);
-  SectionSegmentPool::Cache &cache = rec_cache[recvThreadId].cache_instance;
+  SectionSegmentPool::Cache & cache = g_receiver_thread_cache[recvThreadId].cache_instance;
 #endif
+
   const Uint32 secCount = header->m_noOfSections;
   const Uint32 length = header->theLength;
 

=== modified file 'storage/ndb/src/kernel/vm/TransporterCallbackKernel.hpp'
--- a/storage/ndb/src/kernel/vm/TransporterCallbackKernel.hpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/vm/TransporterCallbackKernel.hpp	revid:mikael.ronstrom@stripped4556-sanff2aqtuj8wph0
@@ -13,8 +13,6 @@
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
-void init_receiver_cache();
-
 class TransporterCallbackKernel: public TransporterCallback
 {
 public:

=== modified file 'storage/ndb/src/kernel/vm/mt.cpp'
--- a/storage/ndb/src/kernel/vm/mt.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/vm/mt.cpp	revid:mikael.ronstrom@stripped109124556-sanff2aqtuj8wph0
@@ -74,16 +74,16 @@ static const Uint32 MAX_SIGNALS_BEFORE_W
 
 #define NUM_MAIN_THREADS 2 // except receiver
 /*
-MAX_BLOCK_THREADS need not include the send threads since it's
-used to set size of arrays used by all threads that contains a
-job buffer and executes signals. The send threads only sends
-messages directed to other nodes and contains no blocks and
-executes thus no signals.
+  MAX_BLOCK_THREADS need not include the send threads since it's
+  used to set size of arrays used by all threads that contains a
+  job buffer and executes signals. The send threads only sends
+  messages directed to other nodes and contains no blocks and
+  executes thus no signals.
 */
 #define MAX_BLOCK_THREADS (NUM_MAIN_THREADS +       \
-                         MAX_NDBMT_LQH_THREADS +  \
-                         MAX_NDBMT_TC_THREADS + \
-                         MAX_NDBMT_RECEIVE_THREADS)
+                           MAX_NDBMT_LQH_THREADS +  \
+                           MAX_NDBMT_TC_THREADS +   \
+                           MAX_NDBMT_RECEIVE_THREADS)
 #define MAX_BLOCK_INSTANCES (MAX_BLOCK_THREADS+1)
 
 /* If this is too small it crashes before first signal. */
@@ -3989,7 +3989,7 @@ rep_init(struct thr_repository* rep, uns
   NdbMutex_Init(&rep->stop_for_crash_mutex);
   NdbCondition_Init(&rep->stop_for_crash_cond);
 
-  for (Uint32 i = 0; i < globalData.ndbMtReceiveThreads; i++)
+  for (Uint32 i = 0; i < NDB_ARRAY_SIZE(rep->m_receive_lock); i++)
   {
     receive_lock_init(i, rep);
   }
@@ -4109,7 +4109,6 @@ ThreadConfig::ipControlLoop(NdbThread* p
     g_send_threads = new thr_send_threads();
 #endif
   setcpuaffinity(rep);
-  init_receiver_cache();
 
   /* Start the send thread(s) */
   if (g_send_threads)

=== modified file 'storage/ndb/src/kernel/vm/mt_thr_config.cpp'
--- a/storage/ndb/src/kernel/vm/mt_thr_config.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/vm/mt_thr_config.cpp	revid:mikael.ronstrom@stripped
@@ -31,10 +31,10 @@ static const struct THRConfig::Entries m
   { "main",  THRConfig::T_MAIN,  1, 1 },
   { "ldm",   THRConfig::T_LDM,   1, MAX_NDBMT_LQH_THREADS },
   { "recv",  THRConfig::T_RECV,  1, MAX_NDBMT_RECEIVE_THREADS },
-  { "send",  THRConfig::T_SEND,  0, MAX_NDBMT_SEND_THREADS },
   { "rep",   THRConfig::T_REP,   1, 1 },
   { "io",    THRConfig::T_IO,    1, 1 },
-  { "tc",    THRConfig::T_TC,    0, MAX_NDBMT_TC_THREADS }
+  { "tc",    THRConfig::T_TC,    0, MAX_NDBMT_TC_THREADS },
+  { "send",  THRConfig::T_SEND,  0, MAX_NDBMT_SEND_THREADS }
 };
 
 static const struct THRConfig::Param m_params[] =
@@ -377,6 +377,10 @@ THRConfig::do_parse(unsigned MaxNoOfExec
 
   add(T_MAIN); /* Global */
   add(T_REP);  /* Local, main consumer is SUMA */
+  for(Uint32 i = 0; i < recvthreads; i++)
+  {
+    add(T_RECV);
+  }
   add(T_IO);
   for(Uint32 i = 0; i < lqhthreads; i++)
   {
@@ -390,10 +394,6 @@ THRConfig::do_parse(unsigned MaxNoOfExec
   {
     add(T_SEND);
   }
-  for(Uint32 i = 0; i < recvthreads; i++)
-  {
-    add(T_RECV);
-  }
 
   // If we have set TC-threads...we say that this is "new" code
   // and give error for having too few CPU's in mask compared to #threads
@@ -1108,7 +1108,11 @@ THRConfig::do_parse(const char * ThreadC
       add((T_Type)i);
   }
 
-  const bool allow_too_few_cpus = m_threads[T_TC].size() == 0;
+  const bool allow_too_few_cpus =
+    m_threads[T_TC].size() == 0 &&
+    m_threads[T_SEND].size() == 0 &&
+    m_threads[T_RECV].size() == 1;
+
   int res = do_bindings(allow_too_few_cpus);
   if (res != 0)
   {

=== modified file 'storage/ndb/src/kernel/vm/mt_thr_config.hpp'
--- a/storage/ndb/src/kernel/vm/mt_thr_config.hpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/kernel/vm/mt_thr_config.hpp	revid:mikael.ronstrom@stripped-sanff2aqtuj8wph0
@@ -41,10 +41,10 @@ public:
     T_MAIN  = 0, /* DIH/QMGR/TC/SPJ etc */
     T_LDM   = 1, /* LQH/ACC/TUP/TUX etc */
     T_RECV  = 2, /* CMVMI */
-    T_SEND  = 3, /* No blocks */
-    T_REP   = 4, /* SUMA */
-    T_IO    = 5, /* FS, SocketServer etc */
-    T_TC    = 6, /* TC+SPJ */
+    T_REP   = 3, /* SUMA */
+    T_IO    = 4, /* FS, SocketServer etc */
+    T_TC    = 5, /* TC+SPJ */
+    T_SEND  = 6, /* No blocks */
 
     T_END  = 7
   };

=== added file 'storage/ndb/src/kernel/vm/test_context.cpp'
--- a/storage/ndb/src/kernel/vm/test_context.cpp	1970-01-01 00:00:00 +0000
+++ b/storage/ndb/src/kernel/vm/test_context.cpp	revid:mikael.ronstrom@stripped20120109124556-sanff2aqtuj8wph0
@@ -0,0 +1,104 @@
+/*
+   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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+*/
+
+#include "blocks/dbdih/Dbdih.hpp"
+#include "GlobalData.hpp"
+#include "ndbapi/NdbApi.hpp"
+#include "ndbd_malloc_impl.hpp"
+#include "NdbTick.h"
+#include "SimBlockList.hpp"
+#include "SimulatedBlock.hpp"
+#include "test_context.hpp"
+
+struct DummyBlock : public SimulatedBlock
+{
+  DummyBlock(int no, Block_context& ctx) : SimulatedBlock(no, ctx) {}
+  ~DummyBlock() { }
+};
+
+static Ndbd_mem_manager mm;
+static Configuration cfg;
+static Block_context ctx(cfg, mm);
+static DummyBlock block(DBACC, ctx);
+
+// Force enough modules from libkernel that libsched need
+static SimulatedBlock::MutexManager mxm(block);
+static SafeCounterManager scm(block);
+
+Pool_context
+test_context(Uint32 pages)
+{
+  ndb_init();
+
+  Pool_context pc;
+  pc.m_block = &block;
+
+  Resource_limit rl;
+  for (Uint32 resid = 1; resid < RG_COUNT; resid++)
+  {
+    rl.m_min = 0;
+    rl.m_max = 0;
+    rl.m_resource_id = resid;
+    mm.set_resource_limit(rl);
+  }
+  rl.m_min = 0;
+  rl.m_max = pages;
+  rl.m_resource_id = 0;
+  mm.set_resource_limit(rl);
+
+  if (!mm.init(NULL /* watchCounter */))
+  {
+    abort();
+  }
+
+  mm.map(NULL /* watchCounter */, 0 /* memlock */); // Map all
+
+  return pc;
+}
+
+void dummy_calls_to_force_some_modules_from_libkernel_needed_by_libsched()
+{
+  globalData.getBlock(0,0);
+  Ndbinfo::getNumTables();
+}
+
+// Some undefined globals needed
+
+Uint32 g_currentStartPhase;
+Uint32 g_start_type;
+NdbNodeBitmask g_nowait_nodes;
+
+void
+SimBlockList::unload()
+{
+
+}
+
+void
+NdbShutdown(int error_code,
+            NdbShutdownType type,
+            NdbRestartType restartType)
+{
+  abort();
+}
+
+Uint32
+Dbdih::dihGetInstanceKey(Uint32 tabId, Uint32 fragId)
+{
+  abort();
+  return 0;
+}

=== added file 'storage/ndb/src/kernel/vm/test_context.hpp'
--- a/storage/ndb/src/kernel/vm/test_context.hpp	1970-01-01 00:00:00 +0000
+++ b/storage/ndb/src/kernel/vm/test_context.hpp	revid:mikael.ronstrom@stripped
@@ -0,0 +1,25 @@
+# ifndef TESTBLOCK_HPP
+# define TESTBLOCK_HPP
+
+/*
+   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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+*/
+
+#include "Pool.hpp"
+
+Pool_context test_context(Uint32 pages);
+
+# endif

=== modified file 'storage/ndb/src/ndbjtie/ndbapi_jtie.hpp'
--- a/storage/ndb/src/ndbjtie/ndbapi_jtie.hpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/src/ndbjtie/ndbapi_jtie.hpp	revid:mikael.ronstrom@stripped120109124556-sanff2aqtuj8wph0
@@ -1623,9 +1623,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/ColumnConst;)Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/Column;
  */
 JNIEXPORT jobject JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Column_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2(JNIEnv * env, jclass cls, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Column_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2(JNIEnv * env, jclass cls, jobject p0)
 {
-    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Column_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2(JNIEnv *, jclass, jobject)");
+    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Column_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2(JNIEnv *, jclass, jobject)");
     return gcreate< ttrait_c_m_n_n_NdbDictionary_Column_r, ttrait_c_m_n_n_NdbDictionary_Column_cr >(env, cls, p0);
 }
 
@@ -2015,9 +2015,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/DatafileConst;)Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/Datafile;
  */
 JNIEXPORT jobject JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Datafile_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_DatafileConst_2(JNIEnv * env, jclass cls, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Datafile_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024DatafileConst_2(JNIEnv * env, jclass cls, jobject p0)
 {
-    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Datafile_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_DatafileConst_2(JNIEnv *, jclass, jobject)");
+    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Datafile_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024DatafileConst_2(JNIEnv *, jclass, jobject)");
     return gcreate< ttrait_c_m_n_n_NdbDictionary_Datafile_r, ttrait_c_m_n_n_NdbDictionary_Datafile_cr >(env, cls, p0);
 }
 
@@ -2087,9 +2087,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/TablespaceConst;)I
  */
 JNIEXPORT jint JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Datafile_setTablespace__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_TablespaceConst_2(JNIEnv * env, jobject obj, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Datafile_setTablespace__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TablespaceConst_2(JNIEnv * env, jobject obj, jobject p0)
 {
-    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Datafile_setTablespace__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_TablespaceConst_2(JNIEnv *, jobject, jobject)");
+    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Datafile_setTablespace__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TablespaceConst_2(JNIEnv *, jobject, jobject)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     return gcall_mfr< ttrait_c_m_n_n_NdbDictionary_Datafile_t, ttrait_int, ttrait_c_m_n_n_NdbDictionary_Tablespace_cr, &NdbDictionary::Datafile::setTablespace >(env, obj, p0);
 #else
@@ -2299,9 +2299,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/Table;)I
  */
 JNIEXPORT jint JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_dropTable__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_Table_2(JNIEnv * env, jobject obj, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_dropTable__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024Table_2(JNIEnv * env, jobject obj, jobject p0)
 {
-    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_dropTable__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_Table_2(JNIEnv *, jobject, jobject)");
+    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_dropTable__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024Table_2(JNIEnv *, jobject, jobject)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     return gcall_mfr< ttrait_c_m_n_n_NdbDictionary_Dictionary_t, ttrait_int, ttrait_c_m_n_n_NdbDictionary_Table_r, &NdbDictionary::Dictionary::dropTable >(env, obj, p0);
 #else
@@ -2379,9 +2379,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/IndexConst;Z)I
  */
 JNIEXPORT jint JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createIndex__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_IndexConst_2Z(JNIEnv * env, jobject obj, jobject p0, jboolean p1)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createIndex__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024IndexConst_2Z(JNIEnv * env, jobject obj, jobject p0, jboolean p1)
 {
-    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createIndex__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_IndexConst_2Z(JNIEnv *, jobject, jobject, jboolean)");
+    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createIndex__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024IndexConst_2Z(JNIEnv *, jobject, jobject, jboolean)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     return gcall_mfr< ttrait_c_m_n_n_NdbDictionary_Dictionary_t, ttrait_int, ttrait_c_m_n_n_NdbDictionary_Index_cr, ttrait_bool, &NdbDictionary::Dictionary::createIndex >(env, obj, p0, p1);
 #else
@@ -2395,9 +2395,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/IndexConst;Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/TableConst;Z)I
  */
 JNIEXPORT jint JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createIndex__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TableConst_2Z(JNIEnv * env, jobject obj, jobject p0, jobject p1, jboolean p2)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createIndex__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TableConst_2Z(JNIEnv * env, jobject obj, jobject p0, jobject p1, jboolean p2)
 {
-    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createIndex__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TableConst_2Z(JNIEnv *, jobject, jobject, jobject, jboolean)");
+    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createIndex__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TableConst_2Z(JNIEnv *, jobject, jobject, jobject, jboolean)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     return gcall_mfr< ttrait_c_m_n_n_NdbDictionary_Dictionary_t, ttrait_int, ttrait_c_m_n_n_NdbDictionary_Index_cr, ttrait_c_m_n_n_NdbDictionary_Table_cr, ttrait_bool, &NdbDictionary::Dictionary::createIndex >(env, obj, p0, p1, p2);
 #else
@@ -2555,9 +2555,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/TableConst;Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/RecordSpecificationConstArray;III)Lcom/mysql/ndbjtie/ndbapi/NdbRecord;
  */
 JNIEXPORT jobject JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_TableConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_RecordSpecificationConstArray_2III(JNIEnv * env, jobject obj, jobject p0, jobject p1, jint p2, jint p3, jint p4)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TableConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024RecordSpecificationConstArray_2III(JNIEnv * env, jobject obj, jobject p0, jobject p1, jint p2, jint p3, jint p4)
 {
-    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_TableConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_RecordSpecificationConstArray_2III(JNIEnv *, jobject, jobject, jobject, jint, jint, jint)");
+    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TableConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024RecordSpecificationConstArray_2III(JNIEnv *, jobject, jobject, jobject, jint, jint, jint)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     return gcall_mfr< ttrait_c_m_n_n_NdbDictionary_Dictionary_t, ttrait_c_m_n_n_NdbRecord_p, ttrait_c_m_n_n_NdbDictionary_Table_cp, ttrait_c_m_n_n_NdbDictionary_RecordSpecificationArray_cp, ttrait_Uint32, ttrait_Uint32, ttrait_Uint32, &NdbDictionary::Dictionary::createRecord >(env, obj, p0, p1, p2, p3, p4);
 #else
@@ -2571,9 +2571,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/IndexConst;Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/TableConst;Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/RecordSpecificationConstArray;III)Lcom/mysql/ndbjtie/ndbapi/NdbRecord;
  */
 JNIEXPORT jobject JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_TableConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_RecordSpecificationConstArray_2III(JNIEnv * env, jobject obj, jobject p0, jobject p1, jobject p2, jint p3, jint p4, jint p5)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TableConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024RecordSpecificationConstArray_2III(JNIEnv * env, jobject obj, jobject p0, jobject p1, jobject p2, jint p3, jint p4, jint p5)
 {
-    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_TableConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_RecordSpecificationConstArray_2III(JNIEnv *, jobject, jobject, jobject, jobject, jint, jint, jint)");
+    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TableConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024RecordSpecificationConstArray_2III(JNIEnv *, jobject, jobject, jobject, jobject, jint, jint, jint)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     return gcall_mfr< ttrait_c_m_n_n_NdbDictionary_Dictionary_t, ttrait_c_m_n_n_NdbRecord_p, ttrait_c_m_n_n_NdbDictionary_Index_cp, ttrait_c_m_n_n_NdbDictionary_Table_cp, ttrait_c_m_n_n_NdbDictionary_RecordSpecificationArray_cp, ttrait_Uint32, ttrait_Uint32, ttrait_Uint32, &NdbDictionary::Dictionary::createRecord >(env, obj, p0, p1, p2, p3, p4, p5);
 #else
@@ -2587,9 +2587,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/IndexConst;Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/RecordSpecificationConstArray;III)Lcom/mysql/ndbjtie/ndbapi/NdbRecord;
  */
 JNIEXPORT jobject JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_RecordSpecificationConstArray_2III(JNIEnv * env, jobject obj, jobject p0, jobject p1, jint p2, jint p3, jint p4)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024RecordSpecificationConstArray_2III(JNIEnv * env, jobject obj, jobject p0, jobject p1, jint p2, jint p3, jint p4)
 {
-    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_RecordSpecificationConstArray_2III(JNIEnv *, jobject, jobject, jobject, jint, jint, jint)");
+    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Dictionary_createRecord__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024IndexConst_2Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024RecordSpecificationConstArray_2III(JNIEnv *, jobject, jobject, jobject, jint, jint, jint)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     return gcall_mfr< ttrait_c_m_n_n_NdbDictionary_Dictionary_t, ttrait_c_m_n_n_NdbRecord_p, ttrait_c_m_n_n_NdbDictionary_Index_cp, ttrait_c_m_n_n_NdbDictionary_RecordSpecificationArray_cp, ttrait_Uint32, ttrait_Uint32, ttrait_Uint32, &NdbDictionary::Dictionary::createRecord >(env, obj, p0, p1, p2, p3, p4);
 #else
@@ -3769,9 +3769,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/LogfileGroupConst;)Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/LogfileGroup;
  */
 JNIEXPORT jobject JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024LogfileGroup_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_LogfileGroupConst_2(JNIEnv * env, jclass cls, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024LogfileGroup_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024LogfileGroupConst_2(JNIEnv * env, jclass cls, jobject p0)
 {
-    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024LogfileGroup_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_LogfileGroupConst_2(JNIEnv *, jclass, jobject)");
+    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024LogfileGroup_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024LogfileGroupConst_2(JNIEnv *, jclass, jobject)");
     return gcreate< ttrait_c_m_n_n_NdbDictionary_LogfileGroup_r, ttrait_c_m_n_n_NdbDictionary_LogfileGroup_cr >(env, cls, p0);
 }
 
@@ -4105,9 +4105,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/ColumnConst;)V
  */
 JNIEXPORT void JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024RecordSpecification_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2(JNIEnv * env, jobject obj, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024RecordSpecification_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2(JNIEnv * env, jobject obj, jobject p0)
 {
-    TRACE("void Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024RecordSpecification_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2(JNIEnv *, jobject, jobject)");
+    TRACE("void Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024RecordSpecification_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2(JNIEnv *, jobject, jobject)");
     gset< ttrait_c_m_n_n_NdbDictionary_RecordSpecification_t, ttrait_c_m_n_n_NdbDictionary_Column_cp, &NdbDictionary::RecordSpecification::column >(env, obj, p0);
 }
 
@@ -5345,9 +5345,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/TablespaceConst;)Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/Tablespace;
  */
 JNIEXPORT jobject JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Tablespace_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_TablespaceConst_2(JNIEnv * env, jclass cls, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Tablespace_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TablespaceConst_2(JNIEnv * env, jclass cls, jobject p0)
 {
-    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Tablespace_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_TablespaceConst_2(JNIEnv *, jclass, jobject)");
+    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Tablespace_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024TablespaceConst_2(JNIEnv *, jclass, jobject)");
     return gcreate< ttrait_c_m_n_n_NdbDictionary_Tablespace_r, ttrait_c_m_n_n_NdbDictionary_Tablespace_cr >(env, cls, p0);
 }
 
@@ -5433,9 +5433,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/LogfileGroupConst;)V
  */
 JNIEXPORT void JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Tablespace_setDefaultLogfileGroup__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_LogfileGroupConst_2(JNIEnv * env, jobject obj, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Tablespace_setDefaultLogfileGroup__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024LogfileGroupConst_2(JNIEnv * env, jobject obj, jobject p0)
 {
-    TRACE("void Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Tablespace_setDefaultLogfileGroup__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_LogfileGroupConst_2(JNIEnv *, jobject, jobject)");
+    TRACE("void Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Tablespace_setDefaultLogfileGroup__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024LogfileGroupConst_2(JNIEnv *, jobject, jobject)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     gcall_mfv< ttrait_c_m_n_n_NdbDictionary_Tablespace_t, ttrait_c_m_n_n_NdbDictionary_LogfileGroup_cr, &NdbDictionary::Tablespace::setDefaultLogfileGroup >(env, obj, p0);
 #else
@@ -5577,9 +5577,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/UndofileConst;)Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/Undofile;
  */
 JNIEXPORT jobject JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Undofile_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_UndofileConst_2(JNIEnv * env, jclass cls, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Undofile_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024UndofileConst_2(JNIEnv * env, jclass cls, jobject p0)
 {
-    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Undofile_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_UndofileConst_2(JNIEnv *, jclass, jobject)");
+    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Undofile_create__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024UndofileConst_2(JNIEnv *, jclass, jobject)");
     return gcreate< ttrait_c_m_n_n_NdbDictionary_Undofile_r, ttrait_c_m_n_n_NdbDictionary_Undofile_cr >(env, cls, p0);
 }
 
@@ -5649,9 +5649,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbDiction
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/LogfileGroupConst;)V
  */
 JNIEXPORT void JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Undofile_setLogfileGroup__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_LogfileGroupConst_2(JNIEnv * env, jobject obj, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Undofile_setLogfileGroup__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024LogfileGroupConst_2(JNIEnv * env, jobject obj, jobject p0)
 {
-    TRACE("void Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Undofile_setLogfileGroup__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_LogfileGroupConst_2(JNIEnv *, jobject, jobject)");
+    TRACE("void Java_com_mysql_ndbjtie_ndbapi_NdbDictionary_00024Undofile_setLogfileGroup__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024LogfileGroupConst_2(JNIEnv *, jobject, jobject)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     gcall_mfv< ttrait_c_m_n_n_NdbDictionary_Undofile_t, ttrait_c_m_n_n_NdbDictionary_LogfileGroup_cr, &NdbDictionary::Undofile::setLogfileGroup >(env, obj, p0);
 #else
@@ -6281,9 +6281,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbIndexSc
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbRecordConst;Lcom/mysql/ndbjtie/ndbapi/NdbIndexScanOperation/IndexBoundConst;)I
  */
 JNIEXPORT jint JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbIndexScanOperation_setBound__Lcom_mysql_ndbjtie_ndbapi_NdbRecordConst_2Lcom_mysql_ndbjtie_ndbapi_NdbIndexScanOperation_IndexBoundConst_2(JNIEnv * env, jobject obj, jobject p0, jobject p1)
+Java_com_mysql_ndbjtie_ndbapi_NdbIndexScanOperation_setBound__Lcom_mysql_ndbjtie_ndbapi_NdbRecordConst_2Lcom_mysql_ndbjtie_ndbapi_NdbIndexScanOperation_00024IndexBoundConst_2(JNIEnv * env, jobject obj, jobject p0, jobject p1)
 {
-    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbIndexScanOperation_setBound__Lcom_mysql_ndbjtie_ndbapi_NdbRecordConst_2Lcom_mysql_ndbjtie_ndbapi_NdbIndexScanOperation_IndexBoundConst_2(JNIEnv *, jobject, jobject, jobject)");
+    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbIndexScanOperation_setBound__Lcom_mysql_ndbjtie_ndbapi_NdbRecordConst_2Lcom_mysql_ndbjtie_ndbapi_NdbIndexScanOperation_00024IndexBoundConst_2(JNIEnv *, jobject, jobject, jobject)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     return gcall_mfr< ttrait_c_m_n_n_NdbIndexScanOperation_t, ttrait_int, ttrait_c_m_n_n_NdbRecord_cp, ttrait_c_m_n_n_NdbIndexScanOperation_IndexBound_cr, &NdbIndexScanOperation::setBound >(env, obj, p0, p1);
 #else
@@ -6649,9 +6649,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbInterpr
  * Signature: (ILcom/mysql/ndbjtie/ndbapi/NdbDictionary/ColumnConst;)I
  */
 JNIEXPORT jint JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbInterpretedCode_read_1attr__ILcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2(JNIEnv * env, jobject obj, jint p0, jobject p1)
+Java_com_mysql_ndbjtie_ndbapi_NdbInterpretedCode_read_1attr__ILcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2(JNIEnv * env, jobject obj, jint p0, jobject p1)
 {
-    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbInterpretedCode_read_1attr__ILcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2(JNIEnv *, jobject, jint, jobject)");
+    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbInterpretedCode_read_1attr__ILcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2(JNIEnv *, jobject, jint, jobject)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     return gcall_mfr< ttrait_c_m_n_n_NdbInterpretedCode_t, ttrait_int, ttrait_Uint32, ttrait_c_m_n_n_NdbDictionary_Column_cp, &NdbInterpretedCode::read_attr >(env, obj, p0, p1);
 #else
@@ -6681,9 +6681,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbInterpr
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/ColumnConst;I)I
  */
 JNIEXPORT jint JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbInterpretedCode_write_1attr__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2I(JNIEnv * env, jobject obj, jobject p0, jint p1)
+Java_com_mysql_ndbjtie_ndbapi_NdbInterpretedCode_write_1attr__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2I(JNIEnv * env, jobject obj, jobject p0, jint p1)
 {
-    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbInterpretedCode_write_1attr__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2I(JNIEnv *, jobject, jobject, jint)");
+    TRACE("jint Java_com_mysql_ndbjtie_ndbapi_NdbInterpretedCode_write_1attr__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2I(JNIEnv *, jobject, jobject, jint)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     return gcall_mfr< ttrait_c_m_n_n_NdbInterpretedCode_t, ttrait_int, ttrait_c_m_n_n_NdbDictionary_Column_cp, ttrait_Uint32, &NdbInterpretedCode::write_attr >(env, obj, p0, p1);
 #else
@@ -7644,9 +7644,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbOperati
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/ColumnConst;Ljava/nio/ByteBuffer;)Lcom/mysql/ndbjtie/ndbapi/NdbRecAttr;
  */
 JNIEXPORT jobject JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbOperation_getValue__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2Ljava_nio_ByteBuffer_2(JNIEnv * env, jobject obj, jobject p0, jobject p1)
+Java_com_mysql_ndbjtie_ndbapi_NdbOperation_getValue__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2Ljava_nio_ByteBuffer_2(JNIEnv * env, jobject obj, jobject p0, jobject p1)
 {
-    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbOperation_getValue__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2Ljava_nio_ByteBuffer_2(JNIEnv *, jobject, jobject, jobject)");
+    TRACE("jobject Java_com_mysql_ndbjtie_ndbapi_NdbOperation_getValue__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2Ljava_nio_ByteBuffer_2(JNIEnv *, jobject, jobject, jobject)");
 #ifndef NDBJTIE_USE_WRAPPED_VARIANT_FOR_FUNCTION
     return gcall_mfr< ttrait_c_m_n_n_NdbOperation_t, ttrait_c_m_n_n_NdbRecAttr_p, ttrait_c_m_n_n_NdbDictionary_Column_cp, ttrait_char_1p_bb, &NdbOperation::getValue >(env, obj, p0, p1);
 #else
@@ -7896,9 +7896,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbOperati
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/ColumnConst;)V
  */
 JNIEXPORT void JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024GetValueSpec_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2(JNIEnv * env, jobject obj, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024GetValueSpec_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2(JNIEnv * env, jobject obj, jobject p0)
 {
-    TRACE("void Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024GetValueSpec_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2(JNIEnv *, jobject, jobject)");
+    TRACE("void Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024GetValueSpec_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2(JNIEnv *, jobject, jobject)");
     gset< ttrait_c_m_n_n_NdbOperation_GetValueSpec_t, ttrait_c_m_n_n_NdbDictionary_Column_cp, &NdbOperation::GetValueSpec::column >(env, obj, p0);
 }
 
@@ -8120,9 +8120,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbOperati
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbOperation/GetValueSpecArray;)V
  */
 JNIEXPORT void JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024OperationOptions_extraGetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_GetValueSpecArray_2(JNIEnv * env, jobject obj, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024OperationOptions_extraGetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_00024GetValueSpecArray_2(JNIEnv * env, jobject obj, jobject p0)
 {
-    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024OperationOptions_extraGetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_GetValueSpecArray_2(JNIEnv *, jobject, jobject)");
+    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024OperationOptions_extraGetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_00024GetValueSpecArray_2(JNIEnv *, jobject, jobject)");
     gset< ttrait_c_m_n_n_NdbOperation_OperationOptions_t, ttrait_c_m_n_n_NdbOperation_GetValueSpecArray_p, &NdbOperation::OperationOptions::extraGetValues >(env, obj, p0);
 }
 
@@ -8144,9 +8144,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbOperati
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbOperation/SetValueSpecConstArray;)V
  */
 JNIEXPORT void JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024OperationOptions_extraSetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_SetValueSpecConstArray_2(JNIEnv * env, jobject obj, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024OperationOptions_extraSetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_00024SetValueSpecConstArray_2(JNIEnv * env, jobject obj, jobject p0)
 {
-    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024OperationOptions_extraSetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_SetValueSpecConstArray_2(JNIEnv *, jobject, jobject)");
+    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024OperationOptions_extraSetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_00024SetValueSpecConstArray_2(JNIEnv *, jobject, jobject)");
     gset< ttrait_c_m_n_n_NdbOperation_OperationOptions_t, ttrait_c_m_n_n_NdbOperation_SetValueSpecArray_cp, &NdbOperation::OperationOptions::extraSetValues >(env, obj, p0);
 }
 
@@ -8244,9 +8244,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbOperati
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbDictionary/ColumnConst;)V
  */
 JNIEXPORT void JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024SetValueSpec_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2(JNIEnv * env, jobject obj, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024SetValueSpec_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2(JNIEnv * env, jobject obj, jobject p0)
 {
-    TRACE("void Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024SetValueSpec_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_ColumnConst_2(JNIEnv *, jobject, jobject)");
+    TRACE("void Java_com_mysql_ndbjtie_ndbapi_NdbOperation_00024SetValueSpec_column__Lcom_mysql_ndbjtie_ndbapi_NdbDictionary_00024ColumnConst_2(JNIEnv *, jobject, jobject)");
     gset< ttrait_c_m_n_n_NdbOperation_SetValueSpec_t, ttrait_c_m_n_n_NdbDictionary_Column_cp, &NdbOperation::SetValueSpec::column >(env, obj, p0);
 }
 
@@ -9392,9 +9392,9 @@ Java_com_mysql_ndbjtie_ndbapi_NdbScanOpe
  * Signature: (Lcom/mysql/ndbjtie/ndbapi/NdbOperation/GetValueSpecArray;)V
  */
 JNIEXPORT void JNICALL
-Java_com_mysql_ndbjtie_ndbapi_NdbScanOperation_00024ScanOptions_extraGetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_GetValueSpecArray_2(JNIEnv * env, jobject obj, jobject p0)
+Java_com_mysql_ndbjtie_ndbapi_NdbScanOperation_00024ScanOptions_extraGetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_00024GetValueSpecArray_2(JNIEnv * env, jobject obj, jobject p0)
 {
-    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbScanOperation_00024ScanOptions_extraGetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_GetValueSpecArray_2(JNIEnv *, jobject, jobject)");
+    TRACE("Java_com_mysql_ndbjtie_ndbapi_NdbScanOperation_00024ScanOptions_extraGetValues__Lcom_mysql_ndbjtie_ndbapi_NdbOperation_00024GetValueSpecArray_2(JNIEnv *, jobject, jobject)");
     gset< ttrait_c_m_n_n_NdbScanOperation_ScanOptions_t, ttrait_c_m_n_n_NdbOperation_GetValueSpecArray_p, &NdbScanOperation::ScanOptions::extraGetValues >(env, obj, p0);
 }
 

=== modified file 'storage/ndb/test/ndbapi/testNodeRestart.cpp'
--- a/storage/ndb/test/ndbapi/testNodeRestart.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/test/ndbapi/testNodeRestart.cpp	revid:mikael.ronstrom@stripped
@@ -2594,6 +2594,9 @@ runBug34216(NDBT_Context* ctx, NDBT_Step
 
   while(i<loops && result != NDBT_FAILED && !ctx->isTestStopped())
   {
+    if (i > 0 && ctx->closeToTimeout(100 / loops))
+      break;
+
     int id = lastId % restarter.getNumDbNodes();
     int nodeId = restarter.getDbNodeId(id);
     int err = 5048 + ((i+offset) % 2);

=== modified file 'storage/ndb/test/ndbapi/testSystemRestart.cpp'
--- a/storage/ndb/test/ndbapi/testSystemRestart.cpp	revid:mikael@dator9-20120102181531-rjua7sw123o8r4t9
+++ b/storage/ndb/test/ndbapi/testSystemRestart.cpp	revid:mikael.ronstrom@stripped
@@ -1405,6 +1405,8 @@ int runSR_DD_1(NDBT_Context* ctx, NDBT_S
   HugoTransactions hugoTrans(*ctx->getTab());
   while(i<=loops && result != NDBT_FAILED)
   {
+    if (i > 0 && ctx->closeToTimeout(30))
+      break;
 
     if (lcploop)
     {
@@ -1508,6 +1510,8 @@ int runSR_DD_2(NDBT_Context* ctx, NDBT_S
   HugoTransactions hugoTrans(*ctx->getTab());
   while(i<=loops && result != NDBT_FAILED)
   {
+    if (i > 0 && ctx->closeToTimeout(30))
+      break;
 
     if (lcploop)
     {
@@ -1612,6 +1616,8 @@ int runSR_DD_3(NDBT_Context* ctx, NDBT_S
   HugoTransactions hugoTrans(*ctx->getTab());
   while(i<=loops && result != NDBT_FAILED)
   {
+    if (i > 0 && ctx->closeToTimeout(30))
+      break;
 
     if (lcploop)
     {
@@ -1853,6 +1859,9 @@ runTO(NDBT_Context* ctx, NDBT_Step* step
   Uint32 i = 0;
   while(i<=loops && result != NDBT_FAILED)
   {
+    if (i > 0 && ctx->closeToTimeout(35))
+      break;
+
     CHECK(res.dumpStateAllNodes(val, 1) == 0);
 
     int filter[] = { 15, NDB_MGM_EVENT_CATEGORY_CHECKPOINT, 0 };

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.5-cluster-7.2 branch (mikael.ronstrom:3685 to 3690) Mikael Ronstrom9 Jan