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]