[JobQueueSecondTestQueue] Support read-only mode.
authorPetr Pchelko <ppchelko@wikimedia.org>
Mon, 5 Mar 2018 19:44:11 +0000 (16:44 -0300)
committerPetr Pchelko <ppchelko@wikimedia.org>
Mon, 5 Mar 2018 19:44:11 +0000 (16:44 -0300)
In order to switch non-idempotent jobs without losing the
backlog in redis we should support read-only mode in the queue,
where the messages only gets written into the new queue.

Change-Id: I2e9cb2d9cbbd2d657d042b55d4ea0819d21cdd6f

includes/jobqueue/JobQueueSecondTestQueue.php

index 4e3409a..01f467f 100644 (file)
@@ -27,6 +27,11 @@ class JobQueueSecondTestQueue extends JobQueue {
         */
        private $debugQueue;
 
+       /**
+        * @var bool
+        */
+       private $onlyWriteToDebugQueue;
+
        protected function __construct( array $params ) {
                if ( !isset( $params['mainqueue'] ) ) {
                        throw new MWException( "mainqueue parameter must be provided to the debug queue" );
@@ -39,6 +44,7 @@ class JobQueueSecondTestQueue extends JobQueue {
                $conf = [ 'wiki' => $params['wiki'], 'type' => $params['type'] ];
                $this->mainQueue = JobQueue::factory( $params['mainqueue'] + $conf );
                $this->debugQueue = JobQueue::factory( $params['debugqueue'] + $conf );
+               $this->onlyWriteToDebugQueue = isset( $params['readonly'] ) ? $params['readonly'] : false;
 
                // We need to construct parent after creating the main and debug queue
                // because super constructor calls some methods we delegate to the main queue.
@@ -118,7 +124,9 @@ class JobQueueSecondTestQueue extends JobQueue {
         * @param int $flags
         */
        protected function doBatchPush( array $jobs, $flags ) {
-               $this->mainQueue->doBatchPush( $jobs, $flags );
+               if ( !$this->onlyWriteToDebugQueue ) {
+                       $this->mainQueue->doBatchPush( $jobs, $flags );
+               }
 
                try {
                        $this->debugQueue->doBatchPush( $jobs, $flags );