List:Commits« Previous MessageNext Message »
From:jonas oreland Date:December 1 2010 12:07pm
Subject:bzr push into mysql-5.1-telco-7.0 branch (jonas:4035 to 4037)
View as plain text  
 4037 jonas oreland	2010-12-01 [merge]
      ndb - merge 63 to 70

    modified:
      mysql-test/suite/ndb/r/ndb_update_no_read.result
      mysql-test/suite/ndb/t/ndb_update_no_read.test
      sql/ha_ndbcluster.cc
 4036 jonas oreland	2010-12-01 [merge]
      ndb - merge 63 to 70

    modified:
      sql/ha_ndbcluster.cc
 4035 Jonas Oreland	2010-11-30
      ndb - remove compiler warnings in print_file.cpp

    modified:
      storage/ndb/src/kernel/blocks/print_file.cpp
=== modified file 'mysql-test/suite/ndb/r/ndb_update_no_read.result'
--- a/mysql-test/suite/ndb/r/ndb_update_no_read.result	2008-12-05 09:46:39 +0000
+++ b/mysql-test/suite/ndb/r/ndb_update_no_read.result	2010-12-01 12:04:27 +0000
@@ -400,3 +400,81 @@ affected rows: 1
 affected rows: 1
 drop table t1;
 affected rows: 0
+create table t1
+(a int not null primary key auto_increment, b int, c varchar(256))
+engine = ndb;
+affected rows: 0
+insert into t1(b,c) values (1,'this is a test'),
+(2,'this is a test'),(3,'this is a test'),
+(4,'this is a test'),(5,'this is a test'),(6,'this is a test'),
+(7,'this is a test'),(8,'this is a test'),(9,'this is a test');
+affected rows: 9
+info: Records: 9  Duplicates: 0  Warnings: 0
+insert into t1(b,c) select b,c from t1;
+affected rows: 9
+info: Records: 9  Duplicates: 0  Warnings: 0
+insert into t1(b,c) select b,c from t1;
+affected rows: 18
+info: Records: 18  Duplicates: 0  Warnings: 0
+insert into t1(b,c) select b,c from t1;
+affected rows: 36
+info: Records: 36  Duplicates: 0  Warnings: 0
+insert into t1(b,c) select b,c from t1;
+affected rows: 72
+info: Records: 72  Duplicates: 0  Warnings: 0
+insert into t1(b,c) select b,c from t1;
+affected rows: 144
+info: Records: 144  Duplicates: 0  Warnings: 0
+insert into t1(b,c) select b,c from t1;
+affected rows: 288
+info: Records: 288  Duplicates: 0  Warnings: 0
+insert into t1(b,c) select b,c from t1;
+affected rows: 576
+info: Records: 576  Duplicates: 0  Warnings: 0
+insert into t1(b,c) select b,c from t1;
+affected rows: 1152
+info: Records: 1152  Duplicates: 0  Warnings: 0
+insert into t1(b,c) select b,c from t1;
+affected rows: 2304
+info: Records: 2304  Duplicates: 0  Warnings: 0
+analyze table t1;
+Table	Op	Msg_type	Msg_text
+test.t1	analyze	status	OK
+affected rows: 1
+select count(*) from t1 where a in (...)
+count(*)
+1000
+affected rows: 1
+@ndb_execute_count:=VARIABLE_VALUE-@ndb_init_execute_count
+5
+affected rows: 1
+update t1 set c = 'kalle' where a in (...)
+affected rows: 1000
+info: Rows matched: 1000  Changed: 1000  Warnings: 0
+@ndb_execute_count:=VARIABLE_VALUE-@ndb_init_execute_count
+9
+affected rows: 1
+delete from t1 where a in (...)
+affected rows: 1000
+@ndb_execute_count:=VARIABLE_VALUE-@ndb_init_execute_count
+3
+affected rows: 1
+delete from t1 where a in (...)
+affected rows: 0
+@ndb_execute_count:=VARIABLE_VALUE-@ndb_init_execute_count
+3
+affected rows: 1
+update t1 set c = 'kalle' where a in (...)
+affected rows: 0
+info: Rows matched: 0  Changed: 0  Warnings: 0
+@ndb_execute_count:=VARIABLE_VALUE-@ndb_init_execute_count
+9
+affected rows: 1
+update t1 set c = 'kalle' where a in (...)
+affected rows: 0
+info: Rows matched: 0  Changed: 0  Warnings: 0
+@ndb_execute_count:=VARIABLE_VALUE-@ndb_init_execute_count
+9
+affected rows: 1
+drop table t1;
+affected rows: 0

