Ejegg has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/353345 )

Change subject: Use upstream PHP-Queue
......................................................................

Use upstream PHP-Queue

No longer maintaining our own fork.

Change-Id: Id3f11945265647f5b42a8e0ca8a0742fdc6cc0c7
---
M composer.json
M composer.lock
M vendor/autoload.php
D vendor/coderkungfu/php-queue/.gitreview
M vendor/coderkungfu/php-queue/README.md
M vendor/coderkungfu/php-queue/composer.json
M vendor/coderkungfu/php-queue/demo/queues/BeanstalkSampleQueue.php
M vendor/coderkungfu/php-queue/demo/runners/README.md
M vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Beanstalkd.php
M vendor/coderkungfu/php-queue/src/PHPQueue/Backend/IronMQ.php
M vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Memcache.php
M vendor/coderkungfu/php-queue/src/PHPQueue/Backend/MongoDB.php
M vendor/coderkungfu/php-queue/src/PHPQueue/Backend/PDO.php
M vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Predis.php
M vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Stomp.php
A vendor/coderkungfu/php-queue/src/PHPQueue/Exception/JsonException.php
D vendor/coderkungfu/php-queue/src/PHPQueue/Interfaces/IndexedFifoQueueStore.php
D vendor/coderkungfu/php-queue/src/PHPQueue/Interfaces/KeyValueStore.php
A vendor/coderkungfu/php-queue/src/PHPQueue/Json.php
M vendor/coderkungfu/php-queue/test/PHPQueue/Backend/PredisTest.php
D vendor/coderkungfu/php-queue/test/PHPQueue/Backend/PredisZsetTest.php
M vendor/composer/ClassLoader.php
M vendor/composer/LICENSE
M vendor/composer/autoload_real.php
A vendor/composer/autoload_static.php
M vendor/composer/installed.json
26 files changed, 322 insertions(+), 545 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/FundraisingEmailUnsubscribe
 refs/changes/45/353345/1

diff --git a/composer.json b/composer.json
index f975cc7..9b7865b 100644
--- a/composer.json
+++ b/composer.json
@@ -9,11 +9,5 @@
                "coderkungfu/php-queue": "dev-master",
                "predis/predis": "^1.1",
                "twig/twig": "^1.24"
-       },
-       "repositories": [
-               {
-                       "type": "vcs",
-                       "url": 
"https://gerrit.wikimedia.org/r/p/wikimedia/fundraising/php-queue.git";
-               }
-       ]
+       }
 }
diff --git a/composer.lock b/composer.lock
index dd9cb48..7adb902 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,7 @@
         "Read more about it at 
https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file";,
         "This file is @generated automatically"
     ],
-    "hash": "8cdabc8ebe4372d8741ce78469836c0a",
-    "content-hash": "3adc65bd0805604d01cb5fddeea2f5f3",
+    "content-hash": "1c0373bbf4c873b02a35dcb9b211010c",
     "packages": [
         {
             "name": "clio/clio",
@@ -46,15 +45,21 @@
                 "console",
                 "daemon"
             ],
-            "time": "2014-06-22 14:49:41"
+            "time": "2014-06-22T14:49:41+00:00"
         },
         {
             "name": "coderkungfu/php-queue",
             "version": "dev-master",
             "source": {
                 "type": "git",
-                "url": 
"https://gerrit.wikimedia.org/r/p/wikimedia/fundraising/php-queue.git";,
-                "reference": "14198ba1f7d4868933649a85621a3955965e83cd"
+                "url": "https://github.com/CoderKungfu/php-queue.git";,
+                "reference": "dd8412f105632d31cdd77933ec40a08640752c99"
+            },
+            "dist": {
+                "type": "zip",
+                "url": 
"https://api.github.com/repos/CoderKungfu/php-queue/zipball/dd8412f105632d31cdd77933ec40a08640752c99";,
+                "reference": "dd8412f105632d31cdd77933ec40a08640752c99",
+                "shasum": ""
             },
             "require": {
                 "clio/clio": "0.1.*",
@@ -62,15 +67,19 @@
                 "php": ">=5.3.0"
             },
             "require-dev": {
-                "jakub-onderka/php-parallel-lint": "0.9",
-                "phpunit/phpunit": "4.4.*"
+                "amazonwebservices/aws-sdk-for-php": "dev-master",
+                "aws/aws-sdk-php": "dev-master",
+                "ext-memcache": "*",
+                "iron-io/iron_mq": "dev-master",
+                "microsoft/windowsazure": "dev-master",
+                "mrpoundsign/pheanstalk-5.3": "dev-master",
+                "predis/predis": "1.*"
             },
             "suggest": {
                 "Respect/Rest": "For a REST server to post job data",
                 "amazonwebservices/aws-sdk-for-php": "For AWS SQS backend 
support (legacy version)",
                 "aws/aws-sdk-php": "For AWS SQS backend support",
                 "clio/clio": "Support for daemonizing PHP CLI runner",
-                "ext-memcache": "*",
                 "fusesource/stomp-php": "For the STOMP backend",
                 "iron-io/iron_mq": "For IronMQ backend support",
                 "microsoft/windowsazure": "For Windows Azure Service Bus 
backend support",
@@ -89,12 +98,7 @@
                     "PHPQueue": "src/"
                 }
             },
-            "scripts": {
-                "test": [
-                    "parallel-lint . --exclude vendor",
-                    "phpunit"
-                ]
-            },
+            "notification-url": "https://packagist.org/downloads/";,
             "license": [
                 "MIT"
             ],
@@ -110,7 +114,7 @@
                 "queue",
                 "transaction"
             ],
-            "time": "2016-08-05 19:16:32"
+            "time": "2017-04-17 14:11:55"
         },
         {
             "name": "monolog/monolog",
@@ -188,7 +192,7 @@
                 "logging",
                 "psr-3"
             ],
-            "time": "2016-07-29 03:23:52"
+            "time": "2016-07-29T03:23:52+00:00"
         },
         {
             "name": "predis/predis",
@@ -238,7 +242,7 @@
                 "predis",
                 "redis"
             ],
-            "time": "2016-06-16 16:22:20"
+            "time": "2016-06-16T16:22:20+00:00"
         },
         {
             "name": "psr/log",
@@ -276,7 +280,7 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2012-12-21 11:40:51"
+            "time": "2012-12-21T11:40:51+00:00"
         },
         {
             "name": "twig/twig",
@@ -337,7 +341,7 @@
             "keywords": [
                 "templating"
             ],
-            "time": "2016-09-01 17:50:53"
+            "time": "2016-09-01T17:50:53+00:00"
         }
     ],
     "packages-dev": [],
diff --git a/vendor/autoload.php b/vendor/autoload.php
index 7fabe4a..f834326 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -2,6 +2,6 @@
 
 // autoload.php @generated by Composer
 
-require_once __DIR__ . '/composer' . '/autoload_real.php';
+require_once __DIR__ . '/composer/autoload_real.php';
 
 return ComposerAutoloaderInit098acbbb690b1b9626b59f13525c3e22::getLoader();
diff --git a/vendor/coderkungfu/php-queue/.gitreview 
b/vendor/coderkungfu/php-queue/.gitreview
deleted file mode 100644
index ffb389a..0000000
--- a/vendor/coderkungfu/php-queue/.gitreview
+++ /dev/null
@@ -1,6 +0,0 @@
-[gerrit]
-host=gerrit.wikimedia.org
-port=29418
-project=wikimedia/fundraising/php-queue.git
-defaultbranch=master
-defaultrebase=0
diff --git a/vendor/coderkungfu/php-queue/README.md 
b/vendor/coderkungfu/php-queue/README.md
index c69cef1..74ff0e7 100644
--- a/vendor/coderkungfu/php-queue/README.md
+++ b/vendor/coderkungfu/php-queue/README.md
@@ -1,4 +1,4 @@
-#PHP-Queue#
+# PHP-Queue #
 [![Gitter](https://badges.gitter.im/Join 
Chat.svg)](https://gitter.im/CoderKungfu/php-queue?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
 
 A unified front-end for different queuing backends. Includes a REST server, 
CLI interface and daemon runners.
@@ -190,16 +190,6 @@
 * FifoQueueStore
 
 A first in first out queue accessed by push and pop.
-
-* IndexedFifoQueueStore
-
-Messages are indexed along one column as they are pushed into a FIFO queue,
-otherwise these behave like FifoQueueStore. clear() deletes records by index.
-There is no get() operation, you'll need a KeyValueStore for that.
-
-* KeyValueStore
-
-Jobs can be retrieved and deleted by their index.
 
 ---
 ## License ##
diff --git a/vendor/coderkungfu/php-queue/composer.json 
b/vendor/coderkungfu/php-queue/composer.json
index f75d7ef..085c069 100644
--- a/vendor/coderkungfu/php-queue/composer.json
+++ b/vendor/coderkungfu/php-queue/composer.json
@@ -23,21 +23,19 @@
         "clio/clio": "0.1.*"
     },
     "require-dev": {
-        "jakub-onderka/php-parallel-lint": "0.9",
-        "phpunit/phpunit": "4.4.*"
-    },
-    "scripts": {
-        "test": [
-            "parallel-lint . --exclude vendor",
-            "phpunit"
-        ]
+        "mrpoundsign/pheanstalk-5.3": "dev-master",
+        "aws/aws-sdk-php": "dev-master",
+        "amazonwebservices/aws-sdk-for-php": "dev-master",
+        "predis/predis": "1.*",
+        "iron-io/iron_mq": "dev-master",
+        "ext-memcache": "*",
+        "microsoft/windowsazure": "dev-master"
     },
     "suggest": {
         "predis/predis": "For Redis backend support",
         "mrpoundsign/pheanstalk-5.3": "For Beanstalkd backend support",
         "aws/aws-sdk-php": "For AWS SQS backend support",
         "amazonwebservices/aws-sdk-for-php": "For AWS SQS backend support 
(legacy version)",
-        "ext-memcache": "*",
         "pecl-mongodb": "For MongoDB backend support",
         "clio/clio": "Support for daemonizing PHP CLI runner",
         "iron-io/iron_mq": "For IronMQ backend support",
diff --git a/vendor/coderkungfu/php-queue/demo/queues/BeanstalkSampleQueue.php 
b/vendor/coderkungfu/php-queue/demo/queues/BeanstalkSampleQueue.php
index 158f339..9335e4f 100644
--- a/vendor/coderkungfu/php-queue/demo/queues/BeanstalkSampleQueue.php
+++ b/vendor/coderkungfu/php-queue/demo/queues/BeanstalkSampleQueue.php
@@ -19,10 +19,10 @@
                         );
     }
 
-    public function addJob($newJob = null)
+    public function addJob($newJob = null, $DEFAULT_PRIORITY=1024, 
$DEFAULT_DELAY=0, $DEFAULT_TTR=60)
     {
         $formatted_data = array('worker'=>$this->queueWorker, 'data'=>$newJob);
-        $this->dataSource->add($formatted_data);
+        $this->dataSource->add($formatted_data, $DEFAULT_PRIORITY, 
$DEFAULT_DELAY, $DEFAULT_TTR);
 
         return true;
     }
