AbuseFilter: Change format of database logging/ performance

Authored by hoo.


AbuseFilter: Change format of database logging/ performance

AF is setting several lazy load variables for the currently editing user.
To do this it's passing along the user name extracted from a user object
and generating a new user object later from that name which is of course
pointless. With this patch I'll pass user objects directly to prevent that.
On top of that I've deprecated a method in AFComputedVariable::compute which
was redundant as there is a more generic one which can solve that task
just fine.

Furthermore I've changed the logging behaviour from serializing the whole
AbuseFilterVariableHolder object to only store the variables. That has two
major advantages:

  • The amount of data that needs to be saved on a filter hit is reduced to about 1/10 of what the old version needed.
  • This is much more forward compatible as the old way of saving this relied on the class structure to stay the same while this is a simple array containing the vars.

On top of that we now only log variables already set by the time
a filter is hit. On top of the obvious performance increasement
that makes it easier for the user to spot the relevant data.

Another thing this change alters is the way the AbuseFilter internally
works with AbuseFilterVariableHolder objects. Right now we use one for
testing the filter(s) and later we use another one to compute the same
data again in case a filter was hit (for logging)!

This is not thoroughly tested yet, but way more sane than what we're
currently doing!

Change-Id: Ib15e7501bff32a54afe2d103ef5aedb950e58ef6


hooFeb 28 2013, 9:35 PM
rEABF957fa41c5a61: Localisation updates from http://translatewiki.net.