=== modified file 'mysql-test/suite/ndb/t/ndb_update_no_read.test'
--- a/mysql-test/suite/ndb/t/ndb_update_no_read.test	2010-09-22 11:36:01 +0000
+++ b/mysql-test/suite/ndb/t/ndb_update_no_read.test	2010-12-01 12:06:43 +0000
@@ -347,3 +347,131 @@ show warnings; # Workaround to bug#39663
 --enable_warnings # Workaround to bug#39663
 
 drop table t1;
+
+# bug#58040
+
+create table t1
+(a int not null primary key auto_increment, b int, c varchar(256))
+engine = ndb;
+
+# insert some rows...
+insert into t1(b,c) values (1,'this is a test'),
+(2,'this is a test'),(3,'this is a test'),
+(4,'this is a test'),(5,'this is a test'),(6,'this is a test'),
+(7,'this is a test'),(8,'this is a test'),(9,'this is a test');
+
+insert into t1(b,c) select b,c from t1;
+insert into t1(b,c) select b,c from t1;
+insert into t1(b,c) select b,c from t1;
+insert into t1(b,c) select b,c from t1;
+insert into t1(b,c) select b,c from t1;
+insert into t1(b,c) select b,c from t1;
+insert into t1(b,c) select b,c from t1;
+insert into t1(b,c) select b,c from t1;
+insert into t1(b,c) select b,c from t1;
+analyze table t1;
+
+# looong in list
+let $list =
+(3220,3371,709,363,603,2232,1738,2079,585,1798,2786,2495,1631,2000,59,2137,
+1703,564,1102,868,3934,427,694,2908,2324,2542,1779,1133,1508,3153,2701,2966,
+3687,1551,3395,3157,3914,1096,2755,1433,3096,16,3592,521,1977,1886,441,3285,
+3257,2040,911,403,736,3720,496,1244,3221,1386,2988,1442,2271,3050,148,2355,
+1751,3349,3512,731,3320,244,2462,1141,1410,1815,4007,1140,1236,2824,1323,1843,
+422,3929,182,3064,3603,2798,68,2251,1255,2417,3436,67,1458,1260,1450,1740,3493,
+2043,965,4069,2762,3876,2945,2741,1194,3593,2135,4046,659,1263,2416,2539,921,
+698,1396,2152,2130,3411,1013,2682,703,240,1933,3581,3798,1926,2381,717,361,
+2697,221,3726,2124,1317,89,1413,312,2279,2556,1920,3282,3850,893,2012,1463,
+1032,4044,3448,2116,1743,3761,3145,1760,3351,3462,599,2164,4050,2178,4014,519,
+2898,610,86,2138,1547,3543,3098,3599,376,2854,2408,2506,1846,2732,950,700,2829,
+1724,3989,1644,1700,2706,70,2478,2136,854,1175,3678,2975,1680,471,2508,3069,
+289,1758,2768,2398,131,550,948,3625,1476,2760,1974,648,2664,3706,1497,2111,
+2784,801,1931,3913,1539,205,3686,1253,2101,1229,1466,909,566,2757,1478,2483,
+192,1343,1103,259,3243,2393,547,569,2074,2750,2826,3756,2934,1788,495,410,2797,
+1104,883,2899,3083,337,822,829,2698,2723,2285,3155,328,3111,1663,3652,3174,
+2429,1298,1720,3757,156,1684,2125,169,58,3937,773,2433,2867,3323,650,4087,1775,
+2822,3328,3037,1907,346,3217,1531,1456,3595,3218,2678,762,10,210,2427,2341,75,
+1506,2552,2384,2196,2191,2972,1113,4032,378,2953,1389,1916,3253,1742,42,3550,
+2835,885,3099,555,393,3135,44,3400,251,2896,3640,3712,282,1995,1187,491,3433,
+3968,3176,1459,1126,1088,3534,1634,114,3843,3013,97,2358,1872,1814,1180,3740,
+601,3354,216,677,4067,484,3621,3891,2981,2708,953,1652,2197,1426,1218,3735,
+2269,1300,2523,3627,174,3529,1192,2369,939,3024,1542,3651,1145,3684,1994,2187,
+2498,1546,2418,371,2368,1686,2816,2231,862,3513,3741,1267,389,1615,2096,1636,
+739,3800,2168,1537,942,538,954,1234,3112,1676,2165,2019,3364,1613,4056,2371,
+3079,2484,3417,3580,17,3980,945,1470,2609,2864,2791,3812,1125,832,1861,2158,
+1014,92,2470,1604,1991,903,805,2046,320,1906,1022,2614,1266,2335,3506,3736,
+3168,26,2769,2346,2444,1445,479,3965,819,3010,1029,3318,1687,290,1407,3920,379,
+3885,2892,3377,1210,2262,1580,107,3517,3302,2334,1027,3166,2217,681,2466,928,
+3791,2612,3009,372,2790,2294,2713,3856,2862,2266,2845,2480,1876,3394,1835,735,
+1293,1969,3248,237,419,3352,740,2426,3638,2319,1729,3303,2189,283,1839,1905,
+1165,3971,2696,3258,2221,665,1559,1734,3416,3835,2894,535,3911,611,1453,3649,
+837,2085,1060,3646,4023,2042,1939,1226,2601,2657,967,4059,2035,3556,1529,3845,
+170,3842,1928,3407,150,271,936,1952,2543,446,662,804,1349,654,470,3713,3232,
+2600,2955,2881,1929,2747,2549,1291,2509,2773,3316,3461,2004,2270,674,3334,1947,
+1067,4072,189,2619,122,593,3558,3236,2082,1504,1182,1867,43,2486,3028,4033,448,
+1150,4013,1148,1691,3234,459,3807,2195,4063,869,3962,582,660,600,3925,2166,
+3179,3846,1620,476,2122,2949,2024,3606,2027,3468,1540,1786,1364,1593,1802,411,
+1940,3004,2802,3598,2530,2613,2338,3953,128,1951,4061,3907,2568,2844,2962,2683,
+1471,3554,417,767,1526,1480,118,658,209,2656,3295,2123,3117,465,3005,3246,336,
+604,2442,1283,2579,2795,3484,1997,463,2877,84,3081,2318,3336,818,3583,3245,
+3613,2897,3921,1820,2819,2306,3516,1763,2973,3019,3380,723,19,3444,3795,3065,
+1692,1297,1289,3707,3080,1824,1612,2617,3014,621,3988,2842,3813,2204,2298,3233,
+2738,2548,2914,902,3200,1061,2081,607,3392,3895,2190,789,2865,943,1595,976,
+2863,1666,3496,1896,3568,3249,2200,933,1717,1857,592,467,2770,2663,1560,575,
+605,1196,3238,2558,2375,2859,2667,3106,443,1702,2382,284,4017,307,2492,4002,
+931,1004,397,619,1052,1003,3797,2694,177,1017,3519,1237,1733,3734,2407,109,
+2246,1600,1981,3437,620,1058,530,2112,2449,1381,2403,1198,1062,668,1512,69,
+1822,2283,401,1135,3110,3214,670,2645,3586,3924,4078,4090,2083,1566,1563,2516,
+675,1491,774,1967,3973,3609,872,2893,2535,1123,2623,2562,3793,1503,1968,113,
+2811,3930,1908,447,2419,1117,2471,1051,787,695,1303,146,3633,367,3132,602,1862,
+2127,1306,1285,3564,426,3224,273,1385,2807,3701,4041,865,2690,1697,3960,2684,
+4079,1772,3171,3716,2120,3918,2922,2497,2154,630,3879,3688,2055,2316,155,1220,
+3927,1425,2413,1791,3237,206,3384,1371,3819,4089,94,1404,2343,4031,1144,3034,
+2500,2846,3042,2553,1380,166,3487,646,963,3772,3617,1474,3610,1146,386,2592,
+3421,1887,3589,141,3033,3326,3509,1475,1320,533,2275,1932,3732,2474,1980,49,
+1511,2671,3278,1486,1080,1610,3575,3904,2227,3669,784,1736,3724,729,3818,3825,
+3908,3031,3109,704,685,2448,710,359,3235,1583,2376,2810,1619,64,2635,3032,1412,
+1159,3792,1890,2885,55,1571,3826,744,80,1683,348,3097,1754,2402,2310,2072,831,
+3053,2882,2599,127,2118,3748,2512,844,3376,490,813,2011,2099,3626,1350,3993,
+2207,3553,350,2805,2276,2235,2803,159,1039,2075,576,614,1899,3348,649,218,637,
+2942,270,3422,3775,3873,3239,989,2463,783,3312);
+
+--echo select count(*) from t1 where a in (...)
+--source suite/ndb/include/ndb_init_execute_count.inc
+--disable_query_log
+eval select count(*) from t1 where a in $list;
+--source suite/ndb/include/ndb_execute_count.inc
+
+--echo update t1 set c = 'kalle' where a in (...)
+--source suite/ndb/include/ndb_init_execute_count.inc
+--disable_query_log
+eval update t1 set c = 'kalle' where a in $list;
+--source suite/ndb/include/ndb_execute_count.inc
+
+--echo delete from t1 where a in (...)
+--source suite/ndb/include/ndb_init_execute_count.inc
+--disable_query_log
+eval delete from t1 where a in $list;
+--source suite/ndb/include/ndb_execute_count.inc
+
+--echo delete from t1 where a in (...)
+--source suite/ndb/include/ndb_init_execute_count.inc
+--disable_query_log
+eval delete from t1 where a in $list;
+--source suite/ndb/include/ndb_execute_count.inc
+
+--echo update t1 set c = 'kalle' where a in (...)
+--source suite/ndb/include/ndb_init_execute_count.inc
+--disable_query_log
+eval update t1 set c = 'kalle' where a in $list;
+--source suite/ndb/include/ndb_execute_count.inc
+
+--echo update t1 set c = 'kalle' where a in (...)
+--source suite/ndb/include/ndb_init_execute_count.inc
+--disable_query_log
+eval update t1 set c = 'kalle' where a in $list;
+--source suite/ndb/include/ndb_execute_count.inc
+
+--enable_query_log
+
+drop table t1;

