maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #08662
Re: 1ed4683: MDEV-8260 : Issues related to concurrent CTAS
Hi, Nirbhay!
On Jun 02, Nirbhay Choubey wrote:
> revision-id: 1ed46831ed3a1c842b45f7819edd48a233080ce4
> parent(s): 6d5b723bdc3e04978619b9673fca266e0426916f
> committer: Nirbhay Choubey
> branch nick: 10.0-galera.ctas
> timestamp: 2015-06-02 17:59:32 -0400
> message:
>
> MDEV-8260 : Issues related to concurrent CTAS
>
> * Wait for aborted thd (victim) to release MDL locks
> * Skip aborting an already aborted thd
> * Defer setting OK status in case of CTAS
> * Minor cosmetic changes
> * Added a test case
So, I'm only reviewing non-wsrep part, ok?
> @@ -3735,24 +3757,16 @@ bool select_insert::send_eof()
> table->file->print_error(error,MYF(0));
> DBUG_RETURN(1);
> }
> - char buff[160];
> - if (info.ignore)
> - sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
> - (ulong) (info.records - info.copied),
> - (long) thd->get_stmt_da()->current_statement_warn_count());
> - else
> - sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
> - (ulong) (info.deleted+info.updated),
> - (long) thd->get_stmt_da()->current_statement_warn_count());
> - row_count= info.copied + info.deleted +
> - ((thd->client_capabilities & CLIENT_FOUND_ROWS) ?
> - info.touched : info.updated);
> - id= (thd->first_successful_insert_id_in_cur_stmt > 0) ?
> - thd->first_successful_insert_id_in_cur_stmt :
> - (thd->arg_of_last_insert_id_function ?
> - thd->first_successful_insert_id_in_prev_stmt :
> - (info.copied ? autoinc_value_of_last_inserted_row : 0));
> - ::my_ok(thd, row_count, id, buff);
> +
> + /*
> + Avoid setting OK status for CREATE .. SELECT as it may fail during commit.
> + */
> + if (!((thd->lex->sql_command == SQLCOM_CREATE_TABLE) &&
> + ((&thd->lex->select_lex)->item_list.elements))) {
> + prepare_ok_info(thd);
> + ::my_ok(thd, ok.row_count, ok.id, ok.message);
> + }
> +
> DBUG_RETURN(0);
> }
I think we've discussed a slightly different fix, where the parent class
(select_insert) wouldn't need to check thd->lex->sql_command. Like,
create two methods
select_insert::prepare_eof
select_insert::send_ok_packet
the first method will have everything of the current
select_insert::send_eof but without ::my_ok part.
Then select_insert::send_eof() will be just
bool select_insert::send_eof()
{
return prepare_eof() || send_ok_packet();
}
and select_create::send_eof() will do prepare_eof(), commit and other
stuff, send_ok_packet().
In this case you won't need to test for thd->lex->sql_command in the
parent class. And you won't need prepare_ok_info(), it'll be inside
send_ok_packet().
Regards,
Sergei
Follow ups