openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tim McConnell (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-466) Primary key constraint violated using (Oracle) sequence to generate ID in multithreaded app
Date Sun, 12 Jul 2009 16:05:14 GMT

    [ https://issues.apache.org/jira/browse/OPENJPA-466?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12730114#action_12730114
] 

Tim McConnell commented on OPENJPA-466:
---------------------------------------

Hi Milosz, here is what I've done over the past couple days. I have two machines -- Windows
XP, Windows 2003 -- each with MySQL (8.3 on one machine, 8.4 on the other machine), DB2 (8.2
and 9.5), and Oracle (10g on both) installed on them. To reproduce the original problem I
use 25000 entities, 6 iterations, and 8 threads in the TestSequence test program. With these
settings I can easily reproduce the failure on both machines on all three databases. Here
are the results of the various patches attached to this JIRA. Note that I raised the number
entities to 40000 to stress each patch (but still used 6 iterations and 8 threads):

1. Patch OPENJPA-466 (attached by you with the change to AbstractJDBCSeq.java): Failures on
all three databases on both machines. Note that the failures manifest themselves differently
on each database. For example the failures on PostgreSQL show up as 

ERROR: duplicate key value violates unique constraint 

on Oracle as: ORA-00001: unique constraint (SYSTEM.SYS_C008294) violated

and finally on DB2 as:  org.apache.openjpa.persistence.EntityExistsException: DB2 SQL error:
SQLCODE: -803, SQLSTATE: 23505

2. Patch volite.patch only (i.e., no other patches used): Failures on all three databases
on both machines

3. Patch OPENJPA-466-SYNCHRONIZED.patch only (which is a modified version of my original patch
but is what was originally committed to trunk): Success on all three databases on both machines.

So here are my recommendations:

The OPENJPA-466-SYNCHRONIZED patch works in all scenarios that I've tested it in. More importantly,
it fixed the original problem reported by the user, and has no adverse impact on performance.
Please note as well that that user environment was an extremely large, high-volume, multi-threaded,
multi-core installation. Not meaning to be overly brusque -- but it simply works in every
scenario that it's been used it. Until or unless someone (other than me as I don't intend
to spend any more time on this JIRA) can provide a scenario where it does not work it should
be committed to trunk and retrofitted to all previous versions of OpenJPA, and any previously-committed
patches should be reverted. Thanks much



> Primary key constraint violated using (Oracle) sequence to generate ID in multithreaded
app
> -------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-466
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-466
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 1.0.0, 1.0.1, 1.1.0, 1.2.0
>         Environment: OpenJPA 1.0.0 (also tried 1.0.1 and 1.1.0-SNAPSHOT)
> Oracle XE 10g (JDBC driver 10.2.0.3.0)
> Windows XP Pro
>            Reporter: Frank Le
>            Assignee: Milosz Tylenda
>            Priority: Blocker
>             Fix For: 2.0.0
>
>         Attachments: OPENJPA-466-SYNCRONIZED.patch, OPENJPA-466.patch, OPENJPA-466.patch,
volatile.patch
>
>
> Here's how I annotate the ID:
>     @Id
>     @SequenceGenerator(name = "FooSeq", sequenceName = "seq_foo", allocationSize = 20)
>     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FooSeq")
>     private Long id;
> Here's how I create the (Oracle) sequence:
> CREATE SEQUENCE seq_foo START WITH 1 INCREMENT BY 1;
> I get a primary key unique constraint violated in a multithreaded app i.e. it doesn't
happen in single-threaded!
> You can simply reproduce this error by either create blocking queue or blocking thread
pool say size 5 to insert 10000+ object.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message