On Fri, Apr 26, 2019 at 10:19 AM Jim Hu <[email protected]> wrote:

> The code is throwing the mass commit error only if something interrupts
> processing before execution is complete - that includes my testing with
> die() statements or other errors that I’ve been tracking down. So it seems
> like doing execution via the Special page is caching all database
> interactions into some unknown number of transactions that never get
> committed until page execution makes it all the way to the end. If it
> doesn’t, the mass commit error happens.
>

MediaWiki generally wraps database requests in an automatic transaction (at
least when you are in a web request - jobs and maintenance scripts have
somewhat different rules). There are ways to push callbacks into a followup
transaction too, with things like DeferredUpdate or
Database::onTransactionCommitOrIdle. There shouldn't really be a way for a
special page to cause errors with that, other than manually calling
commit/rollback methods in the wrong way. die() would prevent the
transaction from being committed but wouldn't generate an error, I think.


> It looks to me like in the earlier versions of MW creating a page is
> committed during execution, so one can pull a revision for that page and do
> stuff to it in the same pass through the special page execution. Now it’s
> acting like there is not revision to pull after doing
> WikiPage::doEditContent(). When I comment out the right blocks of code, I
> can  see that I create the desired page from my template, but my attempt to
> pull the revision text back out and do something to it blanks the page and
> causes errors from code that expects there to be text in the revision.
>

That sounds like consistent read [1] issues - MySQL transactions don't see
rows that have been newly inserted (in the same transaction) under certain
circumstances. The usual workaround for that is to do a locking read, e.g.
use the 'LOCK IN SHARE MODE' option with Database::select.

[1] https://dev.mysql.com/doc/refman/8.0/en/innodb-consistent-read.html
_______________________________________________
Wikitech-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to