On Thu, Aug 25, 2011 at 3:02 PM, Thomas Mortagne <[email protected]> wrote: > On Thu, Aug 25, 2011 at 2:23 PM, Fabio Mancinelli > <[email protected]> wrote: >> On Thu, Aug 25, 2011 at 12:18 PM, Caleb James DeLisle >> <[email protected]> wrote: >>> >>> >>> On 08/25/2011 05:56 AM, Thomas Mortagne wrote: >>>> On Thu, Aug 25, 2011 at 12:00 PM, Caleb James DeLisle >>>> <[email protected]> wrote: >>>>> In order to fix a problem with the cache, I would like to add a pointer >>>>> type to the storage api. >>>>> The problem with the cache is there are multiple names which, when asked >>>>> of the persistent store, >>>>> return the same document. There is no effective way to know what all >>>>> names which will return that >>>>> document. When a document is modified, it is removed from the cache but >>>>> the only version removed is it's >>>>> "real" name. All of the other names for it linger in the cache eating up >>>>> memory and threatening to >>>>> provide someone stale data. >>>>> Instead of caching the document, we could cache a pointer to the document >>>>> and when it became stale, >>>>> the pointer could be set to null and then any other name under which that >>>>> document was cached would look >>>>> up a null pointer and the cache logic could remove it. >>>>> >>>>> I would like to add it to xwiki-platform-store-api module and it will >>>>> look roughly like this: >>>>> >>>>> package org.xwiki.store; >>>>> >>>>> public final class Pointer<T> >>>>> { >>>>> /** The thing which this pointer points to. */ >>>>> public T target; >>>>> } >>>>> >>>>> >>>>> WDYT? >>>> >>>> Why is there several cache keys for the same document ? Can't we make >>>> sure a same document always use the same key ? >>> >>> When you get a document and put it in the cache, you can put it under it's >>> canonical key which might, >>> for instance, be xwiki:Main.WebHome:en but most of the requests for that >>> document will go to >>> xwiki:Main.WebHome (which returns the same document from the store). If you >>> refuse to cache under >>> any key but the canonical key, you will defeat most of the cache's >>> usefulness. >>> >>> BTW: This is the issue: http://jira.xwiki.org/jira/browse/XWIKI-6170 >>> >> Couldn't you just complete the ID with the language information when >> it's missing before querying the cache? > > The problem is that each document can have its own default language so > there is no way to complete the language information without the > proper XWikiDocument coming from the database. > I see. Well a quick&dirty solution would be to cache also the default language :)
xwiki:Space.Document:defaultLanguage -> en xwiki:Space.Document:en -> document in english xwiki:Space.Document:fr -> document in french ... So when a document ID doesn't have the language specified, you can retrieve the information from the cache and complete the ID. This is an additional get on the cache which could introduce a performance issue: I don't know how many times an incomplete ID is used for retrieving a document. -Fabio >> >> -Fabio >> >>> Caleb >>> >>>> >>>>> >>>>> Caleb >>>>> >>>>> _______________________________________________ >>>>> devs mailing list >>>>> [email protected] >>>>> http://lists.xwiki.org/mailman/listinfo/devs >>>>> >>>> >>>> >>>> >>> >>> _______________________________________________ >>> devs mailing list >>> [email protected] >>> http://lists.xwiki.org/mailman/listinfo/devs >>> >> _______________________________________________ >> devs mailing list >> [email protected] >> http://lists.xwiki.org/mailman/listinfo/devs >> > > > > -- > Thomas Mortagne > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

