On Wed, Aug 10, 2016 at 10:14 AM, Fabian Pichler <[email protected]> wrote: > Hi Thomas > > Thanks for responding and thanks for supporting the suggested solution. > > I understand the doc.Key-issue that you mentioned. Yet, I think this is not > a > XWikiCacheStore#loadXWikDoc concern. In my understanding the expected > document > to load is defined by the document-reference and the language. Thus the > Hibernate-Store must be concerned in setting the context database according > to the Wiki-Reference before loading the document. This is acctually already > done in the XWiki#getDocument call. I agree that this might be the wrong > place to do it. > Thus, I would suggest to fix this issue in the XWikiHibernateStore on a > seperate jira-issue.
In an ideal world it would be fixed in XWikiHibernateStore I agree but this would break retro compatibility (yeah always a pain). That's why I talked about providing a new API. So right now in practice using a combination of context wiki and document reference is part of the API definition and can be applied at XWikiCacheStore too. Note that in practice this is actually a pretty rare case since anyone is supposed to use XWiki#getDocument which make sure the context contain the document wiki. But this can still happen since this is a very old and public API. > Maybe this could be combined with a significant performance improvment in > loading > the documents with fewer sql-queries per loading action. > > With XWIKI-13623 I try to tackle the issue about randomly loosing BaseObject > data because of an not thread safe construction and publication of > XWikiDocument > java objects in XWikiCacheStore. Because this issue gave us a big headache > in > production multiple times, I solved it in our project in the way mentioned. > > If the xwiki-dev team supports the suggested solution, I would be willing > to proceed > and prepare a pull request for an adapted XWikiCacheStore fix. > > Kind regards, > Fabian > > > 2016-08-08 12:07 GMT+02:00 Thomas Mortagne <[email protected]>: > >> XWikiCacheStore#loadXWikiDoc is actually a bit tricker than that right >> now for retro compatibility and laziness (really need to rewrite this >> whole store API) reasons and before applying what you propose the way >> it deals with document uid should be modified a bit. >> >> Hibernate store is always loading the document from the wiki indicated >> in the context completely ignoring the wiki in the XWikiDocument >> object. That means that doc.getKey() may be different than the key of >> the document that will actually come from the hibernate store. So >> before adding DocumentLoader jingling a first thing to do is generate >> the initial cache key with a mix of the wiki id located in the context >> and the XWikiDocument reference. >> >> Then what you propose sounds good. >> >> On Mon, Aug 8, 2016 at 8:53 AM, Fabian Pichler >> <[email protected]> wrote: >> > Hi devs >> > >> > http://jira.xwiki.org/browse/XWIKI-13623 >> > I would like to discuss the suggested solution, before I start >> implementing >> > it: >> > >> > *I suggest the following solution:* >> > Introducing a nested DocumentLoader class which loads the document >> calling >> > the basestore loadXWikiDoc in a synchronized getDocOrLoad method. The >> > DocumentLoader objects gets instantiated in the cacheStore on a cache >> miss. >> > It then gets stored in a ConcurrentHashMap using the same key which is >> used >> > for the document cache (DocumentReference including language). Using >> > putIfAbsent to insert the DocumentLoader and calling the synchronized >> load >> > method on the object in the map solves the memory visibility issue and >> > moreover ensures that the same XWikiDocument is not loaded multiple times >> > concurrently from the database. It is still possible to load different >> > documents in parallel. A DocumentLoader will load the XWikiDocument only >> > once and the returns the identical document object on any following call >> of >> > the synchronized getDocOrLoad method. >> > >> > WDYT? >> > >> > Kind Regards, >> > Fabian >> > _______________________________________________ >> > 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 -- Thomas Mortagne _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

