-
Notifications
You must be signed in to change notification settings - Fork 3
ERROR: mx_mysql_do_statement(): Deadlock found when trying to get lock; try restarting transaction #161
Comments
|
Transaction 1 from dugong ( |
Call chain: static int job_has_finished(struct mxq_server *server, struct mxq_group *group, struct mxq_job_list *jlist)
{
...
mxq_set_job_status_exited(server->mysql, job);
...
int mxq_set_job_status_exited(struct mx_mysql *mysql, struct mxq_job *job)
{
...
res = mx_mysql_do_statement_noresult_retry_on_fail(mysql, query, ¶m);
if (res < 0) {
mx_log_err("mx_mysql_do_statement(): %s", mx_mysql_error()); # Deadlock found when trying to get lock; try restarting transaction
return res;
}
job->job_status = newstatus;
...
#define mx_mysql_do_statement_noresult_retry_on_fail(m
, q, p) \
mx_mysql_do_statement_retry_on_fail(m, q, p, NULL, NULL, NULL, 0)
int mx_mysql_do_statement_retry_on_fail(struct mx_mysql *mysql, char *query, struct mx_mysql_bind *param, struct mx_mysql_bind *result, void *from, void **to, size_t size)
{
int res;
while (1) {
res = mx_mysql_do_statement_no_bind_cleanup(mysql, query, param, result, from, to, size);
if (res >= 0)
break;
mx_mysql_assert_usage_ok(res);
mx_log_warning("mx_mysql_do_statement() failed: %s", strerror(-res));
if (res != -EAGAIN)
break;
mx_mysql_ping_forever(mysql);
}
mx_mysql_bind_cleanup(param);
mx_mysql_bind_cleanup(result);
return res;
}
static int mx_mysql_do_statement_no_bind_cleanup(struct mx_mysql *mysql, char *query, struct mx_mysql_bind *param, struct mx_mysql_bind *result, void *from, void **to, size_t size)
{
return _mx_mysql_do_statement(mysql, query, param, result, from, to, size, 0);
}
static int _mx_mysql_do_statement(struct mx_mysql *mysql, char *query, struct mx_mysql_bind *param, struct mx_mysql_bind *result, void *from, void **to, size_t size, char cleanup)
{
...
res = mx_mysql_statement_execute(stmt, &num_rows);
if (res < 0) {
if (cleanup)
mx_mysql_statement_close(&stmt);
else
mx_mysql_statement_close_no_bind_cleanup(&stmt);
return res;
}
int mx_mysql_statement_execute(struct mx_mysql_stmt *stmt, unsigned long long *count)
{
...
res = mx__mysql_stmt_execute(stmt);
if (res < 0) {
mx_log_debug("ERROR: mx__mysql_stmt_execute: %s", strerror(-res));
return res;
}
static int mx__mysql_stmt_execute(struct mx_mysql_stmt *stmt)
{
...
res = mysql_stmt_execute(stmt->stmt);
if (res == 0)
return 0;
mx_mysql_save_error(mysql_stmt_error(stmt->stmt));
switch (mysql_stmt_errno(stmt->stmt)) {
case CR_COMMANDS_OUT_OF_SYNC:
return -EPROTO;
case CR_OUT_OF_MEMORY:
return -ENOMEM;
case CR_SERVER_GONE_ERROR:
case CR_SERVER_LOST:
return -EAGAIN;
case CR_UNKNOWN_ERROR:
return -EIO;
}
return -EBADE;
} |
This was referenced Aug 26, 2024
Merged
Sign in
to join this conversation on GitHub.
http://afk.molgen.mpg.de/mxq/mxq/job/52017245
The text was updated successfully, but these errors were encountered: