List:General Discussion« Previous MessageNext Message »
From:Jason J. W. Williams Date:January 1 2007 9:57pm
Subject:Re: Bizarre InnoDB Error Message ( trx->active_trans == 0, but trx->conc_state != TRX_NOT_STARTED)
View as plain text  
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
> >>
>
Thread
Bizarre InnoDB Error Message ( trx->active_trans == 0, but trx->conc_state != TRX_NOT_STARTED)Jason J. W. Williams28 Dec
Re: Bizarre InnoDB Error Message ( trx->active_trans == 0, but trx->conc_state!= TRX_NOT_STARTED)Heikki Tuuri31 Dec
  • Re: Bizarre InnoDB Error Message ( trx->active_trans == 0, but trx->conc_state != TRX_NOT_STARTED)Jason J. W. Williams1 Jan