jenkins-bot has submitted this change and it was merged. Change subject: Get all queues with QueueFactory::getQueue ......................................................................
Get all queues with QueueFactory::getQueue Make the 'queue' key default work everywhere Change-Id: I1c619da04c08cf2470b9f04231fbeed50b1489ce --- M Core/Actions/IncomingMessage.php M Core/DataStores/MultiQueueWriter.php A Core/DataStores/QueueFactory.php M Core/QueueConsumers/BaseQueueConsumer.php M Maintenance/RequeueDelayedMessages.php M PaymentProviders/Adyen/Actions/CaptureResponseAction.php M PaymentProviders/Adyen/Actions/PaymentCaptureAction.php M PaymentProviders/Adyen/ExpatriatedMessages/ReportAvailable.php M PaymentProviders/Adyen/Jobs/ProcessCaptureRequestJob.php M PaymentProviders/Adyen/Jobs/RecordCaptureJob.php M PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php M PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php M PaymentProviders/Amazon/Actions/AddMessageToQueue.php M PaymentProviders/PayPal/Job.php M PaymentProviders/PayPal/Listener.php M PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php M SmashPig.yaml M Tests/QueueConsumerTest.php 18 files changed, 76 insertions(+), 59 deletions(-) Approvals: Awight: Looks good to me, approved jenkins-bot: Verified diff --git a/Core/Actions/IncomingMessage.php b/Core/Actions/IncomingMessage.php index 61adc23..bb2b790 100644 --- a/Core/Actions/IncomingMessage.php +++ b/Core/Actions/IncomingMessage.php @@ -1,6 +1,6 @@ <?php namespace SmashPig\Core\Actions; -use SmashPig\Core\Context; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\Core\Logging\Logger; use SmashPig\Core\Messages\ListenerMessage; @@ -10,7 +10,7 @@ $destinationQueue = $msg->getDestinationQueue(); if ( $destinationQueue ) { - $queue = Context::get()->getConfiguration()->object( "data-store/{$destinationQueue}" ); + $queue = QueueFactory::getQueue( $destinationQueue ); $queueMsg = $msg->normalizeForQueue(); $queue->push( $queueMsg ); diff --git a/Core/DataStores/MultiQueueWriter.php b/Core/DataStores/MultiQueueWriter.php index af90ef0..1cae76d 100644 --- a/Core/DataStores/MultiQueueWriter.php +++ b/Core/DataStores/MultiQueueWriter.php @@ -1,7 +1,6 @@ <?php namespace SmashPig\Core\DataStores; use PHPQueue\Interfaces\FifoQueueStore; -use SmashPig\Core\Configuration; use SmashPig\Core\ConfigurationException; /** @@ -17,10 +16,8 @@ * @param array $backends list of config keys under data-store */ public function __construct( $backends ) { - $config = Configuration::getDefaultConfig(); foreach ( $backends as $configKey ) { - $path = 'data-store/' . $configKey; - $this->queues[] = $config->object( $path ); + $this->queues[] = QueueFactory::getQueue( $configKey ); } } diff --git a/Core/DataStores/QueueFactory.php b/Core/DataStores/QueueFactory.php new file mode 100644 index 0000000..b1d9899 --- /dev/null +++ b/Core/DataStores/QueueFactory.php @@ -0,0 +1,41 @@ +<?php +namespace SmashPig\Core\DataStores; + +use SmashPig\Core\Context; + +class QueueFactory { + + /** + * Retrieves an instance of a queue object described in configuration, + * setting the 'queue' constructor option to $queueName if missing. + * + * @param string $queueName The subkey under data-store + * @return mixed + */ + public static function getQueue( $queueName ) { + $config = Context::get()->getConfiguration(); + $key = "data-store/$queueName"; + + // Examine the config node for a queue name + $node = $config->val( $key, true ); + if ( + empty( $node['constructor-parameters'] ) || + empty( $node['constructor-parameters'][0]['queue'] ) + ) { + $nameParam = array( + 'data-store' => array( + $queueName => array( + 'constructor-parameters' => array( + array( + 'queue' => $queueName + ) + ) + ) + ) + ); + $config->override( $nameParam ); + } + + return $config->object( $key ); + } +} diff --git a/Core/QueueConsumers/BaseQueueConsumer.php b/Core/QueueConsumers/BaseQueueConsumer.php index f13a588..352896d 100644 --- a/Core/QueueConsumers/BaseQueueConsumer.php +++ b/Core/QueueConsumers/BaseQueueConsumer.php @@ -7,6 +7,7 @@ use SmashPig\Core\Context; use SmashPig\Core\DataStores\DamagedDatabase; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\Core\Logging\Logger; /** @@ -70,7 +71,7 @@ $this->timeLimit = intval( $timeLimit ); $this->messageLimit = intval( $messageLimit ); - $this->backend = self::getQueue( $queueName ); + $this->backend = QueueFactory::getQueue( $queueName ); if ( !$this->backend instanceof AtomicReadBuffer ) { throw new InvalidArgumentException( @@ -151,19 +152,4 @@ ); } - public static function getQueue( $queueName ) { - $config = Context::get()->getConfiguration(); - $key = "data-store/$queueName"; - - // Get a reference to the config node so we can mess with it - $node =& $config->val( $key, true ); - if ( - empty( $node['constructor-parameters'] ) || - empty( $node['constructor-parameters'][0]['queue'] ) - ) { - $node['constructor-parameters'][0]['queue'] = $queueName; - } - - return $config->object( $key, true ); - } } diff --git a/Maintenance/RequeueDelayedMessages.php b/Maintenance/RequeueDelayedMessages.php index be16a74..223c395 100644 --- a/Maintenance/RequeueDelayedMessages.php +++ b/Maintenance/RequeueDelayedMessages.php @@ -3,7 +3,7 @@ require ( 'MaintenanceBase.php' ); -use SmashPig\Core\Configuration; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\Core\Logging\Logger; use SmashPig\Core\DataStores\DamagedDatabase; @@ -37,12 +37,11 @@ $this->getOption( 'max-messages' ) ); $stats = array(); - $config = Configuration::getDefaultConfig(); foreach( $messages as $message ) { $queueName = $message['original_queue']; // FIXME: getting it by alias, this will be annoying cos -new - $queue = $config->object( "data-store/$queueName", true ); + $queue = QueueFactory::getQueue( $queueName ); unset( $message['original_queue'] ); $queue->push( $message ); $this->damagedDatabase->deleteMessage( $message ); diff --git a/PaymentProviders/Adyen/Actions/CaptureResponseAction.php b/PaymentProviders/Adyen/Actions/CaptureResponseAction.php index 2fbc024..ffc9f3c 100644 --- a/PaymentProviders/Adyen/Actions/CaptureResponseAction.php +++ b/PaymentProviders/Adyen/Actions/CaptureResponseAction.php @@ -1,7 +1,7 @@ <?php namespace SmashPig\PaymentProviders\Adyen\Actions; use SmashPig\Core\Actions\IListenerMessageAction; -use SmashPig\Core\Configuration; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\Core\Logging\TaggedLogger; use SmashPig\Core\Messages\ListenerMessage; use SmashPig\PaymentProviders\Adyen\ExpatriatedMessages\Capture; @@ -22,7 +22,7 @@ "Adding record capture job for {$msg->currency} {$msg->amount} with id {$msg->correlationId} and psp reference {$msg->pspReference}." ); $recordJob = RecordCaptureJob::factory( $msg ); - $jobQueue = Configuration::getDefaultConfig()->object( 'data-store/jobs' ); + $jobQueue = QueueFactory::getQueue( 'jobs' ); $jobQueue->addObject( $recordJob ); } else { $tl->warning( diff --git a/PaymentProviders/Adyen/Actions/PaymentCaptureAction.php b/PaymentProviders/Adyen/Actions/PaymentCaptureAction.php index 2281adf..943575e 100644 --- a/PaymentProviders/Adyen/Actions/PaymentCaptureAction.php +++ b/PaymentProviders/Adyen/Actions/PaymentCaptureAction.php @@ -1,6 +1,6 @@ <?php namespace SmashPig\PaymentProviders\Adyen\Actions; -use SmashPig\Core\Configuration; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\Core\Jobs\DeletePendingJob; use SmashPig\Core\Logging\TaggedLogger; use SmashPig\Core\Messages\ListenerMessage; @@ -18,7 +18,7 @@ $tl = new TaggedLogger( 'PaymentCaptureAction' ); if ( $msg instanceof Authorisation ) { - $jobQueueObj = Configuration::getDefaultConfig()->object( 'data-store/jobs' ); + $jobQueueObj = QueueFactory::getQueue( 'jobs' ); if ( $msg->success ) { // Here we need to capture the payment, the job runner will collect the // orphan message diff --git a/PaymentProviders/Adyen/ExpatriatedMessages/ReportAvailable.php b/PaymentProviders/Adyen/ExpatriatedMessages/ReportAvailable.php index 4c4f2d6..b0ac3d0 100644 --- a/PaymentProviders/Adyen/ExpatriatedMessages/ReportAvailable.php +++ b/PaymentProviders/Adyen/ExpatriatedMessages/ReportAvailable.php @@ -1,6 +1,6 @@ <?php namespace SmashPig\PaymentProviders\Adyen\ExpatriatedMessages; -use SmashPig\Core\Context; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\Core\Logging\Logger; use SmashPig\PaymentProviders\Adyen\Jobs\DownloadReportJob; @@ -20,7 +20,7 @@ $this->reason ); - $jobQueueObj = Context::get()->getConfiguration()->object( 'data-store/jobs' ); + $jobQueueObj = QueueFactory::getQueue( 'jobs' ); if ( strpos( $this->pspReference, 'settlement_detail_report' ) === 0 ) { $jobQueueObj->addObject( DownloadReportJob::factory( diff --git a/PaymentProviders/Adyen/Jobs/ProcessCaptureRequestJob.php b/PaymentProviders/Adyen/Jobs/ProcessCaptureRequestJob.php index fb39f08..63f2210 100644 --- a/PaymentProviders/Adyen/Jobs/ProcessCaptureRequestJob.php +++ b/PaymentProviders/Adyen/Jobs/ProcessCaptureRequestJob.php @@ -2,6 +2,7 @@ use SmashPig\Core\Configuration; use SmashPig\Core\DataStores\PendingDatabase; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\Core\Jobs\RunnableJob; use SmashPig\Core\Logging\Logger; use SmashPig\Core\Logging\TaggedLogger; @@ -193,8 +194,7 @@ $dbMessage, $riskScore, $scoreBreakdown, $action ); $this->logger->debug( "Sending antifraud message with risk score $riskScore and action $action." ); - Configuration::getDefaultConfig() - ->object( 'data-store/payments-antifraud' ) + QueueFactory::getQueue( 'payments-antifraud' ) ->push( $antifraudMessage ); } diff --git a/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php b/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php index 757ec23..f3c246d 100644 --- a/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php +++ b/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php @@ -2,6 +2,7 @@ use SmashPig\Core\Configuration; use SmashPig\Core\DataStores\PendingDatabase; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\Core\Jobs\RunnableJob; use SmashPig\Core\Logging\Logger; use SmashPig\CrmLink\Messages\DonationInterfaceMessage; @@ -56,7 +57,7 @@ // Add the gateway transaction ID and send it to the completed queue $dbMessage['gateway_txn_id'] = $this->originalReference; $queueMessage = DonationInterfaceMessage::fromValues( $dbMessage ); - $config->object( 'data-store/verified' )->push( $queueMessage ); + QueueFactory::getQueue( 'verified' )->push( $queueMessage ); // Remove it from the pending database $logger->debug( 'Removing donor details message from pending database' ); diff --git a/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php b/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php index efcabbc..96af845 100644 --- a/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php +++ b/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php @@ -5,7 +5,7 @@ use SmashPig\Core\Context; use SmashPig\Core\DataStores\KeyedOpaqueStorableObject; use SmashPig\Core\DataStores\PendingDatabase; -use SmashPig\Core\QueueConsumers\BaseQueueConsumer; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\PaymentProviders\Adyen\Jobs\ProcessCaptureRequestJob; use SmashPig\PaymentProviders\Adyen\Tests\AdyenTestConfiguration; use SmashPig\Tests\BaseSmashPigUnitTestCase; @@ -38,7 +38,7 @@ file_get_contents( __DIR__ . '/../Data/pending.json' ) , true ); $this->pendingDatabase->storeMessage( $this->pendingMessage ); - $this->antifraudQueue = BaseQueueConsumer::getQueue( 'payments-antifraud' ); + $this->antifraudQueue = QueueFactory::getQueue( 'payments-antifraud' ); } public function tearDown() { diff --git a/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php b/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php index ce3edf9..8a61e15 100644 --- a/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php +++ b/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php @@ -4,7 +4,7 @@ use SmashPig\Core\Context; use SmashPig\Core\DataStores\KeyedOpaqueStorableObject; use SmashPig\Core\DataStores\PendingDatabase; -use SmashPig\Core\QueueConsumers\BaseQueueConsumer; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\PaymentProviders\Adyen\Jobs\RecordCaptureJob; use SmashPig\PaymentProviders\Adyen\Tests\AdyenTestConfiguration; use SmashPig\Tests\BaseSmashPigUnitTestCase; @@ -42,7 +42,7 @@ } public function testRecordCapture() { - $verifiedQueue = BaseQueueConsumer::getQueue( 'verified' ); + $verifiedQueue = QueueFactory::getQueue( 'verified' ); $verifiedQueue->createTable( 'verified' ); $capture = KeyedOpaqueStorableObject::fromJsonProxy( diff --git a/PaymentProviders/Amazon/Actions/AddMessageToQueue.php b/PaymentProviders/Amazon/Actions/AddMessageToQueue.php index 6d5f0f2..05e909e 100644 --- a/PaymentProviders/Amazon/Actions/AddMessageToQueue.php +++ b/PaymentProviders/Amazon/Actions/AddMessageToQueue.php @@ -1,7 +1,7 @@ <?php namespace SmashPig\PaymentProviders\Amazon\Actions; use SmashPig\Core\Actions\IListenerMessageAction; -use SmashPig\Core\Context; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\Core\Logging\Logger; use SmashPig\Core\Messages\ListenerMessage; @@ -11,7 +11,7 @@ $destinationQueue = $msg->getDestinationQueue(); if ( $destinationQueue ) { - $queue = Context::get()->getConfiguration()->object( "data-store/{$destinationQueue}" ); + $queue = QueueFactory::getQueue( $destinationQueue ); $queueMsg = $msg->normalizeForQueue(); $queue->push( $queueMsg ); diff --git a/PaymentProviders/PayPal/Job.php b/PaymentProviders/PayPal/Job.php index 43e5abb..d5a364b 100644 --- a/PaymentProviders/PayPal/Job.php +++ b/PaymentProviders/PayPal/Job.php @@ -1,6 +1,7 @@ <?php namespace SmashPig\PaymentProviders\PayPal; use SmashPig\Core\Configuration; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\Core\Jobs\RunnableJob; class Job extends RunnableJob { @@ -71,7 +72,7 @@ // Save to appropriate queue. - $this->config->object( 'data-store/' . $msg_type ) + QueueFactory::getQueue( $msg_type ) ->push( $new_msg ); // TODO It would be nice if push() returned something useful so we diff --git a/PaymentProviders/PayPal/Listener.php b/PaymentProviders/PayPal/Listener.php index be75468..9c62d5a 100644 --- a/PaymentProviders/PayPal/Listener.php +++ b/PaymentProviders/PayPal/Listener.php @@ -1,6 +1,6 @@ <?php namespace SmashPig\PaymentProviders\PayPal; -use SmashPig\Core\Configuration; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\Core\Http\IHttpActionHandler; use SmashPig\Core\Http\Response; use SmashPig\Core\Http\Request; @@ -8,8 +8,6 @@ class Listener implements IHttpActionHandler { public function execute( Request $request, Response $response ) { - $this->config = Configuration::getDefaultConfig(); - $requestValues = $request->getValues(); // Don't store blank messages. @@ -21,7 +19,7 @@ $job = new Job; $job->payload = $requestValues; $job->{'php-message-class'} = 'SmashPig\PaymentProviders\PayPal\Job'; - $this->config->object( 'data-store/jobs-paypal' )->push( $job ); + QueueFactory::getQueue( 'jobs-paypal' )->push( $job ); } } diff --git a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php index 2718fdb..952d116 100644 --- a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php +++ b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php @@ -3,10 +3,8 @@ use SmashPig\Core\Configuration; use SmashPig\Core\Context; -use SmashPig\Core\QueueConsumers\BaseQueueConsumer; +use SmashPig\Core\DataStores\QueueFactory; use SmashPig\PaymentProviders\PayPal\Listener; -use SmashPig\PaymentProviders\PayPal\Job; -use SmashPig\PaymentProviders\PayPal\Tests\PayPalTestConfiguration; use SmashPig\Tests\BaseSmashPigUnitTestCase; use SmashPig\Core\Http\Response; use SmashPig\Core\Http\Request; @@ -37,7 +35,7 @@ $this->config = PayPalTestConfiguration::get(); // php-queue\PDO complains about pop() from non-existent table - $this->config->object( 'data-store/jobs-paypal' ) + QueueFactory::getQueue( 'jobs-paypal' ) ->createTable( 'jobs-paypal' ); Context::initWithLogger( $this->config ); @@ -61,7 +59,7 @@ $this->capture( $msg ); - $jobQueue = $this->config->object( 'data-store/jobs-paypal' ); + $jobQueue = QueueFactory::getQueue( 'jobs-paypal' ); $jobMessage = $jobQueue->pop(); $this->assertEquals( $jobMessage['php-message-class'], @@ -74,7 +72,7 @@ public function testBlankMessage() { $this->capture( array() ); - $jobQueue = $this->config->object( 'data-store/jobs-paypal' ); + $jobQueue = QueueFactory::getQueue( 'jobs-paypal' ); $this->assertNull( $jobQueue->pop() ); } @@ -82,7 +80,7 @@ foreach ( self::$messages as $type => $msg ) { $this->capture( $msg ); - $jobQueue = $this->config->object( 'data-store/jobs-paypal' ); + $jobQueue = QueueFactory::getQueue( 'jobs-paypal' ); $jobMessage = $jobQueue->pop(); $job = KeyedOpaqueStorableObject::fromJsonProxy( @@ -92,8 +90,7 @@ $job->execute(); - $queue = $this->config->object( 'data-store/' . $type ); - $queue->createTable( $type ); + $queue = QueueFactory::getQueue( $type ); $message = $queue->pop(); $this->assertNotEmpty( $message ); diff --git a/SmashPig.yaml b/SmashPig.yaml index f078a36..fb65a57 100644 --- a/SmashPig.yaml +++ b/SmashPig.yaml @@ -97,9 +97,6 @@ constructor-parameters: - <<: *REDIS - # FIXME: This queue thing is introspected at times, and at - # others not. Make it consistent (and invisible). - queue: jobs-paypal verified: class: SmashPig\Core\DataStores\MultiQueueWriter diff --git a/Tests/QueueConsumerTest.php b/Tests/QueueConsumerTest.php index 4abea8a..86ec72f 100644 --- a/Tests/QueueConsumerTest.php +++ b/Tests/QueueConsumerTest.php @@ -7,7 +7,7 @@ use PHPQueue\Interfaces\FifoQueueStore; use SmashPig\Core\Context; use SmashPig\Core\DataStores\DamagedDatabase; -use SmashPig\Core\QueueConsumers\BaseQueueConsumer; +use SmashPig\Core\DataStores\QueueFactory; class QueueConsumerTest extends BaseSmashPigUnitTestCase { @@ -23,7 +23,7 @@ public function setUp() { parent::setUp(); Context::initWithLogger( QueueTestConfiguration::instance() ); - $this->queue = BaseQueueConsumer::getQueue( 'test' ); + $this->queue = QueueFactory::getQueue( 'test' ); $this->queue->createTable( 'test' ); $damagedDb = DamagedDatabase::get(); $damagedDb->createTable(); -- To view, visit https://gerrit.wikimedia.org/r/313117 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I1c619da04c08cf2470b9f04231fbeed50b1489ce Gerrit-PatchSet: 4 Gerrit-Project: wikimedia/fundraising/SmashPig Gerrit-Branch: master Gerrit-Owner: Ejegg <eeggles...@wikimedia.org> Gerrit-Reviewer: Awight <awi...@wikimedia.org> Gerrit-Reviewer: Cdentinger <cdentin...@wikimedia.org> Gerrit-Reviewer: Siebrand <siebr...@kitano.nl> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits