Commit 4c798b42 authored by unknown's avatar unknown
Browse files

wl2325 wl2324


mysql-test/include/have_ndb_extra.inc:
  New BitKeeper file ``mysql-test/include/have_ndb_extra.inc''
mysql-test/include/not_ndb.inc:
  New BitKeeper file ``mysql-test/include/not_ndb.inc''
mysql-test/r/have_ndb_extra.require:
  New BitKeeper file ``mysql-test/r/have_ndb_extra.require''
mysql-test/r/ndb_alter_table_row.result:
  New BitKeeper file ``mysql-test/r/ndb_alter_table_row.result''
mysql-test/r/ndb_alter_table_stm.result:
  New BitKeeper file ``mysql-test/r/ndb_alter_table_stm.result''
mysql-test/r/ndb_binlog_basic.result:
  New BitKeeper file ``mysql-test/r/ndb_binlog_basic.result''
mysql-test/r/ndb_binlog_multi.result:
  New BitKeeper file ``mysql-test/r/ndb_binlog_multi.result''
mysql-test/r/ndb_multi_row.result:
  New BitKeeper file ``mysql-test/r/ndb_multi_row.result''
mysql-test/r/not_ndb.require:
  New BitKeeper file ``mysql-test/r/not_ndb.require''
mysql-test/r/rpl_ndb_bank.result:
  New BitKeeper file ``mysql-test/r/rpl_ndb_bank.result''
mysql-test/r/rpl_ndb_basic.result:
  New BitKeeper file ``mysql-test/r/rpl_ndb_basic.result''
mysql-test/r/rpl_ndb_disk.result:
  New BitKeeper file ``mysql-test/r/rpl_ndb_disk.result''
mysql-test/r/rpl_ndb_idempotent.result:
  New BitKeeper file ``mysql-test/r/rpl_ndb_idempotent.result''
mysql-test/r/rpl_ndb_load.result:
  New BitKeeper file ``mysql-test/r/rpl_ndb_load.result''
mysql-test/r/rpl_ndb_multi.result:
  New BitKeeper file ``mysql-test/r/rpl_ndb_multi.result''
mysql-test/r/rpl_ndb_sync.result:
  New BitKeeper file ``mysql-test/r/rpl_ndb_sync.result''
mysql-test/r/rpl_row_basic_7ndb.result:
  New BitKeeper file ``mysql-test/r/rpl_row_basic_7ndb.result''
mysql-test/t/ndb_alter_table_row.test:
  New BitKeeper file ``mysql-test/t/ndb_alter_table_row.test''
mysql-test/t/ndb_alter_table_stm.test:
  New BitKeeper file ``mysql-test/t/ndb_alter_table_stm.test''
mysql-test/t/ndb_binlog_basic.test:
  New BitKeeper file ``mysql-test/t/ndb_binlog_basic.test''
mysql-test/t/ndb_binlog_multi.test:
  New BitKeeper file ``mysql-test/t/ndb_binlog_multi.test''
mysql-test/t/ndb_multi_row.test:
  New BitKeeper file ``mysql-test/t/ndb_multi_row.test''
mysql-test/t/rpl_ndb_bank.test:
  New BitKeeper file ``mysql-test/t/rpl_ndb_bank.test''
mysql-test/t/rpl_ndb_basic.test:
  New BitKeeper file ``mysql-test/t/rpl_ndb_basic.test''
mysql-test/t/rpl_ndb_disk.test:
  New BitKeeper file ``mysql-test/t/rpl_ndb_disk.test''
mysql-test/t/rpl_ndb_idempotent.test:
  New BitKeeper file ``mysql-test/t/rpl_ndb_idempotent.test''
mysql-test/t/rpl_ndb_load.test:
  New BitKeeper file ``mysql-test/t/rpl_ndb_load.test''
mysql-test/t/rpl_ndb_multi.test:
  New BitKeeper file ``mysql-test/t/rpl_ndb_multi.test''
mysql-test/t/rpl_ndb_sync.test:
  New BitKeeper file ``mysql-test/t/rpl_ndb_sync.test''
mysql-test/t/rpl_row_basic_7ndb.test:
  New BitKeeper file ``mysql-test/t/rpl_row_basic_7ndb.test''
sql/ha_ndbcluster_binlog.cc:
  New BitKeeper file ``sql/ha_ndbcluster_binlog.cc''
sql/ha_ndbcluster_binlog.h:
  New BitKeeper file ``sql/ha_ndbcluster_binlog.h''
sql/ha_ndbcluster_tables.h:
  New BitKeeper file ``sql/ha_ndbcluster_tables.h''
sql/rpl_injector.cc:
  New BitKeeper file ``sql/rpl_injector.cc''
sql/rpl_injector.h:
  New BitKeeper file ``sql/rpl_injector.h''
storage/ndb/include/kernel/signaldata/DihFragCount.hpp:
  New BitKeeper file ``storage/ndb/include/kernel/signaldata/DihFragCount.hpp''
parent 5872e5ae
Loading
Loading
Loading
Loading
+117 −8
Original line number Diff line number Diff line
@@ -852,10 +852,15 @@ static VAR *var_obtain(const char *name, int len)
  return v;
}

