If a Job class has a subclass that has the same run() method as its superclass, and tries to commit during the job, things can get very confused.
In JobRunner::executeJob (introduced in 6c73b32fd5b2a0c17d0fb32935804b6457ccd992):
$fnameTrxOwner = get_class( $job ) . '::run'; // give run() outer scope $lbFactory->beginMasterChanges( $fnameTrxOwner );
If for instance there's a job class WebVideoTranscodeJob and a subclass WebVideoTranscodeJobHighPriority (doing some exploratory work on T155098), then the METHOD value passed as $fname inside 'WebVideoTranscodeJobHighPriority::run' is actually 'WebVideoTranscodeJob::run'. This results in the LoadBalancer throwing an error:
DBTransactionError: WebVideoTranscodeJob::run: transaction round 'WebVideoTranscodeJobHighPriority::run' still running.
This at least happens if the job tries to close out the existing transaction, as the transcode jobs do.
I can probably work around this on my end by using separate command queues but not a subclass...
Affected: