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

Xiaoqin Feng commented on OPENJPA-1448:
---------------------------------------

I am on vacation from 12/20/2009  to 12/26/2009.

If you have any question on deployment and JEE bugs, please contact Saurabh 
Arora or my manager Maruthi Nuthikattu.

For emergency, contact me at 925-209-5517.


> Synching of DataCache with QueryCache outside of a transaction
> --------------------------------------------------------------
>
>                 Key: OPENJPA-1448
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1448
>             Project: OpenJPA
>          Issue Type: Sub-task
>          Components: datacache
>    Affects Versions: 2.0.0-M3
>            Reporter: Kevin Sutter
>            Priority: Minor
>
> One of the tests (CacheTest.testQueryImplicitEvictions) re-enabled for the 
> parent JIRA (openjpa-1443) expected that the DataCache would automatically 
> synch up with the QueryCache, even outside of a transaction.  This test would 
> first load up the DataCache with Entity instances.  Then, a Query would be 
> created and executed against these Entities to create an entry in the 
> QueryCache.  Then, using implicit eviction processing, those target Entities 
> were removed from the DataCache.  The expectation was that this implicit 
> eviction would also clean up the QueryCache so that the Query and Results 
> were no longer present.
> It doesn't look like our synchronization between the DataCache and QueryCache 
> work that way.  We will do synchronization when a "dirty" transaction 
> completes.  That is, if you have updated or deleted Entities that exist in 
> the DataCache, when that transaction completes, we will do a synch with the 
> QueryCache to remove stale Queries and Results.  But, we don't do this 
> synchronization on every eviction.
> Maybe Kodo did and that's why this testcase exists?  Not sure.  To be honest, 
> I'm concerned about this type of synchronization from an overhead 
> perspective.  If every eviction required us to scour the QueryCache for a 
> potential stale Result, we might be chewing up a lot of resources.  But, 
> since this previously disabled testcase expected this capability, I thought I 
> would write a low-priority JIRA to track the issue.  Here are my comments 
> from the CacheTest.testQueryImplicitEvictions method:
>             /*
>              * Not a valid test...  At least not with the current 
> implementation...
>              * 
>              * Just removing items from the DataCache (as done via the 
> previous loop) is not sufficient
>              * to remove the entries from the QueryCache.  Currently, this 
> notification is done at the end
>              * of a transaction after inserts, updates, and deletes have been 
> performed.  Then, the 
>              * updateCaches() method is invoked on the DataCacheStoreManager 
> which will flow the request to
>              * the QueryCache.  With no direct updates to the "Entities of 
> interest", then there's nothing to
>              * flow over to the QueryCache for cleanup.  Even putting the 
> above loop within a transaction is
>              * not sufficient, since there have been no updates to the 
> "Entities of interest".
>              */
> //            em = factory.createEntityManager();
> //            broker = JPAFacadeHelper.toBroker(em);
> //            q = broker.newQuery(JPQLParser.LANG_JPQL, "Select a FROM "
> //                + CacheObjectJ.class.getSimpleName()
> //                + " a where a.str = 'h'");
> //            try {
> //                assertInCache(q, null);
> //            }
> //            catch (AssertionFailedError e) {
> //                bug(626, "query cache invalidation is broken");
> //            }
> Thanks,
> Kevin

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

Reply via email to