Skip to content
Permalink
Browse files
After-merge fix for commit 98eb951
The merge only covered 10.1 up to
commit 4d24897.

Actually merge the changes up to
commit 0a53434.

Also, remove the unused InnoDB field trx_t::abort_type.
  • Loading branch information
dr-m committed Mar 16, 2018
1 parent 98eb951 commit 84129fb
Show file tree
Hide file tree
Showing 36 changed files with 176 additions and 398 deletions.
@@ -1176,11 +1176,7 @@ int main(int argc,char *argv[])
close(stdout_fileno_copy); /* Clean up dup(). */
}

if (load_defaults("my",load_default_groups,&argc,&argv))
{
my_end(0);
exit(1);
}
load_defaults_or_exit("my", load_default_groups, &argc, &argv);
defaults_argv=argv;
if ((status.exit_status= get_options(argc, (char **) argv)))
{
@@ -1133,6 +1133,8 @@ int main(int argc, char **argv)
char self_name[FN_REFLEN + 1];

MY_INIT(argv[0]);
load_defaults_or_exit("my", load_default_groups, &argc, &argv);
defaults_argv= argv; /* Must be freed by 'free_defaults' */

#if __WIN__
if (GetModuleFileName(NULL, self_name, FN_REFLEN) == 0)
@@ -1145,10 +1147,6 @@ int main(int argc, char **argv)
init_dynamic_string(&conn_args, "", 512, 256))
die("Out of memory");

if (load_defaults("my", load_default_groups, &argc, &argv))
die(NULL);
defaults_argv= argv; /* Must be freed by 'free_defaults' */

if (handle_options(&argc, &argv, my_long_options, get_one_option))
die(NULL);
if (debug_info_flag)
@@ -320,8 +320,7 @@ int main(int argc,char *argv[])
MY_INIT(argv[0]);
mysql_init(&mysql);
sf_leaking_memory=1; /* don't report memory leaks on early exits */
if ((error= load_defaults("my",load_default_groups,&argc,&argv)))
goto err1;
load_defaults_or_exit("my", load_default_groups, &argc, &argv);
save_argv = argv; /* Save for free_defaults */

if ((error=handle_options(&argc, &argv, my_long_options, get_one_option)))
@@ -501,10 +500,8 @@ int main(int argc,char *argv[])
my_free(shared_memory_base_name);
#endif
free_defaults(save_argv);
err1:
my_end(my_end_arg);
exit(error);
return 0;
return error;
}


@@ -2948,9 +2948,7 @@ int main(int argc, char** argv)
my_init_time(); // for time functions
tzset(); // set tzname

if (load_defaults("my", load_groups, &argc, &argv))
exit(1);

load_defaults_or_exit("my", load_groups, &argc, &argv);
defaults_argv= argv;

if (!(binlog_filter= new Rpl_filter))
@@ -1166,9 +1166,7 @@ int main(int argc, char **argv)
/*
** Check out the args
*/
if (load_defaults("my", load_default_groups, &argc, &argv))
goto end2;

load_defaults_or_exit("my", load_default_groups, &argc, &argv);
defaults_argv= argv;
if (get_options(&argc, &argv))
goto end1;
@@ -1244,7 +1242,6 @@ int main(int argc, char **argv)
my_free(shared_memory_base_name);
mysql_library_end();
free_defaults(defaults_argv);
end2:
my_end(my_end_arg);
return ret;
} /* main */
@@ -980,8 +980,7 @@ static int get_options(int *argc, char ***argv)
opt_net_buffer_length= *mysql_params->p_net_buffer_length;

md_result_file= stdout;
if (load_defaults("my",load_default_groups,argc,argv))
return 1;
load_defaults_or_exit("my", load_default_groups, argc, argv);
defaults_argv= *argv;

