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 <heikki.tuuri@stripped> 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 <heikki.tuuri@stripped> 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
> >>
>