/*
  - if variable starts with a $ it is regarded as a local test varable
  - if not it is treated as a environment variable, and the corresponding
  environment variable will be updated
*/
int var_set(const char *var_name, const char *var_name_end,
            const char *var_val, const char *var_val_end)
{
  int digit;
  int digit, result, env_var= 0;
  VAR* v;
  DBUG_ENTER("var_set");
  DBUG_PRINT("enter", ("var_name: '%.*s' = '%.*s' (length: %d)",
@@ -863,11 +868,11 @@ int var_set(const char *var_name, const char *var_name_end,
                       (int) (var_val_end - var_val), var_val,
                       (int) (var_val_end - var_val)));

  if (*var_name++ != '$')
  {
    var_name--;
    die("Variable name in %s does not start with '$'", var_name);
  }
  if (*var_name != '$')
    env_var= 1;
  else
    var_name++;

  digit = *var_name - '0';
  if (!(digit < 10 && digit >= 0))
  {
@@ -875,7 +880,23 @@ int var_set(const char *var_name, const char *var_name_end,
  }
  else
    v = var_reg + digit;
  DBUG_RETURN(eval_expr(v, var_val, (const char**)&var_val_end));

  result= eval_expr(v, var_val, (const char**) &var_val_end);

  if (env_var)
  {
    char buf[1024];
    memcpy(buf, v->name, v->name_len);
    buf[v->name_len]= 0;
    if (v->int_dirty)
    {
      sprintf(v->str_val, "%d", v->int_val);
      v->int_dirty= 0;
      v->str_val_len= strlen(v->str_val);
    }
    setenv(buf, v->str_val, 1);
  }
  DBUG_RETURN(result);
}


@@ -1483,6 +1504,10 @@ int do_sync_with_master(struct st_query *query)
  return do_sync_with_master2(offset);
}

/*
  when ndb binlog is on, this call will wait until last updated epoch
  (locally in the mysqld) has been received into the binlog
*/
int do_save_master_pos()
{
  MYSQL_RES* res;
@@ -1494,6 +1519,89 @@ int do_save_master_pos()
  rpl_parse = mysql_rpl_parse_enabled(mysql);
  mysql_disable_rpl_parse(mysql);

#ifdef HAVE_NDB_BINLOG
  /*
     Wait for ndb binlog to be up-to-date with all changes
     done on the local mysql server
  */
  {
    ulong have_ndbcluster;
    if (mysql_query(mysql, query= "show variables like 'have_ndbcluster'"))
      die("At line %u: failed in %s: %d: %s", start_lineno, query,
          mysql_errno(mysql), mysql_error(mysql));
    if (!(res= mysql_store_result(mysql)))
      die("line %u: mysql_store_result() retuned NULL for '%s'", start_lineno,
          query);
    if (!(row= mysql_fetch_row(res)))
      die("line %u: empty result in %s", start_lineno, query);

    have_ndbcluster= strcmp("YES", row[1]) == 0;
    mysql_free_result(res);

    if (have_ndbcluster)
    {
      ulonglong epoch, tmp_epoch= 0;
      int count= 0;

      do
      {
        const char binlog[]= "binlog";
        const char latest_trans_epoch[]=
          "latest_trans_epoch=";
        const char latest_applied_binlog_epoch[]=
          "latest_applied_binlog_epoch=";
        if (count)
          sleep(1);
        if (mysql_query(mysql, query= "show engine ndb status"))
          die("At line %u: failed in '%s': %d: %s", start_lineno, query,
              mysql_errno(mysql), mysql_error(mysql));
        if (!(res= mysql_store_result(mysql)))
          die("line %u: mysql_store_result() retuned NULL for '%s'",
              start_lineno, query);
        while ((row= mysql_fetch_row(res)))
        {
          if (strcmp(row[1], binlog) == 0)
          {
            const char *status= row[2];
            /* latest_trans_epoch */
            if (count == 0)
            {
              while (*status && strncmp(status, latest_trans_epoch,
                                        sizeof(latest_trans_epoch)-1))
                status++;
              if (*status)
              {
                status+= sizeof(latest_trans_epoch)-1;
                epoch= strtoull(status, (char**) 0, 10);
              }
              else
                die("line %u: result does not contain '%s' in '%s'",
                    start_lineno, latest_trans_epoch, query);
            }
            /* latest_applied_binlog_epoch */
            while (*status && strncmp(status, latest_applied_binlog_epoch,
                                      sizeof(latest_applied_binlog_epoch)-1))
              status++;
            if (*status)
            {
              status+= sizeof(latest_applied_binlog_epoch)-1;
              tmp_epoch= strtoull(status, (char**) 0, 10);
            }
            else
              die("line %u: result does not contain '%s' in '%s'",
                  start_lineno, latest_applied_binlog_epoch, query);
            break;
          }
        }
        mysql_free_result(res);
        if (!row)
          die("line %u: result does not contain '%s' in '%s'",
              start_lineno, binlog, query);
        count++;
      } while (tmp_epoch < epoch && count <= 3);
    }
  }
#endif
  if (mysql_query(mysql, query= "show master status"))
    die("failed in show master status: %d: %s",
	mysql_errno(mysql), mysql_error(mysql));
@@ -1544,7 +1652,8 @@ int do_let(struct st_query *query)
  while (*p && (*p != '=') && !my_isspace(charset_info,*p))
    p++;
  var_name_end= p;
  if (var_name+1 == var_name_end)
  if (var_name == var_name_end ||
      (var_name+1 == var_name_end && *var_name == '$'))
    die("Missing variable name in let");
  while (my_isspace(charset_info,*p))
    p++;
+25 −0
Original line number Diff line number Diff line
@@ -87,6 +87,11 @@ AC_DEFUN([MYSQL_CHECK_NDB_OPTIONS], [
                           [Extra CFLAGS for ndb compile]),
              [ndb_ccflags=${withval}],
              [ndb_ccflags=""])
  AC_ARG_WITH([ndb-binlog],
              [
  --without-ndb-binlog       Disable ndb binlog],
              [ndb_binlog="$withval"],
              [ndb_binlog="default"])

  case "$ndb_ccflags" in
    "yes")
@@ -185,6 +190,7 @@ AC_DEFUN([MYSQL_SETUP_NDBCLUSTER], [
  ndbcluster_libs="\$(top_builddir)/storage/ndb/src/.libs/libndbclient.a"
  ndbcluster_system_libs=""
  ndb_mgmclient_libs="\$(top_builddir)/storage/ndb/src/mgmclient/libndbmgmclient.la"
  mysql_se_objs="$mysql_se_objs ha_ndbcluster_binlog.o"

  MYSQL_CHECK_NDB_OPTIONS
  NDBCLUSTER_WORKAROUNDS
@@ -219,6 +225,25 @@ AC_DEFUN([MYSQL_SETUP_NDBCLUSTER], [
    ndb_port="1186"
  fi
  
  have_ndb_binlog="no"
  if test X"$ndb_binlog" = Xdefault ||
     test X"$ndb_binlog" = Xyes
  then
    if test X"$have_row_based" = Xyes
    then
      have_ndb_binlog="yes"
    fi
  fi

  if test X"$have_ndb_binlog" = Xyes
  then
    AC_DEFINE([HAVE_NDB_BINLOG], [1],
              [Including Ndb Cluster Binlog])
    AC_MSG_RESULT([Including Ndb Cluster Binlog])
  else
    AC_MSG_RESULT([Not including Ndb Cluster Binlog])
  fi

  ndb_transporter_opt_objs=""
  if test "$ac_cv_func_shmget" = "yes" &&
     test "$ac_cv_func_shmat" = "yes" &&
+8 −1
Original line number Diff line number Diff line
@@ -154,7 +154,14 @@ enum ha_extra_function {
    to overwrite entire row.
  */
  HA_EXTRA_KEYREAD_PRESERVE_FIELDS,
  HA_EXTRA_MMAP
  HA_EXTRA_MMAP,
  /* 
    Ignore if the a tuple is not found, continue processing the
    transaction and ignore that 'row'.  Needed for idempotency
    handling on the slave
  */
  HA_EXTRA_IGNORE_NO_KEY,
  HA_EXTRA_NO_IGNORE_NO_KEY
};

	/* The following is parameter to ha_panic() */
+1 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ enum enum_server_command
  COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP,
  COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE,
  COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE,
  COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH,
  COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON,
  /* don't forget to update const char *command_name[] in sql_parse.cc */

  /* Must be last */
+6 −1
Original line number Diff line number Diff line
@@ -66,11 +66,13 @@ sqlsources = derror.cc field.cc field_conv.cc strfunc.cc filesort.cc \
	parse_file.cc sql_view.cc sql_trigger.cc my_decimal.cc \
        event_executor.cc event.cc event_timed.cc \
        rpl_filter.cc sql_partition.cc handlerton.cc sql_plugin.cc \
        sql_tablespace.cc
        sql_tablespace.cc \
        rpl_injector.cc

libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources)
EXTRA_libmysqld_a_SOURCES =	ha_innodb.cc ha_berkeley.cc ha_archive.cc \
			ha_blackhole.cc ha_federated.cc ha_ndbcluster.cc \
			ha_ndbcluster_binlog.cc \
			ha_partition.cc
libmysqld_a_DEPENDENCIES= @mysql_se_objs@
libmysqld_a_SOURCES=
@@ -102,6 +104,9 @@ ha_berkeley.o: ha_berkeley.cc
ha_ndbcluster.o:ha_ndbcluster.cc
		$(CXXCOMPILE) @ndbcluster_includes@ $(LM_CFLAGS) -c $<

ha_ndbcluster_binlog.o: ha_ndbcluster_binlog.cc
		$(CXXCOMPILE) @ndbcluster_includes@ $(LM_CFLAGS) -c $<

# Until we can remove dependency on ha_ndbcluster.h
handler.o:	handler.cc
		$(CXXCOMPILE) @ndbcluster_includes@ $(LM_CFLAGS) -c $<
Loading