[Commits] Rev 3231: MDEV-6067: Partitioned table DML sometimes binlogged without XID event in http://bazaar.launchpad.net/~maria-captains/maria/5.2

knielsen at knielsen-hq.org knielsen at knielsen-hq.org
Fri Apr 11 09:39:49 EEST 2014


At http://bazaar.launchpad.net/~maria-captains/maria/5.2

------------------------------------------------------------
revno: 3231
revision-id: knielsen at knielsen-hq.org-20140411063948-8qs97uq8vig06i0s
parent: sergii at pisem.net-20140316125944-vcz27criv3mboxo1
committer: knielsen at knielsen-hq.org
branch nick: mariadb-5.2
timestamp: Fri 2014-04-11 08:39:48 +0200
message:
  MDEV-6067: Partitioned table DML sometimes binlogged without XID event
  
  Revert the old patch revid:monty at askmonty.org-20100325133339-7mkel6valai0b4lb
  
  This patch caused the InnoDB part of the transaction to not be marked
  read-write in some cases, which messes up XA commit (and likely other
  stuff as well).
=== modified file 'sql/handler.cc'
--- a/sql/handler.cc	2014-03-16 12:59:44 +0000
+++ b/sql/handler.cc	2014-04-11 06:39:48 +0000
@@ -3245,14 +3245,11 @@ int handler::ha_check(THD *thd, HA_CHECK
   if it is started.
 */
 
+inline
 void
-handler::mark_trx_read_write_part2()
+handler::mark_trx_read_write()
 {
   Ha_trx_info *ha_info= &ha_thd()->ha_data[ht->slot].ha_info[0];
-
-  /* Don't call this function again for this statement */
-  mark_trx_done= TRUE;
-
   /*
     When a storage engine method is called, the transaction must
     have been started, unless it's a DDL call, for which the

=== modified file 'sql/handler.h'
--- a/sql/handler.h	2012-03-28 10:49:07 +0000
+++ b/sql/handler.h	2014-04-11 06:39:48 +0000
@@ -1255,7 +1255,6 @@ class handler :public Sql_alloc
   enum {NONE=0, INDEX, RND} inited;
   bool locked;
   bool implicit_emptied;                /* Can be !=0 only if HEAP */
-  bool mark_trx_done;
   bool cloned;                          /* 1 if this was created with clone */
   const COND *pushed_cond;
   /**
@@ -1300,7 +1299,7 @@ class handler :public Sql_alloc
     ref(0), key_used_on_scan(MAX_KEY), active_index(MAX_KEY),
     ref_length(sizeof(my_off_t)),
     ft_handler(0), inited(NONE),
-    locked(FALSE), implicit_emptied(FALSE), mark_trx_done(FALSE), cloned(0),
+    locked(FALSE), implicit_emptied(FALSE), cloned(0),
     pushed_cond(0), next_insert_id(0), insert_id_for_cur_row(0),
     auto_inc_intervals_count(0)
     {
@@ -1360,13 +1359,6 @@ class handler :public Sql_alloc
   }
   int ha_rnd_init_with_error(bool scan) __attribute__ ((warn_unused_result));
   int ha_reset();
-  /* Tell handler (not storage engine) this is start of a new statement */
-  void ha_start_of_new_statement()
-  {
-    ft_handler= 0;
-    mark_trx_done= FALSE;
-  }
-
   /* this is necessary in many places, e.g. in HANDLER command */
   int ha_index_or_rnd_end()
   {
@@ -1996,12 +1988,8 @@ class handler :public Sql_alloc
 
 private:
   /* Private helpers */
-  void mark_trx_read_write_part2();
-  inline void mark_trx_read_write()
-  {
-    if (!mark_trx_done)
-      mark_trx_read_write_part2();
-  }
+  inline void mark_trx_read_write();
+private:
   inline void increment_statistics(ulong SSV::*offset) const;
   inline void decrement_statistics(ulong SSV::*offset) const;
 

=== modified file 'sql/sql_base.cc'
--- a/sql/sql_base.cc	2014-03-16 12:59:44 +0000
+++ b/sql/sql_base.cc	2014-04-11 06:39:48 +0000
@@ -3029,7 +3029,6 @@ TABLE *open_table(THD *thd, TABLE_LIST *
   table->status=STATUS_NO_RECORD;
   table->insert_values= 0;
   table->fulltext_searched= 0;
-  table->file->ha_start_of_new_statement();
   table->file->ft_handler= 0;
   /*
     Check that there is no reference to a condition from an earlier query



More information about the commits mailing list