Commit 7e52383d authored by unknown's avatar unknown
Browse files

bug #18518 (embedded server crashes starting)

The problem is that now server works properly only with the 
row-based replication


config/ac-macros/ha_ndbcluster.m4:
  WITH_NDB_BINLOG instead of HAVE_NDB_BINLOG in config.h
config/ac-macros/replication.m4:
  WITH_ROW_BASED_REPLICATION instead of HAVE_ROW_BASED_REPLICATION in
  config.h
sql/log.cc:
  some #ifdef HAVE_ROW_BASED_REPLICATION added
sql/mysqld.cc:
  some #ifdef HAVE_ROW_BASED_REPLICATION added
sql/set_var.cc:
  some #ifdef HAVE_ROW_BASED_REPLICATION added
sql/sql_base.cc:
  some #ifdef HAVE_ROW_BASED_REPLICATION added
sql/sql_class.cc:
  some #ifdef HAVE_ROW_BASED_REPLICATION added
sql/sql_class.h:
  some #ifdef HAVE_ROW_BASED_REPLICATION added
sql/sql_parse.cc:
  some #ifdef HAVE_ROW_BASED_REPLICATION added
parent c2e4ef09
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -238,7 +238,7 @@ AC_DEFUN([MYSQL_SETUP_NDBCLUSTER], [

  if test X"$have_ndb_binlog" = Xyes
  then
    AC_DEFINE([HAVE_NDB_BINLOG], [1],
    AC_DEFINE([WITH_NDB_BINLOG], [1],
              [Including Ndb Cluster Binlog])
    AC_MSG_RESULT([Including Ndb Cluster Binlog])
  else
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ AC_DEFUN([MYSQL_CHECK_REPLICATION], [

  case "$row_based" in
  yes )
    AC_DEFINE([HAVE_ROW_BASED_REPLICATION], [1], [Define to have row-based replication])
    AC_DEFINE([WITH_ROW_BASED_REPLICATION], [1], [Define to have row-based replication])
    AC_MSG_RESULT([-- including row-based replication])
    [have_row_based=yes]
    ;;
+10 −0
Original line number Diff line number Diff line
@@ -1071,12 +1071,16 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data, Log_event *end_ev)
      were, we would have to ensure that we're not ending a statement
      inside a stored function.
     */
#ifdef HAVE_ROW_BASED_REPLICATION
    thd->binlog_flush_pending_rows_event(true);
#endif
    error= mysql_bin_log.write(thd, trans_log, end_ev);
  }
  else
  {
#ifdef HAVE_ROW_BASED_REPLICATION
    thd->binlog_delete_pending_rows_event();
#endif
  }

  /*
@@ -2600,6 +2604,7 @@ bool MYSQL_LOG::is_query_in_union(THD *thd, query_id_t query_id_param)
}


#ifdef HAVE_ROW_BASED_REPLICATION
/*
  These functions are placed in this file since they need access to
  binlog_hton, which has internal linkage.
@@ -2776,6 +2781,7 @@ int MYSQL_LOG::flush_and_set_pending_rows_event(THD *thd, Rows_log_event* event)

  DBUG_RETURN(error);
}
#endif /*HAVE_ROW_BASED_REPLICATION*/

/*
  Write an event to the binary log
@@ -2810,7 +2816,9 @@ bool MYSQL_LOG::write(Log_event *event_info)
  */
  bool const end_stmt=
    thd->prelocked_mode && thd->lex->requires_prelocking();
#ifdef HAVE_ROW_BASED_REPLICATION
  thd->binlog_flush_pending_rows_event(end_stmt);
#endif /*HAVE_ROW_BASED_REPLICATION*/

  pthread_mutex_lock(&LOCK_log);

@@ -2852,8 +2860,10 @@ bool MYSQL_LOG::write(Log_event *event_info)
    */
    if (opt_using_transactions && thd)
    {
#ifdef HAVE_ROW_BASED_REPLICATION
      if (thd->binlog_setup_trx_data())
        goto err;
#endif /*HAVE_ROW_BASED_REPLICATION*/

      binlog_trx_data *const trx_data=
        (binlog_trx_data*) thd->ha_data[binlog_hton.slot];
+1 −1
Original line number Diff line number Diff line
@@ -3180,7 +3180,7 @@ with --log-bin instead.");
  }
  if (global_system_variables.binlog_format == BINLOG_FORMAT_UNSPEC)
  {
#ifdef HAVE_NDB_BINLOG
#if defined(HAVE_NDB_BINLOG) && defined(HAVE_ROW_BASED_REPLICATION)
    if (opt_bin_log && have_ndbcluster == SHOW_OPTION_YES)
      global_system_variables.binlog_format= BINLOG_FORMAT_ROW;
    else
+4 −0
Original line number Diff line number Diff line
@@ -1262,12 +1262,14 @@ bool sys_var_thd_binlog_format::is_readonly() const
    And this test will also prevent switching from RBR to RBR (a no-op which
    should not happen too often).
  */
#ifdef HAVE_ROW_BASED_REPLICATION
  if ((thd->variables.binlog_format == BINLOG_FORMAT_ROW) &&
      thd->temporary_tables)
  {
    my_error(ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR, MYF(0));
    return 1;
  }
#endif /*HAVE_ROW_BASED_REPLICATION*/
  /*
    if in a stored function, it's too late to change mode
  */
@@ -1291,7 +1293,9 @@ bool sys_var_thd_binlog_format::is_readonly() const

void fix_binlog_format_after_update(THD *thd, enum_var_type type)
{
#ifdef HAVE_ROW_BASED_REPLICATION
  thd->reset_current_stmt_binlog_row_based();
#endif /*HAVE_ROW_BASED_REPLICATION*/
}

static void fix_max_binlog_size(THD *thd, enum_var_type type)
Loading