[hibernate-issues] [JIRA] (HHH-13916) Pending-put should not be created by Infinispan when checking if an entity is transient

Gail Badner (JIRA) jira at hibernate.atlassian.net
Tue Mar 31 00:14:24 EDT 2020


Gail Badner ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3Aabbef6b0-cce3-4556-9748-b721becb9c9a ) *created* an issue

Hibernate ORM ( https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiYzQ3YzBmZWIyODllNGVjZGFiNzdlZjE0YzNiOGU3OTciLCJwIjoiaiJ9 ) / Improvement ( https://hibernate.atlassian.net/browse/HHH-13916?atlOrigin=eyJpIjoiYzQ3YzBmZWIyODllNGVjZGFiNzdlZjE0YzNiOGU3OTciLCJwIjoiaiJ9 ) HHH-13916 ( https://hibernate.atlassian.net/browse/HHH-13916?atlOrigin=eyJpIjoiYzQ3YzBmZWIyODllNGVjZGFiNzdlZjE0YzNiOGU3OTciLCJwIjoiaiJ9 ) Pending-put should not be created by Infinispan when checking if an entity is transient ( https://hibernate.atlassian.net/browse/HHH-13916?atlOrigin=eyJpIjoiYzQ3YzBmZWIyODllNGVjZGFiNzdlZjE0YzNiOGU3OTciLCJwIjoiaiJ9 )

Issue Type: Improvement Affects Versions: 5.3.16, 5.4.13 Assignee: Unassigned Created: 30/Mar/2020 21:14 PM Fix Versions: 5.4.14 Priority: Major Reporter: Gail Badner ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3Aabbef6b0-cce3-4556-9748-b721becb9c9a )

As a last resort, AbstractEntityPersister#isTransient calls CacheHelper.fromSharedCache to determine if an entity is cached. If the return value is non-null, then the AbstractEntityPersister#isTransient returns false , and the return value is ignored.

When Infinispan is the cache provider, CacheHelper.fromSharedCache calls InvalidationCacheAccessDelegate#get ( https://github.com/infinispan/infinispan/blob/9.4.x/hibernate/cache-commons/src/main/java/org/infinispan/hibernate/cache/commons/access/InvalidationCacheAccessDelegate.java#L56-L65 ). If the entity that is not already cached, InvalidationCacheAccessDelegate#get adds a pending-put for the entity as a side-effect. The entry in the pending-put map uses a SessionImpl as the map key.

If that entity really is transient, then the pending-put entry never gets cleared until it times out. Since the pending-put map contains SessionImpl keys, those objects cannot be garbage-collected until the entry times out.

If lots of data is in the process of being imported, then an OutOfMemoryError could be thrown. IIUC, it is not recommended to use the cache when importing data. That is why I am calling this issue an "improvement" rather than a "bug". WFLY-13259 ( https://issues.redhat.com/browse/WFLY-13259 ) contains a test that reproduces this issue.

This improvement involves changing AbstractEntityPersister#isTransient to call CachedDomainDataAccess#get , which calls InvalidationCacheAccessDelegate#get with a null session argument. Since session is null , InvalidationCacheAccessDelegate#get does not add a pending-put for the entity.

( https://hibernate.atlassian.net/browse/HHH-13916#add-comment?atlOrigin=eyJpIjoiYzQ3YzBmZWIyODllNGVjZGFiNzdlZjE0YzNiOGU3OTciLCJwIjoiaiJ9 ) Add Comment ( https://hibernate.atlassian.net/browse/HHH-13916#add-comment?atlOrigin=eyJpIjoiYzQ3YzBmZWIyODllNGVjZGFiNzdlZjE0YzNiOGU3OTciLCJwIjoiaiJ9 )

Get Jira notifications on your phone! Download the Jira Cloud app for Android ( https://play.google.com/store/apps/details?id=com.atlassian.android.jira.core&referrer=utm_source%3DNotificationLink%26utm_medium%3DEmail ) or iOS ( https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=EmailNotificationLink&mt=8 ) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100123- sha1:a8fd8fd )
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/hibernate-issues/attachments/20200331/1be6f8e5/attachment.html 


More information about the hibernate-issues mailing list