Hi Heikki,
Yes indeed. We have a "uid" field that is AUTO INC. Is the error more
an issue of the auto inc code in InnoDB not setting its error codes
correctly on a rollback than the auto increment code initiating an
error? Thank you in advance.
Best Regards,
Jason
On 12/31/06, Heikki Tuuri <[EMAIL PROTECTED]> wrote:
Jason,
I am Cc:ing the MySQL General mailing list, so that others who bump into
this bug can find this discussion.
Jason J. W. Williams wrote:
> Mr. Tuuri,
>
> We have a high degree of UPDATE/INSERT concurrency along with high
> SELECTs. It causes a deadlock about once every 24 hours. In this case
> a deadlock was associated with this event.
ha_innodb.cc in 5.0:
int
convert_error_code_to_mysql(
/*========================*/
/* out: MySQL error code */
int error, /* in: InnoDB error code */
THD* thd) /* in: user thread handle or NULL */
{
if (error == DB_SUCCESS) {
return(0);
} else if (error == (int) DB_DUPLICATE_KEY) {
return(HA_ERR_FOUND_DUPP_KEY);
} else if (error == (int) DB_RECORD_NOT_FOUND) {
return(HA_ERR_NO_ACTIVE_RECORD);
} else if (error == (int) DB_ERROR) {
return(-1); /* unspecified error */
} else if (error == (int) DB_DEADLOCK) {
/* Since we rolled back the whole transaction, we must
tell it also to MySQL so that MySQL knows to empty the
cached binlog for this transaction */
if (thd) {
ha_rollback(thd);
}
return(HA_ERR_LOCK_DEADLOCK);
...
/*********************************************************************
Frees a possible InnoDB trx object associated with the current THD. */
static
int
innobase_close_connection(
/*======================*/
/* out: 0 or error number */
THD* thd) /* in: handle to the MySQL thread of the user
whose resources should be free'd */
{
trx_t* trx;
trx = (trx_t*)thd->ha_data[innobase_hton.slot];
ut_a(trx);
if (trx->active_trans == 0
&& trx->conc_state != TRX_NOT_STARTED) {
sql_print_error("trx->active_trans == 0, but trx->conc_state != "
"TRX_NOT_STARTED");
}
if (trx->conc_state != TRX_NOT_STARTED &&
global_system_variables.log_warnings)
sql_print_warning("MySQL is closing a connection that has an
active "
"InnoDB transaction. %lu row modifications
will "
"roll back.",
(ulong)trx->undo_no.low);
innobase_rollback_trx(trx);
trx_free_for_mysql(trx);
return(0);
}
Hmm... I need to check that the auto-increment code in ha_innodb.cc sets
trx->active_trans correctly. I guess you have an auto-inc column in your
table?
> The deadlock output from
> "SHOW INNODB STATUS" was so long, that it was truncated the "SHOW
> INNODB STATUS" information somewhere in the middle of the deadlocked
> rows output. The current transactions setting was completely missing
> due to the truncation. I don't have access to the my.cnf from where I
> am now, but I will send it on Monday once I get access. Lastly, there
> were no errors printed to the .err log prior to the errors I sent.
>
> Thank you so much for writing back. I do truly appreciate it! It is
> very relieving to know it is not dangerous.
>
> Best Regards,
> Jason
Regards,
Heikki
> On 12/30/06, Heikki Tuuri <[EMAIL PROTECTED]> wrote:
>
>> Jason,
>>
>> Jason J. W. Williams wrote:
>> > Hello Mr. Tuuri,
>> >
>> > I'm sorry to bother you directly about this. I have had very little
>> > luck finding anything on this in the forums or on Google and was
>> > hoping you could help me understand a strange error message I received
>> > from InnoDB (5.0.27). Any help would be very much appreciated. Thank
>> > you in advance!
>> >
>> > Best Regards,
>> > Jason
>> >
>> > ---ERROR MESSAGE---
>> >
>> > 061228 19:02:55 [ERROR] trx->active_trans == 0, but trx->conc_state !=
>> > TRX_NOT_STARTED
>> > 061228 19:02:55 [Warning] MySQL is closing a connection that has an
>> > active InnoDB transaction. 0 row modifications will roll back.
>>
>> the error itself does not sound dangerous.
>>
>> But do you have an idea how you got this?
>>
>> What is your my.cnf like?
>>
>> Are there any other warnings or errors printed to the .err log prior to
>> this?
>>
>> Best regards,
>>
>> Heikki
>>
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]