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

Reply via email to