[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-2928) optimizers for enhanced id generators should be synchronized against multi-threaded access

John S. Adair (JIRA) noreply at atlassian.com
Tue May 27 18:29:33 EDT 2008


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2928?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_30264 ] 

John S. Adair commented on HHH-2928:
------------------------------------

I notice the checked in fix synchronizes the two methods. We're on 3.2.5 and can't take the newest drop yet, so I made the change and built hibernate locally to see if it solved our problems. It did solve the duplicate key problems but led to an apparent deadlock. I'm not filing a new ticket because I can't swear this isn't a problem on our end and don't have a simple reproducible test case, but here are the stack traces for what it's worth:

"pool-1-thread-8" prio=6 tid=0x0337a008 nid=0x1738 waiting for monitor entry [0x04f1e000..0x04f1fc68]
	at org.hibernate.id.enhanced.OptimizerFactory$PooledOptimizer.generate(OptimizerFactory.java:172)
	- waiting to lock <0x23d46dd0> (a org.hibernate.id.enhanced.OptimizerFactory$PooledOptimizer)
	at org.hibernate.id.enhanced.SequenceStyleGenerator.generate(SequenceStyleGenerator.java:157)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:99)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:269)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:217)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:170)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:131)
	at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
	...

"pool-1-thread-7" prio=6 tid=0x02d8f008 nid=0x668 in Object.wait() [0x04ede000..0x04edfce8]
	at java.lang.Object.wait(Native Method)
	- waiting on <0x23d34768> (a org.apache.commons.pool.impl.GenericObjectPool)
	at java.lang.Object.wait(Object.java:474)
	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:748)
	- locked <0x23d34768> (a org.apache.commons.pool.impl.GenericObjectPool)
	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
	at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
	at org.hibernate.jdbc.AbstractBatcher.openConnection(AbstractBatcher.java:558)
	at org.hibernate.engine.transaction.Isolater$JdbcDelegate.delegateWork(Isolater.java:178)
	at org.hibernate.engine.transaction.Isolater.doIsolatedWork(Isolater.java:43)
	at org.hibernate.engine.TransactionHelper.doWorkInNewTransaction(TransactionHelper.java:51)
	at org.hibernate.id.enhanced.TableStructure$1.getNextValue(TableStructure.java:72)
	at org.hibernate.id.enhanced.OptimizerFactory$PooledOptimizer.generate(OptimizerFactory.java:173)
	- locked <0x23d46dd0> (a org.hibernate.id.enhanced.OptimizerFactory$PooledOptimizer)
	at org.hibernate.id.enhanced.SequenceStyleGenerator.generate(SequenceStyleGenerator.java:157)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:99)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:269)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:217)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:170)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:131)
	at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
	...


> optimizers for enhanced id generators should be synchronized against multi-threaded access
> ------------------------------------------------------------------------------------------
>
>                 Key: HHH-2928
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2928
>             Project: Hibernate3
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.2.5
>            Reporter: Steve Ebersole
>            Assignee: Steve Ebersole
>             Fix For: 3.2.6, 3.3.0.CR1
>
>         Attachments: NoopOptimizerTest.java, NoopOptimizerTest.java, NoopRaceConditionTest.java
>
>
> Currently the optimizers do not serialize access to their internal state when applying their optimizations.  This only affects the pooled and hilo optimizers.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list