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 #
[](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