List:Commits« Previous MessageNext Message »
From:Andrei Elkin Date:May 30 2007 10:22am
Subject:bk commit into 5.1 tree (aelkin:1.2522)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of elkin. When elkin does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-05-30 11:22:07+03:00, aelkin@stripped
+1 -0
  Merge
dsl-hkibras1-ff5dc300-70.dhcp.inet.fi:/home/elkin/MySQL/TEAM/FIXES/5.1/bug27044_slave_dup2unique
  into  dsl-hkibras1-ff5dc300-70.dhcp.inet.fi:/tmp/merge_5.0
  MERGE: 1.2409.112.1

  sql/log_event.cc@stripped, 2007-05-30 11:22:03+03:00,
aelkin@stripped +0 -0
    Auto merged
    MERGE: 1.266.8.1

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	aelkin
# Host:	dsl-hkibras1-ff5dc300-70.dhcp.inet.fi
# Root:	/tmp/merge_5.0/RESYNC

--- 1.279/sql/log_event.cc	2007-05-28 23:15:38 +03:00
+++ 1.280/sql/log_event.cc	2007-05-30 11:22:03 +03:00
@@ -6756,10 +6756,23 @@ int Write_rows_log_event::do_before_row_
     lex->duplicates flag.
   */
   thd->lex->sql_command= SQLCOM_REPLACE;
-
-  table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);  // Needed for ndbcluster
-  table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);  // Needed for ndbcluster
-  table->file->extra(HA_EXTRA_IGNORE_NO_KEY);   // Needed for ndbcluster
+  /* 
+     Do not raise the error flag in case of hitting to an unique attribute
+  */
+  table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
+  /* 
+     NDB specific: update from ndb master wrapped as Write_rows
+  */
+  /*
+    so that the event should be applied to replace slave's row
+  */
+  table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
+  /* 
+     NDB specific: if update from ndb master wrapped as Write_rows
+     does not find the row it's assumed idempotent binlog applying
+     is taking place; don't raise the error.
+  */
+  table->file->extra(HA_EXTRA_IGNORE_NO_KEY);
   /*
     TODO: the cluster team (Tomas?) says that it's better if the engine knows
     how many rows are going to be inserted, then it can allocate needed memory
@@ -6787,9 +6800,20 @@ int Write_rows_log_event::do_before_row_
 
 int Write_rows_log_event::do_after_row_operations(TABLE *table, int error)
 {
-  if (error == 0)
-    error= table->file->ha_end_bulk_insert();
-  return error;
+  int local_error= 0;
+  table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
+  table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
+  /*
+    reseting the extra with 
+    table->file->extra(HA_EXTRA_NO_IGNORE_NO_KEY); 
+    fires bug#27077
+    todo: explain or fix
+  */
+  if (local_error= table->file->ha_end_bulk_insert())
+  {
+    table->file->print_error(local_error, MYF(0));
+  }
+  return error? error : local_error;
 }
 
 int Write_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO const *rli,
Thread
bk commit into 5.1 tree (aelkin:1.2522)Andrei Elkin30 May