diff --git a/vendor/coderkungfu/php-queue/demo/runners/README.md 
b/vendor/coderkungfu/php-queue/demo/runners/README.md
index 9c91041..5ddab8d 100644
--- a/vendor/coderkungfu/php-queue/demo/runners/README.md
+++ b/vendor/coderkungfu/php-queue/demo/runners/README.md
@@ -185,7 +185,7 @@
 1. Add this to the top of your script:
 
        ```
-#!/usr/bin/php
+# !/usr/bin/php
 <?php
 #
 # BeanstalkSampleDaemon    Starts the PHP-Queue runner for BeanstalkSample
diff --git a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Beanstalkd.php 
b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Beanstalkd.php
index 2d9210f..f763e08 100644
--- a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Beanstalkd.php
+++ b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Beanstalkd.php
@@ -3,11 +3,11 @@
 
 use PHPQueue\Exception\BackendException;
 use PHPQueue\Exception\JobNotFoundException;
-use PHPQueue\Interfaces\IndexedFifoQueueStore;
+use PHPQueue\Interfaces\FifoQueueStore;
 
 class Beanstalkd
     extends Base
-    implements IndexedFifoQueueStore
+    implements FifoQueueStore
 {
     public $server_uri;
     public $tube;
@@ -34,9 +34,9 @@
      * @param  array   $data
      * @return boolean Status of saving
      */
-    public function add($data=array())
+    public function add($data=array(), $DEFAULT_PRIORITY=1024, 
$DEFAULT_DELAY=0, $DEFAULT_TTR=60)
     {
-        $this->push($data);
+        $this->push($data, $DEFAULT_PRIORITY, $DEFAULT_DELAY, $DEFAULT_TTR);
         return true;
     }
 
@@ -44,10 +44,10 @@
      * @param array $data
      * @return integer Primary ID of the new record.
      */
-    public function push($data)
+    public function push($data, $DEFAULT_PRIORITY=1024, $DEFAULT_DELAY=0, 
$DEFAULT_TTR=60)
     {
         $this->beforeAdd();
-        $response = 
$this->getConnection()->useTube($this->tube)->put(json_encode($data));
+        $response = 
$this->getConnection()->useTube($this->tube)->put(json_encode($data), 
$DEFAULT_PRIORITY, $DEFAULT_DELAY, $DEFAULT_TTR);
         if (!$response) {
             throw new BackendException("Unable to save job.");
         }
diff --git a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/IronMQ.php 
b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/IronMQ.php
index eb195fd..0cbefd9 100644
--- a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/IronMQ.php
+++ b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/IronMQ.php
@@ -2,11 +2,11 @@
 namespace PHPQueue\Backend;
 
 use PHPQueue\Exception\BackendException;
-use PHPQueue\Interfaces\IndexedFifoQueueStore;
+use PHPQueue\Interfaces\FifoQueueStore;
 
 class IronMQ
     extends Base
-    implements IndexedFifoQueueStore
+    implements FifoQueueStore
 {
     public $token = null;
     public $project_id = null;
diff --git a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Memcache.php 
b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Memcache.php
index a210972..b7c03f1 100644
--- a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Memcache.php
+++ b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Memcache.php
@@ -2,11 +2,9 @@
 namespace PHPQueue\Backend;
 
 use PHPQueue\Exception\BackendException;
-use PHPQueue\Interfaces\KeyValueStore;
 
 class Memcache
     extends Base
-    implements KeyValueStore
 {
     public $servers;
     public $is_persistent = false;
diff --git a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/MongoDB.php 
b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/MongoDB.php
index 86fc6c1..6a4440f 100644
--- a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/MongoDB.php
+++ b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/MongoDB.php
@@ -5,11 +5,9 @@
 
 use PHPQueue\Exception\BackendException;
 use PHPQueue\Exception\JobNotFoundException;
-use PHPQueue\Interfaces\KeyValueStore;
 
 class MongoDB
     extends Base
-    implements KeyValueStore
 {
     public $server_uri;
     public $db_name;
diff --git a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/PDO.php 
b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/PDO.php
index 9d0adbe..86593b0 100644
--- a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/PDO.php
+++ b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/PDO.php
@@ -4,15 +4,11 @@
 use PHPQueue\Exception\BackendException;
 use PHPQueue\Interfaces\AtomicReadBuffer;
 use PHPQueue\Interfaces\FifoQueueStore;
-use PHPQueue\Interfaces\IndexedFifoQueueStore;
-use PHPQueue\Interfaces\KeyValueStore;
 
 class PDO
     extends Base
     implements AtomicReadBuffer,
-        FifoQueueStore,
-        IndexedFifoQueueStore,
-        KeyValueStore
+        FifoQueueStore
 {
     private $connection_string;
     private $db_user;
@@ -39,7 +35,8 @@
             $this->db_table = $options['db_table'];
         }
         if (!empty($options['pdo_options']) && 
is_array($options['pdo_options'])) {
-            $this->pdo_options = array_merge($this->pdo_options, 
$options['pdo_options']);
+               // Use + operator instead of array_merge to preserve integer 
keys
+            $this->pdo_options = $options['pdo_options'] + $this->pdo_options;
         }
     }
 
@@ -154,6 +151,12 @@
         // Get oldest message.
         $sql = sprintf('SELECT `id`, `data` FROM `%s` WHERE 1 ORDER BY id ASC 
LIMIT 1', $this->db_table);
         $sth = $this->getConnection()->prepare($sql);
+
+        // This will be false if the table or collection does not exist
+        if ( ! $sth ) {
+            return null;
+        }
+
         $sth->execute();
 
         $result = $sth->fetch(\PDO::FETCH_ASSOC);
diff --git a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Predis.php 
b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Predis.php
index e74e6a5..26e1306 100644
--- a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Predis.php
+++ b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Predis.php
@@ -6,33 +6,20 @@
 
 use PHPQueue\Exception\BackendException;
 use PHPQueue\Interfaces\AtomicReadBuffer;
-use PHPQueue\Interfaces\KeyValueStore;
 use PHPQueue\Interfaces\FifoQueueStore;
+use PHPQueue\Json;
 
 /**
- * Wraps several styles of redis use:
- *     - If constructed with a "order_key" option, the data will be accessible
- *       as a key-value store, and will also provide pop and push using
- *       $data[$order_key] as the FIFO ordering.  If the ordering value is a
- *       timestamp, for example, then the queue will have real-world FIFO
- *       behavior over time, and even if the data comes in out of order, we 
will
- *       always pop the true oldest record.
- *       If you wish to push to this type of store, you'll also need to provide
- *       the "correlation_key" option so the random-access key can be
- *       extracted from data.
+ * Wraps redis use:
  *     - Pushing scalar data will store it as a queue under queue_name.
  *     - Setting scalar data will store it under the key.
  *     - If data is an array, setting will store it as a hash, under the key.
- *
- * TODO: The different behaviors should be modeled as several backends which
- * perhaps inherit from an AbstractPredis.
  */
 class Predis
     extends Base
     implements
         AtomicReadBuffer,
-        FifoQueueStore,
-        KeyValueStore
+        FifoQueueStore
 {
     const TYPE_STRING='string';
     const TYPE_HASH='hash';
@@ -40,15 +27,10 @@
     const TYPE_SET='set';
     const TYPE_NONE='none';
 
-    // Internal sub-key to hold the ordering.
-    const FIFO_INDEX = 'fifo';
-
     public $servers;
     public $redis_options = array();
     public $queue_name;
     public $expiry;
-    public $order_key;
-    public $correlation_key;
 
     public function __construct($options=array())
     {
@@ -64,13 +46,6 @@
         }
         if (!empty($options['expiry'])) {
             $this->expiry = $options['expiry'];
-        }
-        if (!empty($options['order_key'])) {
-            $this->order_key = $options['order_key'];
-            $this->redis_options['prefix'] = $this->queue_name . ':';
-        }
-        if (!empty($options['correlation_key'])) {
-            $this->correlation_key = $options['correlation_key'];
         }
     }
 
@@ -99,60 +74,10 @@
             throw new BackendException("No queue specified.");
         }
         $encoded_data = json_encode($data);
-        if ($this->order_key) {
-            if (!$this->correlation_key) {
-                throw new BackendException("Cannot push to indexed fifo queue 
without a correlation key.");
-            }
-            $key = $data[$this->correlation_key];
-            if (!$key) {
-                throw new BackendException("Cannot push to indexed fifo queue 
without correlation data.");
-            }
-            $status = $this->addToIndexedFifoQueue($key, $data);
-            if (!self::boolStatus($status)) {
-                throw new BackendException('Couldn\'t push to indexed fifo 
queue: ' . $status->getMessage());
-            }
-        } else {
-            // Note that we're ignoring the "new length" return value, cos I 
don't
-            // see how to make it useful.
-            $this->getConnection()->rpush($this->queue_name, $encoded_data);
-        }
-    }
 
-    /**
-     * Remove stale elements at the top of the queue and return the first real 
entry
-     *
-     * When data expires, it still leaves a queue entry linking to its
-     * correlation ID.  Clear any of these stale entries at the head of
-     * the queue.
-     *
-     * Note that we run this from inside a transaction, to make it less
-     * likely that we'll hit a race condition.
-     *
-     * @param MultiExec $tx transaction we're working within.
-     *
-     * @return string|null Top element's key, or null if the queue is empty.
-     */
-    public function peekWithCleanup(MultiExec $tx)
-    {
-        for (;;) {
-            // Look up the first element in the FIFO ordering.
-            $values = $tx->zrange(Predis::FIFO_INDEX, 0, 0);
-            if ($values) {
-                // Use that value as a key into the key-value block.
-                $key = $values[0];
-                $exists = $tx->exists($key);
-
-                if (!$exists) {
-                    // If the data is missing, then remove from the FIFO index.
-                    $tx->zrem(Predis::FIFO_INDEX, $key);
-                } else {
-                    return $key;
-                }
-            } else {
-                break;
-            }
-        }
-        return null;
+        // Note that we're ignoring the "new length" return value, cos I don't
+        // see how to make it useful.
+        $this->getConnection()->rpush($this->queue_name, $encoded_data);
     }
 
     /**
@@ -165,33 +90,7 @@
         if (!$this->hasQueue()) {
             throw new BackendException("No queue specified.");
         }
-        if ($this->order_key) {
-            // Pop the first element.
-            // Adapted from 
https://github.com/nrk/predis/blob/v1.0/examples/transaction_using_cas.php
-            $options = array(
-                'cas' => true,
-                'watch' => self::FIFO_INDEX,
-                'retry' => 3,
-            );
-            $self = $this;
-            $this->getConnection()->transaction($options, function ($tx) use 
(&$data, &$self) {
-                // Begin transaction.
-                $tx->multi();
-
-                $key = $self->peekWithCleanup($tx);
-
-                if ($key) {
-                    // Use that value as a key into the key-value block.
-                    $data = $tx->get($key);
-
-                    // Remove from both indexes.
-                    $tx->zrem(Predis::FIFO_INDEX, $key);
-                    $tx->del($key);
-                }
-            });
-        } else {
-            $data = $this->getConnection()->lpop($this->queue_name);
-        }
+        $data = $this->getConnection()->lpop($this->queue_name);
         if (!$data) {
             return null;
         }
@@ -199,15 +98,12 @@
         $this->last_job_id = time();
         $this->afterGet();
 
-        return json_decode($data, true);
+        return Json::safe_decode($data);
     }
 
     public function popAtomic($callback) {
         if (!$this->hasQueue()) {
             throw new BackendException("No queue specified.");
-        }
-        if ($this->order_key) {
-            throw new BackendException("atomicPop not yet supported for 
zsets");
         }
 
         // Pop and process the first element, erring on the side of
@@ -225,7 +121,7 @@
             $tx->multi();
 
             $data = $tx->lpop($self->queue_name);
-            $data = json_decode($data, true);
+            $data = Json::safe_decode($data);
             if ($data !== null) {
                 call_user_func($callback, $data);
             }
@@ -245,33 +141,12 @@
         if (!$this->hasQueue()) {
             throw new BackendException("No queue specified.");
         }
-        if ($this->order_key) {
-            // Adapted from 
https://github.com/nrk/predis/blob/v1.0/examples/transaction_using_cas.php
-            $options = array(
-                'cas' => true,
-                'watch' => self::FIFO_INDEX,
-                'retry' => 3,
-            );
-            $self = $this;
-            $this->getConnection()->transaction($options, function ($tx) use 
(&$data, &$self) {
-                // Begin transaction.
-                $tx->multi();
-
-                $key = $self->peekWithCleanup($tx);
-
-                if ($key) {
-                    // Use that value as a key into the key-value block.
-                    $data = $tx->get($key);
-                }
-            });
+        $data_range = $this->getConnection()->lrange($this->queue_name, 0, 0);
+        if (!$data_range) {
+            return null;
         } else {
-            $data_range = $this->getConnection()->lrange($this->queue_name, 0, 
0);
-            if (!$data_range) {
-                return null;
-            } else {
-                // Unpack list.
-                $data = $data_range[0];
-            }
+            // Unpack list.
+            $data = $data_range[0];
         }
         if (!$data) {
             return null;
@@ -280,7 +155,7 @@
         $this->last_job_id = time();
         $this->afterGet();
 
-        return json_decode($data, true);
+        return Json::safe_decode($data);
     }
 
     public function release($jobId=null)
@@ -322,9 +197,7 @@
         $this->beforeAdd();
         try {
             $status = false;
-            if ($this->order_key) {
-                $status = $this->addToIndexedFifoQueue($key, $data);
-            } elseif (is_array($data)) {
+            if (is_array($data)) {
                 // FIXME: Assert
                 $status = $this->getConnection()->hmset($key, $data);
             } elseif (is_string($data) || is_numeric($data)) {
@@ -340,36 +213,6 @@
         } catch (\Exception $ex) {
             throw new BackendException($ex->getMessage(), $ex->getCode());
         }
-    }
-
-    /**
-     * Store the data under its order and correlation keys
-     *
-     * @param string $key
-     * @param array $data
-     * @return Predis\Response\ResponseInterface
-     */
-    protected function addToIndexedFifoQueue($key, $data)
-    {
-        $options = array(
-            'cas' => true,
-            'watch' => self::FIFO_INDEX,
-            'retry' => 3,
-        );
-        $score = $data[$this->order_key];
-        $encoded_data = json_encode($data);
-        $status = false;
-        $expiry = $this->expiry;
-        $this->getConnection()->transaction($options, function ($tx) use 
($key, $score, $encoded_data, $expiry, &$status) {
-            $tx->multi();
-            $tx->zadd(Predis::FIFO_INDEX, $score, $key);
-            if ($expiry) {
-                $status = $tx->setex($key, $expiry, $encoded_data);
-            } else {
-                $status = $tx->set($key, $encoded_data);
-            }
-        });
-        return $status;
     }
 
     /** @deprecated */
@@ -393,10 +236,6 @@
             return null;
         }
         $this->beforeGet($key);
-        if ($this->order_key) {
-            $data = $this->getConnection()->get($key);
-            return json_decode($data, true);
-        }
         $type = $this->getConnection()->type($key);
         switch ($type) {
             case self::TYPE_STRING:
@@ -432,16 +271,7 @@
     {
         $this->beforeClear($key);
 
-        if ($this->order_key) {
-            $result = $this->getConnection()->pipeline()
-                ->zrem(self::FIFO_INDEX, $key)
-                ->del($key)
-                ->execute();
-
-            $num_removed = $result[1];
-        } else {
-            $num_removed = $this->getConnection()->del($key);
-        }
+        $num_removed = $this->getConnection()->del($key);
 
         $this->afterClearRelease();
 
diff --git a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Stomp.php 
b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Stomp.php
index e855af3..65bd705 100644
--- a/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Stomp.php
+++ b/vendor/coderkungfu/php-queue/src/PHPQueue/Backend/Stomp.php
@@ -7,7 +7,6 @@
 use PHPQueue\Exception\BackendException;
 use PHPQueue\Exception\JobNotFoundException;
 use PHPQueue\Interfaces\FifoQueueStore;
-use PHPQueue\Interfaces\KeyValueStore;
 
 /**
  * Wrap a STOMP queue
@@ -18,7 +17,7 @@
  */
 class Stomp
     extends Base
-    implements FifoQueueStore, KeyValueStore
+    implements FifoQueueStore
 {
     public $queue_name;
     public $uri;
diff --git 
a/vendor/coderkungfu/php-queue/src/PHPQueue/Exception/JsonException.php 
b/vendor/coderkungfu/php-queue/src/PHPQueue/Exception/JsonException.php
new file mode 100644
index 0000000..2f825b7
--- /dev/null
+++ b/vendor/coderkungfu/php-queue/src/PHPQueue/Exception/JsonException.php
@@ -0,0 +1,9 @@
+<?php
+namespace PHPQueue\Exception;
+
+/**
+ * Something bad with the JSON
+ */
+class JsonException extends Exception
+{
+}
diff --git 
a/vendor/coderkungfu/php-queue/src/PHPQueue/Interfaces/IndexedFifoQueueStore.php
 
b/vendor/coderkungfu/php-queue/src/PHPQueue/Interfaces/IndexedFifoQueueStore.php
deleted file mode 100644
index ff06f66..0000000
--- 
a/vendor/coderkungfu/php-queue/src/PHPQueue/Interfaces/IndexedFifoQueueStore.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-namespace PHPQueue\Interfaces;
-
-/**
- * Implemented by backends that provide queue-like access, where each message
- * also has an ID.
- */
-interface IndexedFifoQueueStore extends FifoQueueStore
-{
-    /**
-     * @param mixed $value Serializable value.
-     * @return string Message ID.
-     * @throws \Exception On failure.
-     */
-    public function push($value);
-
-    /**
-     * @return array The next available data.
-     * @throws \PHPQueue\Exception\JobNotFoundException When no data is 
available.
-     * @throws \Exception Other failures.
-     *
-     * @deprecated This is not a safe operation.  Consider using
-     *     AtomicReadBuffer::popAtomic instead.
-     */
-    public function pop();
-
-    /**
-     * @param $key string
-     * @throws \Exception
-     */
-    public function clear($key);
-}
diff --git 
a/vendor/coderkungfu/php-queue/src/PHPQueue/Interfaces/KeyValueStore.php 
b/vendor/coderkungfu/php-queue/src/PHPQueue/Interfaces/KeyValueStore.php
deleted file mode 100644
index b9d5823..0000000
--- a/vendor/coderkungfu/php-queue/src/PHPQueue/Interfaces/KeyValueStore.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-namespace PHPQueue\Interfaces;
-
-/**
- * Implemented by backends that support key-value retrieval.
- */
-interface KeyValueStore
-{
-    /**
-     * @param $key string
-     * @param $value mixed Serializable value
-     * @param $properties array optional additional message properties
-     *     FIXME: Define better.  Are these columns the indexes?  Why separate
-     *     from the message?
-     * @throws \Exception
-     */
-    public function set($key, $value, $properties=array());
-
-    /**
-     * Look up and return a value by its index value.
-     *
-     * @param $key string
-     * @return array The data.
-     * @throws \Exception
-     */
-    public function get($key);
-
-    /**
-     * @param $key string
-     * @throws \Exception
-     */
-    public function clear($key);
-}
diff --git a/vendor/coderkungfu/php-queue/src/PHPQueue/Json.php 
b/vendor/coderkungfu/php-queue/src/PHPQueue/Json.php
new file mode 100644
index 0000000..ed2e6d1
--- /dev/null
+++ b/vendor/coderkungfu/php-queue/src/PHPQueue/Json.php
@@ -0,0 +1,17 @@
+<?php
+namespace PHPQueue;
+
+use PHPQueue\Exception\JsonException;
+
+class Json {
+    public static function safe_decode( $text ) {
+        if ( $text === null ) {
+            return null;
+        }
+        $data = json_decode($text, true);
+        if ( $data === null ) {
+            throw new JsonException("JSON could not be decoded: '{$text}'");
+        }
+        return $data;
+    }
+}
diff --git a/vendor/coderkungfu/php-queue/test/PHPQueue/Backend/PredisTest.php 
b/vendor/coderkungfu/php-queue/test/PHPQueue/Backend/PredisTest.php
index e46a8cc..ed35dfd 100644
--- a/vendor/coderkungfu/php-queue/test/PHPQueue/Backend/PredisTest.php
+++ b/vendor/coderkungfu/php-queue/test/PHPQueue/Backend/PredisTest.php
@@ -1,5 +1,8 @@
 <?php
 namespace PHPQueue\Backend;
+
+use PHPQueue\Exception\JsonException;
+
 class PredisTest extends \PHPUnit_Framework_TestCase
 {
     private $object;
@@ -188,6 +191,20 @@
         $this->assertNull($this->object->pop());
     }
 
+    /**
+     * @expectedException PHPQueue\Exception\JsonException
+     */
+    public function testPopBadJson()
+    {
+        // Bad JSON
+        $data = '{"a": bad "Weezle-' . mt_rand() . '"}';
+        $this->object->getConnection()->rpush($this->object->queue_name, 
$data);
+
+        $this->object->pop();
+
+        $this->fail();
+    }
+
     public function testPopEmpty()
     {
         $this->assertNull($this->object->pop());
diff --git 
a/vendor/coderkungfu/php-queue/test/PHPQueue/Backend/PredisZsetTest.php 
b/vendor/coderkungfu/php-queue/test/PHPQueue/Backend/PredisZsetTest.php
deleted file mode 100644
index 32df3cb..0000000
--- a/vendor/coderkungfu/php-queue/test/PHPQueue/Backend/PredisZsetTest.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-namespace PHPQueue\Backend;
-class PredisZsetTest extends \PHPUnit_Framework_TestCase
-{
-    private $object;
-
-    public function setUp()
-    {
-        parent::setUp();
-        if (!class_exists('\Predis\Client')) {
-            $this->markTestSkipped('Predis not installed');
-        } else {
-            $options = array(
-                'servers' => array('host' => '127.0.0.1', 'port' => 6379)
-                , 'queue' => 'testqueue-' . mt_rand()
-                , 'order_key' => 'timestamp'
-                , 'correlation_key' => 'txn_id'
-            );
-            $this->object = new Predis($options);
-        }
-    }
-
-    public function tearDown()
-    {
-        if ($this->object) {
-            $this->object->getConnection()->flushall();
-        }
-        parent::tearDown();
-    }
-
-    public function testSet()
-    {
-        $key = 'A0001';
-        $data = array('name' => 'Michael', 'timestamp' => 1);
-        $this->object->set($key, $data);
-
-        $key = 'A0001';
-        $data = array('name' => 'Michael Cheng', 'timestamp' => 2);
-        $this->object->set($key, $data);
-
-        $key = 'A0002';
-        $data = array('name' => 'Michael Cheng', 'timestamp' => 3);
-        $this->object->set($key, $data);
-    }
-
-    public function testGet()
-    {
-        $key = 'A0001';
-        $data1 = array('name' => 'Michael', 'timestamp' => 1);
-        $this->object->set($key, $data1);
-
-        $key = 'A0001';
-        $data2 = array('name' => 'Michael Cheng', 'timestamp' => 2);
-        $this->object->set($key, $data2);
-
-        $key = 'A0002';
-        $data3 = array('name' => 'Michael Cheng', 'timestamp' => 3);
-        $this->object->set($key, $data3);
-
-        $result = $this->object->get('A0001');
-        $this->assertEquals($data2, $result);
-
-        $result = $this->object->getKey('A0002');
-        $this->assertEquals($data3, $result);
-    }
-
-    public function testClear()
-    {
-        $key = 'A0002';
-        $data = array('name' => 'Adam Wight', 'timestamp' => 2718);
-        $result = $this->object->set($key, $data);
-
-        $result = $this->object->clear($key);
-        $this->assertTrue($result);
-
-        $result = $this->object->get($key);
-        $this->assertNull($result);
-    }
-
-    public function testClearEmpty()
-    {
-        $jobId = 'xxx';
-        $this->assertFalse($this->object->clear($jobId));
-    }
-
-    public function testPushPop()
-    {
-        $data = array(
-            'name' => 'Weezle-' . mt_rand(),
-            'timestamp' => mt_rand(),
-            'txn_id' => mt_rand(),
-        );
-        $this->object->push($data);
-
-        $this->assertEquals($data, $this->object->get($data['txn_id']));
-
-        $this->assertEquals($data, $this->object->pop());
-
-        $this->assertNull($this->object->get($data['txn_id']));
-    }
-
-    public function testPopEmpty()
-    {
-        $this->assertNull($this->object->pop());
-    }
-
-    public function testPeek()
-    {
-        $data = array(
-            'name' => 'Weezle-' . mt_rand(),
-            'timestamp' => mt_rand(),
-            'txn_id' => mt_rand(),
-        );
-        $this->object->push($data);
-
-        $this->assertEquals($data, $this->object->peek());
-
-        // Check that we didn't remove the object by peeking.
-        $this->assertEquals($data, $this->object->pop());
-    }
-}
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index ff6ecfb..2c72175 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -53,8 +53,9 @@
 
     private $useIncludePath = false;
     private $classMap = array();
-
     private $classMapAuthoritative = false;
+    private $missingClasses = array();
+    private $apcuPrefix;
 
     public function getPrefixes()
     {
@@ -272,6 +273,26 @@
     }
 
     /**
+     * APCu prefix to use to cache found/not-found classes, if the extension 
is enabled.
+     *
+     * @param string|null $apcuPrefix
+     */
+    public function setApcuPrefix($apcuPrefix)
+    {
+        $this->apcuPrefix = function_exists('apcu_fetch') && 
ini_get('apc.enabled') ? $apcuPrefix : null;
+    }
+
+    /**
+     * The APCu prefix in use, or null if APCu caching is not enabled.
+     *
+     * @return string|null
+     */
+    public function getApcuPrefix()
+    {
+        return $this->apcuPrefix;
+    }
+
+    /**
      * Registers this instance as an autoloader.
      *
      * @param bool $prepend Whether to prepend the autoloader or not
@@ -313,29 +334,34 @@
      */
     public function findFile($class)
     {
-        // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
-        if ('\\' == $class[0]) {
-            $class = substr($class, 1);
-        }
-
         // class map lookup
         if (isset($this->classMap[$class])) {
             return $this->classMap[$class];
         }
-        if ($this->classMapAuthoritative) {
+        if ($this->classMapAuthoritative || 
isset($this->missingClasses[$class])) {
             return false;
+        }
+        if (null !== $this->apcuPrefix) {
+            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+            if ($hit) {
+                return $file;
+            }
         }
 
         $file = $this->findFileWithExtension($class, '.php');
 
         // Search for Hack files if we are running on HHVM
-        if ($file === null && defined('HHVM_VERSION')) {
+        if (false === $file && defined('HHVM_VERSION')) {
             $file = $this->findFileWithExtension($class, '.hh');
         }
 
-        if ($file === null) {
+        if (null !== $this->apcuPrefix) {
+            apcu_add($this->apcuPrefix.$class, $file);
+        }
+
+        if (false === $file) {
             // Remember that this class does not exist.
-            return $this->classMap[$class] = false;
+            $this->missingClasses[$class] = true;
         }
 
         return $file;
@@ -348,9 +374,13 @@
 
         $first = $class[0];
         if (isset($this->prefixLengthsPsr4[$first])) {
-            foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
-                if (0 === strpos($class, $prefix)) {
-                    foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
+            $subPath = $class;
+            while (false !== $lastPos = strrpos($subPath, '\\')) {
+                $subPath = substr($subPath, 0, $lastPos);
+                $search = $subPath.'\\';
+                if (isset($this->prefixDirsPsr4[$search])) {
+                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
+                        $length = $this->prefixLengthsPsr4[$first][$search];
                         if (file_exists($file = $dir . DIRECTORY_SEPARATOR . 
substr($logicalPathPsr4, $length))) {
                             return $file;
                         }
@@ -399,6 +429,8 @@
         if ($this->useIncludePath && $file = 
stream_resolve_include_path($logicalPathPsr0)) {
             return $file;
         }
+
+        return false;
     }
 }
 
diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE
index 1a28124..f27399a 100644
--- a/vendor/composer/LICENSE
+++ b/vendor/composer/LICENSE
@@ -1,5 +1,5 @@
 
-Copyright (c) 2016 Nils Adermann, Jordi Boggiano
+Copyright (c) Nils Adermann, Jordi Boggiano
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/composer/autoload_real.php 
b/vendor/composer/autoload_real.php
index 0bf4882..c8374fe 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -23,19 +23,26 @@
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
         
spl_autoload_unregister(array('ComposerAutoloaderInit098acbbb690b1b9626b59f13525c3e22',
 'loadClassLoader'));
 
-        $map = require __DIR__ . '/autoload_namespaces.php';
-        foreach ($map as $namespace => $path) {
-            $loader->set($namespace, $path);
-        }
+        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') 
&& (!function_exists('zend_loader_file_encoded') || 
!zend_loader_file_encoded());
+        if ($useStaticLoader) {
+            require_once __DIR__ . '/autoload_static.php';
 
-        $map = require __DIR__ . '/autoload_psr4.php';
-        foreach ($map as $namespace => $path) {
-            $loader->setPsr4($namespace, $path);
-        }
+            
call_user_func(\Composer\Autoload\ComposerStaticInit098acbbb690b1b9626b59f13525c3e22::getInitializer($loader));
+        } else {
+            $map = require __DIR__ . '/autoload_namespaces.php';
+            foreach ($map as $namespace => $path) {
+                $loader->set($namespace, $path);
+            }
 
-        $classMap = require __DIR__ . '/autoload_classmap.php';
-        if ($classMap) {
-            $loader->addClassMap($classMap);
+            $map = require __DIR__ . '/autoload_psr4.php';
+            foreach ($map as $namespace => $path) {
+                $loader->setPsr4($namespace, $path);
+            }
+
+            $classMap = require __DIR__ . '/autoload_classmap.php';
+            if ($classMap) {
+                $loader->addClassMap($classMap);
+            }
         }
 
         $loader->register(true);
diff --git a/vendor/composer/autoload_static.php 
b/vendor/composer/autoload_static.php
new file mode 100644
index 0000000..240e364
--- /dev/null
+++ b/vendor/composer/autoload_static.php
@@ -0,0 +1,68 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInit098acbbb690b1b9626b59f13525c3e22
+{
+    public static $prefixLengthsPsr4 = array (
+        'P' => 
+        array (
+            'Predis\\' => 7,
+        ),
+        'M' => 
+        array (
+            'Monolog\\' => 8,
+        ),
+    );
+
+    public static $prefixDirsPsr4 = array (
+        'Predis\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/predis/predis/src',
+        ),
+        'Monolog\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
+        ),
+    );
+
+    public static $prefixesPsr0 = array (
+        'T' => 
+        array (
+            'Twig_' => 
+            array (
+                0 => __DIR__ . '/..' . '/twig/twig/lib',
+            ),
+        ),
+        'P' => 
+        array (
+            'Psr\\Log\\' => 
+            array (
+                0 => __DIR__ . '/..' . '/psr/log',
+            ),
+            'PHPQueue' => 
+            array (
+                0 => __DIR__ . '/..' . '/coderkungfu/php-queue/src',
+            ),
+        ),
+        'C' => 
+        array (
+            'Clio' => 
+            array (
+                0 => __DIR__ . '/..' . '/clio/clio/src',
+            ),
+        ),
+    );
+
+    public static function getInitializer(ClassLoader $loader)
+    {
+        return \Closure::bind(function () use ($loader) {
+            $loader->prefixLengthsPsr4 = 
ComposerStaticInit098acbbb690b1b9626b59f13525c3e22::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = 
ComposerStaticInit098acbbb690b1b9626b59f13525c3e22::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = 
ComposerStaticInit098acbbb690b1b9626b59f13525c3e22::$prefixesPsr0;
+
+        }, null, ClassLoader::class);
+    }
+}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index a3124e5..cfc3dd4 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -21,7 +21,7 @@
             "symfony/debug": "~2.7",
             "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2016-09-01 17:50:53",
+        "time": "2016-09-01T17:50:53+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -80,7 +80,7 @@
         "require": {
             "php": ">=5.3.2"
         },
-        "time": "2014-06-22 14:49:41",
+        "time": "2014-06-22T14:49:41+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -120,7 +120,7 @@
             "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
             "shasum": ""
         },
-        "time": "2012-12-21 11:40:51",
+        "time": "2012-12-21T11:40:51+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -193,7 +193,7 @@
             "ruflin/elastica": "Allow sending log messages to an Elastic 
Search server",
             "sentry/sentry": "Allow sending log messages to a Sentry server"
         },
-        "time": "2016-07-29 03:23:52",
+        "time": "2016-07-29T03:23:52+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -226,72 +226,6 @@
         ]
     },
     {
-        "name": "coderkungfu/php-queue",
-        "version": "dev-master",
-        "version_normalized": "9999999-dev",
-        "source": {
-            "type": "git",
-            "url": 
"https://gerrit.wikimedia.org/r/p/wikimedia/fundraising/php-queue.git";,
-            "reference": "14198ba1f7d4868933649a85621a3955965e83cd"
-        },
-        "require": {
-            "clio/clio": "0.1.*",
-            "monolog/monolog": "~1.3",
-            "php": ">=5.3.0"
-        },
-        "require-dev": {
-            "jakub-onderka/php-parallel-lint": "0.9",
-            "phpunit/phpunit": "4.4.*"
-        },
-        "suggest": {
-            "Respect/Rest": "For a REST server to post job data",
-            "amazonwebservices/aws-sdk-for-php": "For AWS SQS backend support 
(legacy version)",
-            "aws/aws-sdk-php": "For AWS SQS backend support",
-            "clio/clio": "Support for daemonizing PHP CLI runner",
-            "ext-memcache": "*",
-            "fusesource/stomp-php": "For the STOMP backend",
-            "iron-io/iron_mq": "For IronMQ backend support",
-            "microsoft/windowsazure": "For Windows Azure Service Bus backend 
support",
-            "mrpoundsign/pheanstalk-5.3": "For Beanstalkd backend support",
-            "pecl-mongodb": "For MongoDB backend support",
-            "predis/predis": "For Redis backend support"
-        },
-        "time": "2016-08-05 19:16:32",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.0.0-dev"
-            }
-        },
-        "installation-source": "source",
-        "autoload": {
-            "psr-0": {
-                "PHPQueue": "src/"
-            }
-        },
-        "scripts": {
-            "test": [
-                "parallel-lint . --exclude vendor",
-                "phpunit"
-            ]
-        },
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Michael Cheng",
-                "email": "[email protected]"
-            }
-        ],
-        "description": "A unified front-end for different queuing backends. 
Includes a REST server, CLI interface and daemon runners.",
-        "homepage": "http://github.com/CoderKungfu/php-queue";,
-        "keywords": [
-            "queue",
-            "transaction"
-        ]
-    },
-    {
         "name": "predis/predis",
         "version": "v1.1.1",
         "version_normalized": "1.1.1.0",
@@ -316,7 +250,7 @@
             "ext-curl": "Allows access to Webdis when paired with phpiredis",
             "ext-phpiredis": "Allows faster serialization and deserialization 
of the Redis protocol"
         },
-        "time": "2016-06-16 16:22:20",
+        "time": "2016-06-16T16:22:20+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -342,5 +276,76 @@
             "predis",
             "redis"
         ]
+    },
+    {
+        "name": "coderkungfu/php-queue",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/CoderKungfu/php-queue.git";,
+            "reference": "dd8412f105632d31cdd77933ec40a08640752c99"
+        },
+        "dist": {
+            "type": "zip",
+            "url": 
"https://api.github.com/repos/CoderKungfu/php-queue/zipball/dd8412f105632d31cdd77933ec40a08640752c99";,
+            "reference": "dd8412f105632d31cdd77933ec40a08640752c99",
+            "shasum": ""
+        },
+        "require": {
+            "clio/clio": "0.1.*",
+            "monolog/monolog": "~1.3",
+            "php": ">=5.3.0"
+        },
+        "require-dev": {
+            "amazonwebservices/aws-sdk-for-php": "dev-master",
+            "aws/aws-sdk-php": "dev-master",
+            "ext-memcache": "*",
+            "iron-io/iron_mq": "dev-master",
+            "microsoft/windowsazure": "dev-master",
+            "mrpoundsign/pheanstalk-5.3": "dev-master",
+            "predis/predis": "1.*"
+        },
+        "suggest": {
+            "Respect/Rest": "For a REST server to post job data",
+            "amazonwebservices/aws-sdk-for-php": "For AWS SQS backend support 
(legacy version)",
+            "aws/aws-sdk-php": "For AWS SQS backend support",
+            "clio/clio": "Support for daemonizing PHP CLI runner",
+            "fusesource/stomp-php": "For the STOMP backend",
+            "iron-io/iron_mq": "For IronMQ backend support",
+            "microsoft/windowsazure": "For Windows Azure Service Bus backend 
support",
+            "mrpoundsign/pheanstalk-5.3": "For Beanstalkd backend support",
+            "pecl-mongodb": "For MongoDB backend support",
+            "predis/predis": "For Redis backend support"
+        },
+        "time": "2017-04-17T14:11:55+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0.0-dev"
+            }
+        },
+        "installation-source": "source",
+        "autoload": {
+            "psr-0": {
+                "PHPQueue": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/";,
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Cheng",
+                "email": "[email protected]"
+            }
+        ],
+        "description": "A unified front-end for different queuing backends. 
Includes a REST server, CLI interface and daemon runners.",
+        "homepage": "http://github.com/CoderKungfu/php-queue";,
+        "keywords": [
+            "queue",
+            "transaction"
+        ]
     }
 ]

-- 
To view, visit https://gerrit.wikimedia.org/r/353345
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id3f11945265647f5b42a8e0ca8a0742fdc6cc0c7
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/FundraisingEmailUnsubscribe
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to