if (my_hash_init(&ignore_table, charset_info, 16, 0, 0,
@@ -643,8 +643,7 @@ int main(int argc, char **argv)
MY_INIT(argv[0]);
sf_leaking_memory=1; /* don't report memory leaks on early exits */

if (load_defaults("my",load_default_groups,&argc,&argv))
return 1;
load_defaults_or_exit("my", load_default_groups, &argc, &argv);
/* argv is changed in the program */
argv_to_free= argv;
if (get_options(&argc, &argv))
@@ -72,8 +72,7 @@ int main(int argc, char **argv)
static char **defaults_argv;
MY_INIT(argv[0]);
sf_leaking_memory=1; /* don't report memory leaks on early exits */
if (load_defaults("my",load_default_groups,&argc,&argv))
exit(1);
load_defaults_or_exit("my", load_default_groups, &argc, &argv);
defaults_argv=argv;

get_options(&argc,&argv);
@@ -325,11 +325,7 @@ int main(int argc, char **argv)
MY_INIT(argv[0]);
sf_leaking_memory=1; /* don't report memory leaks on early exits */

if (load_defaults("my",load_default_groups,&argc,&argv))
{
my_end(0);
exit(1);
}
load_defaults_or_exit("my", load_default_groups, &argc, &argv);
defaults_argv=argv;
if (get_options(&argc,&argv))
{
@@ -7298,9 +7298,7 @@ get_one_option(int optid, const struct my_option *opt, char *argument)

int parse_args(int argc, char **argv)
{
if (load_defaults("my",load_default_groups,&argc,&argv))
exit(1);

load_defaults_or_exit("my", load_default_groups, &argc, &argv);
default_argv= argv;

if ((handle_options(&argc, &argv, my_long_options, get_one_option)))
@@ -443,9 +443,7 @@ int parse_args(int argc, char **argv)
exit(EXIT_FAILURE);
}

if (load_defaults("my", load_default_groups, &argc, &argv)) {
exit(EXIT_FAILURE);
}
load_defaults_or_exit("my", load_default_groups, &argc, &argv);

if (handle_options(&argc, &argv, my_long_options, get_one_option)) {
exit(EXIT_FAILURE);
@@ -5209,10 +5209,8 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)

*argv_client = argv;
*argv_server = argv;
if (load_defaults(conf_file, xb_server_default_groups,
&argc_server, argv_server)) {
exit(EXIT_FAILURE);
}
load_defaults_or_exit(conf_file, xb_server_default_groups,
&argc_server, argv_server);

int n;
for (n = 0; (*argv_server)[n]; n++) {};
@@ -5262,10 +5260,8 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
xb_server_options, xb_get_one_option)))
exit(ho_error);

if (load_defaults(conf_file, xb_client_default_groups,
&argc_client, argv_client)) {
exit(EXIT_FAILURE);
}
load_defaults_or_exit(conf_file, xb_client_default_groups,
&argc_client, argv_client);

for (n = 0; (*argv_client)[n]; n++) {};
argc_client = n;
@@ -206,6 +206,9 @@ int main(int argc, char **argv)
if ((error= load_defaults(config_file, (const char **) load_default_groups,
&count, &arguments)))
{
my_end(0);
if (error == 4)
return 0;
if (verbose && opt_defaults_file_used)
{
if (error == 1)
@@ -216,8 +219,7 @@ int main(int argc, char **argv)
fprintf(stderr, "WARNING: Defaults file '%s' is not a regular file!\n",
config_file);
}
error= 2;
exit(error);
return 2;
}

for (argument= arguments+1 ; *argument ; argument++)
@@ -45,6 +45,13 @@ extern void free_defaults(char **argv);
extern void my_print_default_files(const char *conf_file);
extern void print_defaults(const char *conf_file, const char **groups);


/** Simplify load_defaults() common use */
#define load_defaults_or_exit(A, B, C, D) switch (load_defaults(A, B, C, D)) { \
case 0: break; \
case 4: my_end(0); exit(0); \
default: my_end(0); exit(1); }

C_MODE_END

#endif /* MY_DEFAULT_INCLUDED */
@@ -631,7 +631,7 @@ int my_load_defaults(const char *conf_file, const char **groups,
if (!my_getopt_is_args_separator((*argv)[i])) /* skip arguments separator */
printf("%s ", (*argv)[i]);
puts("");
exit(0);
DBUG_RETURN(4);
}

if (default_directories)
@@ -641,7 +641,7 @@ int my_load_defaults(const char *conf_file, const char **groups,

err:
fprintf(stderr,"Fatal error in defaults handling. Program aborted\n");
return 2;
DBUG_RETURN(2);
}


@@ -5659,8 +5659,7 @@ int mysqld_main(int argc, char **argv)
orig_argc= argc;
orig_argv= argv;
my_getopt_use_args_separator= TRUE;
if (load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv))
return 1;
load_defaults_or_exit(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv);
my_getopt_use_args_separator= FALSE;
defaults_argc= argc;
defaults_argv= argv;
@@ -2687,9 +2687,7 @@ main(int argc, char **argv)
char **default_argv;
MY_INIT(argv[0]);

if (load_defaults("my",load_default_groups,&argc,&argv))
exit(1);

load_defaults_or_exit("my", load_default_groups, &argc, &argv);
default_argv= argv;

if ((handle_options(&argc, &argv, my_long_options, get_one_option)))
@@ -408,8 +408,7 @@ static void print_version(void)

