Hi, Yes, I am responsible for that. Sorry for the trouble.
Thanks for fixing it Sergiu. -Eduard On Tue, May 22, 2012 at 5:36 PM, Sergiu Dumitriu <[email protected]> wrote: > On 05/22/2012 06:55 AM, Alexander Pokahr wrote: > >> Dear XWiki developers, >> >> the last couple of days I tried setting up two redundant XWiki servers >> using MySQL master/slave replication. Unfortunately MySQL replication >> produced errors, because the slave wiki also wrote on the DB. >> Thus, I revoked update privileges from the xwiki DB user on the slave. >> Now replication worked, but the slave XWiki failed to start and instead >> always threw an exception in XWiki.getUserClass(). >> >> Unlike mentioned in previous findings by others >> (http://lists.xwiki.org/**pipermail/devs/2011-January/**045992.html<http://lists.xwiki.org/pipermail/devs/2011-January/045992.html> >> ), >> currently XWiki seems to be unable to operate on a read-only DB. >> >> I think I tracked the issue to the following code in XWiki.getUserClass() >> (lines 3000ff, shown below). As you can see, the if block only operates on >> a local string builder, but does not change the page. Nevertheless, >> needsUpdate is set to true, thus forcing XWiki to save the document, >> which doesn't work on a read-only DB. >> This happens every time XWiki starts. >> >> // Email field custom display (email obfuscation). >> PropertyClass emailProperty = (PropertyClass) bclass.get("email"); >> if (!emailProperty.**isCustomDisplayed(context)) { >> StringBuilder builder = new StringBuilder(); >> builder.append("{{velocity}}\**n"); >> builder.append("#if ($xcontext.action == 'edit' || $xcontext.action == >> 'inline')\n"); >> // Line broken in 2 because it was too long. >> builder.append(" {{html}}<input id='$prefix$name' type='text'"); >> builder.append(" name='$prefix$name' value='$value' />{{/html}}\n"); >> builder.append("#else\n"); >> builder.append(" ## Allow $obfuscateEmail to be set in some other >> place.\n"); >> builder.append(" #if(\"$obfuscateEmail\" == 'false')\n"); >> builder.append(" $value\n"); >> builder.append(" #else\n"); >> builder.append(" $value.replaceAll('@.*', '@ xxxxxx')\n"); >> builder.append(" #end\n"); >> builder.append("#end\n"); >> builder.append("{{/velocity}}"**); >> needsUpdate = true; >> } >> ... >> if (needsUpdate) { >> saveDocument(doc, context); >> } >> >> >> Without the 'needsUpdate = true;' the slave xwiki now starts fine and >> seems to >> work properly. Note, that i tried setting 'xwiki.readonly=yes' in >> xwiki.cfg as also >> recommended in the previous thread, but that had no effect on the above >> issue. >> >> I would prefer being able to use the official xwiki distribution instead >> of my >> own fixed build. Is there any chance that a fix to the above issue >> (given my >> evaluation is indeed correct) will make it into some upcoming >> release/milestone? >> Unfortunately, I do not understand the intention of the email >> obfuscation code >> above, otherwise I maybe would have been able to supply a patch myself. >> >> Kind regards and thanks in advance, >> Alex >> > > It looks like that code is broken, not because it sets needsUpdate, which > it should, but because it doesn't actually change the emailProperty at all. > The StringBuilder that it builds is completely ignored, and the next time > that the getUserClass method is going to be called, it will enter again on > the same branch. > > I fixed this as > http://jira.xwiki.org/browse/**XWIKI-7846<http://jira.xwiki.org/browse/XWIKI-7846>in > https://github.com/xwiki/**xwiki-platform/commit/** > cd54f71367ed8efbe81c6e1d052c15**724be0905e<https://github.com/xwiki/xwiki-platform/commit/cd54f71367ed8efbe81c6e1d052c15724be0905e> > -- > Sergiu Dumitriu > http://purl.org/net/sergiu/ > > ______________________________**_________________ > devs mailing list > [email protected] > http://lists.xwiki.org/**mailman/listinfo/devs<http://lists.xwiki.org/mailman/listinfo/devs> > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

