Thx Wouter! I'm certainly curious about the results. Regards, Bart
On Mon, Mar 15, 2010 at 1:55 PM, Wouter Zelle <[email protected]> wrote: > Hi Bart, > > I've attached the patch to SiteMenuLinkRewriterImpl. We still have to do a > extensive test (hopefully next weekend) to determine how well this patch > works. I'll let you know about the results. > > Regards, > > Wouter Zelle > > > On Fri, Mar 12, 2010 at 11:09, Bart van der Schans < > [email protected]> wrote: > >> Hi Wouter, >> >> Thanks for your analysis. I'm not that familiar with the >> SitemenuLinkRewriterTranformer and it has been a long time since I had >> a look at the code. It sounds like there is something going wrong in >> there. I agree with your analysis and proposed (line of) change. Could >> you create an initial patch? >> >> Regards, >> Bart >> >> On Thu, Mar 11, 2010 at 12:40 PM, Wouter Zelle <[email protected]> >> wrote: >> > Hi, >> > >> > Occasionally we see incorrect translations of documents in the repository >> to >> > external urls. The same SitemenuLinkRewriterTranformer should never be >> used >> > by seperate threads, so the cause is probably in the >> > SiteMenuLinkRewriterImpl. One of the incorrect translations is for a >> > 'perfect match' (location is the same as the datasource), so the error >> > should be between lines 164-200 of the SiteMenuLinkRewriterImpl. In that >> > code range I noticed a fairly classic multi-threading bug (roughly >> speaking, >> > it is 'double-checked locking') on line 168: >> > >> > if (!(cache.containsKey(cacheKeyList) && cache.containsKey(cacheKeyMap))) >> { >> > initialize(host); >> > } >> > >> > The initialize method is synchronized, but since the check isn't, a later >> > thread can use a semi-initialized cache, while an earlier thread is still >> in >> > the initialize method. A partial solution to this problem might be to >> place >> > a synchronize-block (locking the cache) around the code above (removing >> the >> > synchronization from the initialize method), which should prevent this >> > problem, would prevent duplicate initializations and would block other >> > threads (who are already translating) from seeing an partially >> initialized >> > cache (since the cache has synchronized methods, so cache.get will block >> > during the initialize). Of course, threads still might have to deal with >> a >> > cache that empties and/or get filled half-way through a translate, but >> > solving this requires a lot more synchronization. >> > >> > I expect that the performance penalty of this change will be minimal. Do >> you >> > agree that this might be a good change? >> > >> > Regards, >> > >> > Wouter Zelle >> > ******************************************** >> > Hippocms-dev: Hippo CMS 6 development public mailinglist >> > >> > Searchable archives can be found at: >> > MarkMail: http://hippocms-dev.markmail.org >> > Nabble: http://www.nabble.com/Hippo-CMS-f26633.html >> > >> > >> >> >> >> -- >> Hippo B.V. - Amsterdam >> Oosteinde 11, 1017 WT, Amsterdam, +31(0)20-5224466 >> >> Hippo USA Inc. - San Francisco >> 101 H Street, Suite Q, Petaluma CA, 94952-3329, +1 (707) 773-4646 >> ----------------------------------------------------------------- >> http://www.onehippo.com - [email protected] >> ----------------------------------------------------------------- >> ******************************************** >> Hippocms-dev: Hippo CMS 6 development public mailinglist >> >> Searchable archives can be found at: >> MarkMail: http://hippocms-dev.markmail.org >> Nabble: http://www.nabble.com/Hippo-CMS-f26633.html >> >> > > ******************************************** > Hippocms-dev: Hippo CMS 6 development public mailinglist > > Searchable archives can be found at: > MarkMail: http://hippocms-dev.markmail.org > Nabble: http://www.nabble.com/Hippo-CMS-f26633.html > > > -- Hippo B.V. - Amsterdam Oosteinde 11, 1017 WT, Amsterdam, +31(0)20-5224466 Hippo USA Inc. - San Francisco 101 H Street, Suite Q, Petaluma CA, 94952-3329, +1 (707) 773-4646 ----------------------------------------------------------------- http://www.onehippo.com - [email protected] ----------------------------------------------------------------- ******************************************** Hippocms-dev: Hippo CMS 6 development public mailinglist Searchable archives can be found at: MarkMail: http://hippocms-dev.markmail.org Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