static void get_options(int *argc, char ***argv)
{
if (load_defaults("my", load_default_groups, argc, argv))
exit(1);
load_defaults_or_exit("my", load_default_groups, argc, argv);
default_argv= *argv;

handle_options(argc, argv, my_long_options, get_one_option);
@@ -1254,7 +1254,9 @@ innobase_close_connection(
THD* thd); /*!< in: MySQL thread handle for
which to close the connection */

static void innobase_kill_query(handlerton *hton, THD* thd, enum thd_kill_levels level);
/** Cancel any pending lock request associated with the current THD.
@sa THD::awake() @sa ha_kill_query() */
static void innobase_kill_query(handlerton*, THD* thd, enum thd_kill_levels);
static void innobase_commit_ordered(handlerton *hton, THD* thd, bool all);

/*****************************************************************//**
@@ -5299,21 +5301,11 @@ innobase_close_connection(

UNIV_INTERN void lock_cancel_waiting_and_release(lock_t* lock);

/*****************************************************************//**
Cancel any pending lock request associated with the current THD. */
static
void
innobase_kill_query(
/*================*/
handlerton* hton, /*!< in: innobase handlerton */
THD* thd, /*!< in: MySQL thread being killed */
enum thd_kill_levels level) /*!< in: kill level */
/** Cancel any pending lock request associated with the current THD.
@sa THD::awake() @sa ha_kill_query() */
static void innobase_kill_query(handlerton*, THD* thd, enum thd_kill_levels)
{
trx_t* trx;

DBUG_ENTER("innobase_kill_query");
DBUG_ASSERT(hton == innodb_hton_ptr);

#ifdef WITH_WSREP
wsrep_thd_LOCK(thd);
if (wsrep_thd_get_conflict_state(thd) != NO_CONFLICT) {
@@ -5329,43 +5321,10 @@ innobase_kill_query(
wsrep_thd_UNLOCK(thd);
#endif /* WITH_WSREP */

trx = thd_to_trx(thd);

if (trx != NULL) {
if (trx_t* trx = thd_to_trx(thd)) {
ut_ad(trx->mysql_thd == thd);
/* Cancel a pending lock request if there are any */
bool lock_mutex_taken = false;
bool trx_mutex_taken = false;

if (trx->lock.wait_lock) {
WSREP_DEBUG("Killing victim trx %p BF %d trx BF %d trx_id " IB_ID_FMT " ABORT %d thd %p"
" current_thd %p BF %d",
trx, wsrep_thd_is_BF(trx->mysql_thd, FALSE),
wsrep_thd_is_BF(thd, FALSE),
trx->id, trx->abort_type,
trx->mysql_thd,
current_thd,
wsrep_thd_is_BF(current_thd, FALSE));
}

if (!wsrep_thd_is_BF(trx->mysql_thd, FALSE) && trx->abort_type != TRX_WSREP_ABORT) {
lock_mutex_enter();
lock_mutex_taken = true;
}

if (trx->abort_type != TRX_WSREP_ABORT) {
trx_mutex_enter(trx);
trx_mutex_taken = true;
}

lock_trx_handle_wait(trx, true, true);

if (lock_mutex_taken) {
lock_mutex_exit();
}

if (trx_mutex_taken) {
trx_mutex_exit(trx);
}
lock_trx_handle_wait(trx);
}

DBUG_VOID_RETURN;
@@ -9392,8 +9351,8 @@ ha_innobase::unlock_row(void)
transaction is in state TRX_STATE_NOT_STARTED. The check on
m_prebuilt->select_lock_type above gets around this issue. */

ut_ad(trx_state_eq(m_prebuilt->trx, TRX_STATE_ACTIVE)
|| trx_state_eq(m_prebuilt->trx, TRX_STATE_FORCED_ROLLBACK));
ut_ad(trx_state_eq(m_prebuilt->trx, TRX_STATE_ACTIVE, true)
|| trx_state_eq(m_prebuilt->trx, TRX_STATE_FORCED_ROLLBACK, true));

switch (m_prebuilt->row_read_type) {
case ROW_READ_WITH_LOCKS:
@@ -20063,7 +20022,7 @@ wsrep_innobase_kill_one_trx(
thd_get_thread_id(thd)));
WSREP_DEBUG("kill query for: %ld",
thd_get_thread_id(thd));
/* Note that innobase_kill_connection will take lock_mutex
/* Note that innobase_kill_query will take lock_mutex
and trx_mutex */
wsrep_thd_UNLOCK(thd);
wsrep_thd_awake(thd, signal);
@@ -20140,12 +20099,10 @@ wsrep_abort_transaction(
if (victim_trx) {
lock_mutex_enter();
trx_mutex_enter(victim_trx);
victim_trx->abort_type = TRX_WSREP_ABORT;
int rcode = wsrep_innobase_kill_one_trx(bf_thd, bf_trx,
victim_trx, signal);
trx_mutex_exit(victim_trx);
lock_mutex_exit();
victim_trx->abort_type = TRX_SERVER_ABORT;
trx_mutex_exit(victim_trx);
wsrep_srv_conc_cancel_wait(victim_trx);
DBUG_RETURN(rcode);
} else {
@@ -781,9 +781,7 @@ the wait lock.
dberr_t
lock_trx_handle_wait(
/*=================*/
trx_t* trx, /*!< in/out: trx lock state */
bool lock_mutex_taken,
bool trx_mutex_taken);
trx_t* trx); /*!< in/out: trx lock state */
/*********************************************************************//**
Get the number of locks on a table.
@return number of locks */

0 comments on commit 84129fb

Please sign in to comment.