=== modified file 'sql/ha_ndbcluster.cc'
--- a/sql/ha_ndbcluster.cc	2010-11-30 10:35:37 +0000
+++ b/sql/ha_ndbcluster.cc	2010-12-01 12:06:43 +0000
@@ -554,10 +554,18 @@ static int write_conflict_row(NDB_SHARE 
 inline int
 check_completed_operations_pre_commit(Thd_ndb *thd_ndb, NdbTransaction *trans,
                                       const NdbOperation *first,
+                                      const NdbOperation *last,
                                       uint *ignore_count)
 {
   uint ignores= 0;
   DBUG_ENTER("check_completed_operations_pre_commit");
+
+  if (unlikely(first == 0))
+  {
+    assert(last == 0);
+    DBUG_RETURN(0);
+  }
+
   /*
     Check that all errors are "accepted" errors
     or exceptions to report
@@ -565,7 +573,7 @@ check_completed_operations_pre_commit(Th
 #ifdef HAVE_NDB_BINLOG
   uint conflict_rows_written= 0;
 #endif
-  while (first)
+  while (true)
   {
     const NdbError &err= first->getNdbError();
     if (err.classification != NdbError::NoError
@@ -661,6 +669,10 @@ check_completed_operations_pre_commit(Th
     }
     if (err.classification != NdbError::NoError)
       ignores++;
+
+    if (first == last)
+      break;
+
     first= trans->getNextCompletedOperation(first);
   }
   if (ignore_count)
@@ -687,14 +699,22 @@ check_completed_operations_pre_commit(Th
 inline int
 check_completed_operations(Thd_ndb *thd_ndb, NdbTransaction *trans,
                            const NdbOperation *first,
+                           const NdbOperation *last,
                            uint *ignore_count)
 {
   uint ignores= 0;
   DBUG_ENTER("check_completed_operations");
+
+  if (unlikely(first == 0))
+  {
+    assert(last == 0);
+    DBUG_RETURN(0);
+  }
+
   /*
     Check that all errors are "accepted" errors
   */
-  while (first)
+  while (true)
   {
     const NdbError &err= first->getNdbError();
     if (err.classification != NdbError::NoError &&
@@ -708,6 +728,10 @@ check_completed_operations(Thd_ndb *thd_
     }
     if (err.classification != NdbError::NoError)
       ignores++;
+
+    if (first == last)
+      break;
+
     first= trans->getNextCompletedOperation(first);
   }
   if (ignore_count)
@@ -740,20 +764,21 @@ int execute_no_commit(Thd_ndb *thd_ndb, 
   DBUG_ENTER("execute_no_commit");
   ha_ndbcluster::release_completed_operations(trans);
   const NdbOperation *first= trans->getFirstDefinedOperation();
+  const NdbOperation *last= trans->getLastDefinedOperation();
   thd_ndb->m_execute_count++;
+  thd_ndb->m_unsent_bytes= 0;
   DBUG_PRINT("info", ("execute_count: %u", thd_ndb->m_execute_count));
   if (trans->execute(NdbTransaction::NoCommit,
                      NdbOperation::AO_IgnoreError,
                      thd_ndb->m_force_send))
   {
-    thd_ndb->m_unsent_bytes= 0;
     DBUG_RETURN(-1);
   }
-  thd_ndb->m_unsent_bytes= 0;
   if (!ignore_no_key || trans->getNdbError().code == 0)
     DBUG_RETURN(trans->getNdbError().code);
 
-  DBUG_RETURN(check_completed_operations_pre_commit(thd_ndb, trans, first,
+  DBUG_RETURN(check_completed_operations_pre_commit(thd_ndb, trans,
+                                                    first, last,
                                                     ignore_count));
 }
 
@@ -775,25 +800,25 @@ int execute_commit(Thd_ndb *thd_ndb, Ndb
     ao= NdbOperation::AbortOnError;
   }
   const NdbOperation *first= trans->getFirstDefinedOperation();
+  const NdbOperation *last= trans->getLastDefinedOperation();
   thd_ndb->m_execute_count++;
+  thd_ndb->m_conflict_fn_usage_count= 0;
+  thd_ndb->m_unsent_bytes= 0;
   DBUG_PRINT("info", ("execute_count: %u", thd_ndb->m_execute_count));
   if (trans->execute(NdbTransaction::Commit, ao, force_send))
   {
     thd_ndb->m_max_violation_count= 0;
     thd_ndb->m_old_violation_count= 0;
-    thd_ndb->m_conflict_fn_usage_count= 0;
-    thd_ndb->m_unsent_bytes= 0;
     DBUG_RETURN(-1);
   }
   g_ndb_status_conflict_fn_max+= thd_ndb->m_max_violation_count;
   g_ndb_status_conflict_fn_old+= thd_ndb->m_old_violation_count;
   thd_ndb->m_max_violation_count= 0;
   thd_ndb->m_old_violation_count= 0;
-  thd_ndb->m_conflict_fn_usage_count= 0;
-  thd_ndb->m_unsent_bytes= 0;
   if (!ignore_error || trans->getNdbError().code == 0)
     DBUG_RETURN(trans->getNdbError().code);
-  DBUG_RETURN(check_completed_operations(thd_ndb, trans, first, ignore_count));
+  DBUG_RETURN(check_completed_operations(thd_ndb, trans, first, last,
+                                         ignore_count));
 }
 
 inline
@@ -3309,12 +3334,6 @@ int ha_ndbcluster::ordered_index_scan(co
   if (m_active_cursor && (error= close_scan()))
     DBUG_RETURN(error);
 
-  if (m_thd_ndb->m_unsent_bytes)
-  {
-    if ((error = flush_bulk_insert()) != 0)
-      DBUG_RETURN(error);
-  }
-
   const NdbOperation::LockMode lm = get_ndb_lock_mode(m_lock.type);
 
   NdbScanOperation::ScanOptions options;
@@ -3433,12 +3452,6 @@ int ha_ndbcluster::full_table_scan(const
   DBUG_ENTER("full_table_scan");  
   DBUG_PRINT("enter", ("Starting new scan on %s", m_tabname));
 
-  if (m_thd_ndb->m_unsent_bytes)
-  {
-    if ((error = flush_bulk_insert()) != 0)
-      DBUG_RETURN(error);
-  }
-
   if (m_use_partition_pruning && m_user_defined_partitioning)
   {
     part_spec.start_part= 0;
@@ -4419,6 +4432,8 @@ int ha_ndbcluster::exec_bulk_update(uint
       no_uncommitted_rows_execute_failure();
       DBUG_RETURN(ndb_err(m_thd_ndb->trans));
     }
+    assert(m_rows_changed >= ignore_count);
+    assert(m_rows_updated >= ignore_count);
     m_rows_changed-= ignore_count;
     m_rows_updated-= ignore_count;
   }
@@ -4491,7 +4506,8 @@ int ha_ndbcluster::ndb_update_row(const 
                    have_pk &&
                    bitmap_is_overlapping(table->write_set, m_pk_bitmap_p) &&
                    primary_key_cmp(old_data, new_data));
-  bool batch_allowed= is_bulk_update || thd_allow_batch(thd);
+  bool batch_allowed= !m_update_cannot_batch && 
+    (is_bulk_update || thd_allow_batch(thd));
   NdbOperation::SetValueSpec sets[1];
 
   DBUG_ENTER("ndb_update_row");
@@ -4719,9 +4735,14 @@ int ha_ndbcluster::ndb_update_row(const 
   }
   else if (blob_count > 0)
     m_blobs_pending= TRUE;
-  
-  m_rows_changed+= 1 - ignore_count;
-  m_rows_updated+= 1 - ignore_count;
+
+  m_rows_changed++;
+  m_rows_updated++;
+
+  assert(m_rows_changed >= ignore_count);
+  assert(m_rows_updated >= ignore_count);
+  m_rows_changed-= ignore_count;
+  m_rows_updated-= ignore_count;
 
   DBUG_RETURN(0);
 }
@@ -4759,6 +4780,7 @@ int ha_ndbcluster::end_bulk_delete()
       no_uncommitted_rows_execute_failure();
       DBUG_RETURN(ndb_err(m_thd_ndb->trans));
     }
+    assert(m_rows_deleted >= ignore_count);
     m_rows_deleted-= ignore_count;
   }
   m_is_bulk_delete = false;
@@ -4780,7 +4802,9 @@ int ha_ndbcluster::ndb_delete_row(const 
   const NdbOperation *op;
   uint32 part_id= ~uint32(0);
   int error;
-  bool allow_batch= m_is_bulk_delete || thd_allow_batch(thd);
+  bool allow_batch= !m_delete_cannot_batch &&
+    (m_is_bulk_delete || thd_allow_batch(thd));
+
   DBUG_ENTER("ndb_delete_row");
   DBUG_ASSERT(trans);
 
@@ -4850,11 +4874,11 @@ int ha_ndbcluster::ndb_delete_row(const 
     thd_ndb->m_unsent_bytes+= 12;
 
     no_uncommitted_rows_update(-1);
+    m_rows_deleted++;
 
     if (!(primary_key_update || m_delete_cannot_batch))
     {
       // If deleting from cursor, NoCommit will be handled in next_result
-      m_rows_deleted++;
       DBUG_RETURN(0);
     }
   }
@@ -4923,6 +4947,7 @@ int ha_ndbcluster::ndb_delete_row(const 
       ERR_RETURN(trans->getNdbError());
 
     no_uncommitted_rows_update(-1);
+    m_rows_deleted++;
 
     /*
       Check if we can batch the delete.
@@ -4950,7 +4975,6 @@ int ha_ndbcluster::ndb_delete_row(const 
 	 !primary_key_update &&
 	 !need_flush)
     {
-      m_rows_deleted++;
       DBUG_RETURN(0);
     }
   }
@@ -4965,7 +4989,10 @@ int ha_ndbcluster::ndb_delete_row(const 
     DBUG_RETURN(ndb_err(trans));
   }
   if (!primary_key_update)
-    m_rows_deleted+= 1 - ignore_count;
+  {
+    assert(m_rows_deleted >= ignore_count);
+    m_rows_deleted-= ignore_count;
+  }
   DBUG_RETURN(0);
 }
   
@@ -6805,11 +6832,15 @@ int ndbcluster_commit(handlerton *hton, 
         char buff[ STRING_BUFFER_USUAL_SIZE ];
         const char* msg= NULL;
         if (thd->lex->sql_command == SQLCOM_DELETE)
+        {
+          assert(thd_ndb->m_handler->m_rows_deleted >= ignore_count);
           affected= (thd_ndb->m_handler->m_rows_deleted-= ignore_count);
+        }
         else
         {
           DBUG_PRINT("info", ("Update : message was %s", 
                               thd->main_da.message()));
+          assert(thd_ndb->m_handler->m_rows_updated >= ignore_count);
           affected= (thd_ndb->m_handler->m_rows_updated-= ignore_count);
           /* For update in this scenario, we set found and changed to be 
            * the same as affected
@@ -11766,12 +11797,6 @@ ha_ndbcluster::read_multi_range_first(KE
   DBUG_ENTER("ha_ndbcluster::read_multi_range_first");
   DBUG_PRINT("info", ("blob fields=%d read_set=0x%x", table_share->blob_fields, table->read_set->bitmap[0]));
 
-  if (m_thd_ndb->m_unsent_bytes)
-  {
-    if ((error = flush_bulk_insert()) != 0)
-      DBUG_RETURN(error);
-  }
-
   /**
    * blobs and unique hash index with NULL can't be batched currently
    */

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.1-telco-7.0 branch (jonas:4035 to 4037) jonas oreland1 Dec