Re: Duplicate Key Problem

From: Christian Mittendorf (christian.mittendor..reenet.de)
Date: Thu Jul 13 2006 - 06:23:04 EDT

  • Next message: Kevin Menard: "Generate sources with Maven"

    I haven't found any hint to something abnormal in my log files yet.
    However, we experienced the duplicate key problem some minutes ago
    and I was able to track down the problem a bit.

    Affected is only one single WebApp and these "Duplicat entry" errors
    occured since yesterday, about 15:30. If I search for this exception
    I can find this ID list:

    $ cat x.log.2006-07-12 x.log | grep 'message from server'|uniq
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048820' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048821' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048822' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048823' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048824' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048825' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048826' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048827' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048828' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048829' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048830' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048831' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048832' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048833' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048834' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048835' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048836' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048837' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048836' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048838' for key 1"
    Caused by: java.sql.SQLException: null, message from server:
    "Duplicate entry '17048839' for key 1"

    It seems as if one package of PKs (17048820 - 17048839 ) was double
    used.
    How does the PK magic of Cayenne work? Does each DataContext get its
    own set of IDs?

    Christian

    Am 12.07.2006 um 23:40 schrieb Andrus Adamchik:

    > Hmm.. MySQLPkGenerator runs "UNLOCK" in the finally block. Of
    > course if the connection goes down or something else equally bad
    > happens during unlock, then you can end up locking the table. I'll
    > be curious to know what exactly happened, as we may improve the
    > unlock reliability as a result.
    >
    > Andrus
    >
    >
    > On Jul 12, 2006, at 5:29 PM, Christian Mittendorf wrote:
    >
    >> Yes, all of our applications on this database are cayenne based.
    >> I will have a look at the logs tomorrow and see if I can find some
    >> other exceptions...
    >>
    >> Thanks,
    >> Christian
    >>
    >> Am 12.07.2006 um 19:56 schrieb Gentry, Michael ((Contractor)):
    >>
    >>> These could be related, then. I know the MySQL adapter has to
    >>> lock the
    >>> auto_pk_support table to generate keys and perhaps something
    >>> happened to
    >>> leave the table locked. Did you see any other exceptions?
    >>>
    >>> Also, you said you have multiple applications hitting the same
    >>> database.
    >>> Are all of these applications Cayenne-based?
    >>>
    >>> Thanks,
    >>>
    >>> /dev/mrg
    >>>
    >>>
    >>> -----Original Message-----
    >>> From: Christian Mittendorf [mailto:christian.mittendor..reenet.de]
    >>> Sent: Wednesday, July 12, 2006 1:50 PM
    >>> To: cayenne-use..ncubator.apache.org
    >>> Subject: Re: Duplicate Key Problem
    >>>
    >>>
    >>> We don't use the autoincrement from MySQL.
    >>>
    >>> Am 12.07.2006 um 16:35 schrieb Gentry, Michael ((Contractor)):
    >>>
    >>>> Are you using MySQL's autoincrement feature for the PKs or the
    >>>> auto_pk_support table from Cayenne?
    >>>>
    >>>> -----Original Message-----
    >>>> From: Christian Mittendorf [mailto:christian.mittendor..reenet.de]
    >>>> Sent: Wednesday, July 12, 2006 4:29 AM
    >>>> To: cayenne-use..ncubator.apache.org
    >>>> Subject: Duplicate Key Problem
    >>>>
    >>>>
    >>>> Hello!
    >>>>
    >>>> We are running a MySQL 5.0 server using InnoDB tables for our
    >>>> applications. We have multiple web applications accessing this same
    >>>> database and the system is running smooth and without problems
    >>>> (almost).
    >>>>
    >>>> But yesterday we were experiencing some strange errors. During the
    >>>> afternoon some CayenneRuntimeExceptions appeared in the log file,
    >>>> which were caused by:
    >>>>
    >>>> Caused by: java.sql.SQLException: null, message from server:
    >>>> "Duplicate entry '4353880' for key 1"
    >>>>
    >>>> A bit later other CayenneRuntimeException appeared. For those
    >>>> exceptions the cause was:
    >>>>
    >>>> Caused by: java.sql.SQLException: Deadlock found when trying to get
    >>>> lock; Try restarting transaction, message from server: "Lock wait
    >>>> timeout exceeded; try restarting transaction"
    >>>>
    >>>> I'm now wondering, are both errors related to each other?
    >>>>
    >>>> There are, from my point of view, two possible causes for the
    >>>> "Duplicate entry..." message:
    >>>>
    >>>> - two Insert statements on the same object, which might be possible
    >>>> if the application is clustered, which our applications are not, or
    >>>> - dual use of the same key in different objects
    >>>>
    >>>> Has anybody else experienced something like that? Are there any
    >>>> hints
    >>>> what I might do to avoid such situations?
    >>>>
    >>>> Christian
    >>>>
    >>>>
    >>>>
    >>>>
    >>>
    >>
    >>
    >



    This archive was generated by hypermail 2.0.0 : Thu Jul 13 2006 - 06:23:32 EDT