*/
protected function doIsEmpty() {
$dbr = $this->getReplicaDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbr );
try {
$found = $dbr->selectField( // unclaimed job
'job', '1', [ 'job_cmd' => $this->type, 'job_token' => '' ], __METHOD__
return $size;
}
+ $dbr = $this->getReplicaDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbr );
try {
- $dbr = $this->getReplicaDB();
$size = (int)$dbr->selectField( 'job', 'COUNT(*)',
[ 'job_cmd' => $this->type, 'job_token' => '' ],
__METHOD__
}
$dbr = $this->getReplicaDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbr );
try {
$count = (int)$dbr->selectField( 'job', 'COUNT(*)',
[ 'job_cmd' => $this->type, "job_token != {$dbr->addQuotes( '' )}" ],
}
$dbr = $this->getReplicaDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbr );
try {
$count = (int)$dbr->selectField( 'job', 'COUNT(*)',
[
*/
protected function doBatchPush( array $jobs, $flags ) {
$dbw = $this->getMasterDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbw );
// In general, there will be two cases here:
// a) sqlite; DB connection is probably a regular round-aware handle.
// If the connection is busy with a transaction, then defer the job writes
*/
protected function doPop() {
$dbw = $this->getMasterDB();
- try {
- $autoTrx = $dbw->getFlag( DBO_TRX ); // get current setting
- $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
- $scopedReset = new ScopedCallback( function () use ( $dbw, $autoTrx ) {
- $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore old setting
- } );
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbw );
+ $job = false; // job popped off
+ try {
$uuid = wfRandomString( 32 ); // pop attempt
- $job = false; // job popped off
do { // retry when our row is invalid or deleted as a duplicate
// Try to reserve a row in the DB...
if ( in_array( $this->order, [ 'fifo', 'timestamp' ] ) ) {
*/
protected function claimRandom( $uuid, $rand, $gte ) {
$dbw = $this->getMasterDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbw );
// Check cache to see if the queue has <= OFFSET items
$tinyQueue = $this->cache->get( $this->getCacheKey( 'small' ) );
*/
protected function claimOldest( $uuid ) {
$dbw = $this->getMasterDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbw );
$row = false; // the row acquired
do {
}
$dbw = $this->getMasterDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbw );
try {
- $autoTrx = $dbw->getFlag( DBO_TRX ); // get current setting
- $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
- $scopedReset = new ScopedCallback( function () use ( $dbw, $autoTrx ) {
- $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore old setting
- } );
-
// Delete a row with a single DELETE without holding row locks over RTTs...
$dbw->delete( 'job',
[ 'job_cmd' => $this->type, 'job_id' => $job->metadata['id'] ], __METHOD__ );
// maintained. Having only the de-duplication registration succeed would cause
// jobs to become no-ops without any actual jobs that made them redundant.
$dbw = $this->getMasterDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbw );
+
$cache = $this->dupCache;
$dbw->onTransactionCommitOrIdle(
function () use ( $cache, $params, $key ) {
*/
protected function doDelete() {
$dbw = $this->getMasterDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbw );
try {
$dbw->delete( 'job', [ 'job_cmd' => $this->type ] );
} catch ( DBError $e ) {
*/
protected function getJobIterator( array $conds ) {
$dbr = $this->getReplicaDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbr );
try {
return new MappedIterator(
$dbr->select( 'job', self::selectFields(), $conds ),
protected function doGetSiblingQueuesWithJobs( array $types ) {
$dbr = $this->getReplicaDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbr );
// @note: this does not check whether the jobs are claimed or not.
// This is useful so JobQueueGroup::pop() also sees queues that only
// have stale jobs. This lets recycleAndDeleteStaleJobs() re-enqueue
protected function doGetSiblingQueueSizes( array $types ) {
$dbr = $this->getReplicaDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbr );
+
$res = $dbr->select( 'job', [ 'job_cmd', 'COUNT(*) AS count' ],
[ 'job_cmd' => $types ], __METHOD__, [ 'GROUP BY' => 'job_cmd' ] );
$now = time();
$count = 0; // affected rows
$dbw = $this->getMasterDB();
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedNoTrxFlag( $dbw );
try {
if ( !$dbw->lock( "jobqueue-recycle-{$this->type}", __METHOD__, 1 ) ) {
}
}
+ /**
+ * @param IDatabase $db
+ * @return ScopedCallback
+ */
+ private function getScopedNoTrxFlag( IDatabase $db ) {
+ $autoTrx = $db->getFlag( DBO_TRX ); // get current setting
+ $db->clearFlag( DBO_TRX ); // make each query its own transaction
+
+ return new ScopedCallback( function () use ( $db, $autoTrx ) {
+ if ( $autoTrx ) {
+ $db->setFlag( DBO_TRX ); // restore old setting
+ }
+ } );
+ }
+
/**
* @param string $property
* @return string