Addshore has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/267675

Change subject: Use LoadBalancer in NewsletterDb
......................................................................

Use LoadBalancer in NewsletterDb

Change-Id: Ifd2dc89c2058473b50e92247579c3084d039243a
---
M includes/NewsletterDb.php
M tests/NewsletterDbTest.php
2 files changed, 58 insertions(+), 25 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Newsletter 
refs/changes/75/267675/1

diff --git a/includes/NewsletterDb.php b/includes/NewsletterDb.php
index 3289444..4237bb2 100644
--- a/includes/NewsletterDb.php
+++ b/includes/NewsletterDb.php
@@ -6,16 +6,14 @@
  */
 class NewsletterDb {
 
-       private $readDb;
-       private $writeDb;
+       private $lb;
 
-       public function __construct( IDatabase $readDb, IDatabase $writeDb ) {
-               $this->readDb = $readDb;
-               $this->writeDb = $writeDb;
+       public function __construct( LoadBalancer $lb ) {
+               $this->lb = $lb;
        }
 
        public static function newFromGlobalState() {
-               return new self( wfGetDB( DB_SLAVE ), wfGetDB( DB_MASTER ) );
+               return new self( wfGetLB() );
        }
 
        /**
@@ -30,9 +28,10 @@
                        'nls_subscriber_id' => $userId,
                );
 
-               $this->writeDb->insert( 'nl_subscriptions', $rowData, 
__METHOD__, array( 'IGNORE' ) );
+               $dbw = $this->lb->getConnection( DB_MASTER );
+               $dbw->insert( 'nl_subscriptions', $rowData, __METHOD__, array( 
'IGNORE' ) );
 
-               return (bool)$this->writeDb->affectedRows();
+               return (bool)$dbw->affectedRows();
        }
 
        /**
@@ -46,9 +45,11 @@
                        'nls_newsletter_id' => $newsletterId,
                        'nls_subscriber_id' => $userId,
                );
-               $this->writeDb->delete( 'nl_subscriptions', $rowData, 
__METHOD__ );
 
-               return (bool)$this->writeDb->affectedRows();
+               $dbw = $this->lb->getConnection( DB_MASTER );
+               $dbw->delete( 'nl_subscriptions', $rowData, __METHOD__ );
+
+               return (bool)$dbw->affectedRows();
        }
 
        /**
@@ -62,9 +63,11 @@
                        'nlp_newsletter_id' => $newsletterId,
                        'nlp_publisher_id' => $userId,
                );
-               $this->writeDb->insert( 'nl_publishers', $rowData, __METHOD__, 
array( 'IGNORE' ) );
 
-               return $this->writeDb->affectedRows() === 1;
+               $dbw = $this->lb->getConnection( DB_MASTER );
+               $dbw->insert( 'nl_publishers', $rowData, __METHOD__, array( 
'IGNORE' ) );
+
+               return $dbw->affectedRows() === 1;
 
        }
 
@@ -79,9 +82,11 @@
                        'nlp_newsletter_id' => $newsletterId,
                        'nlp_publisher_id' => $userId,
                );
-               $this->writeDb->delete( 'nl_publishers', $rowData, __METHOD__ );
 
-               return $this->writeDb->affectedRows() === 1;
+               $dbw = $this->lb->getConnection( DB_MASTER );
+               $dbw->delete( 'nl_publishers', $rowData, __METHOD__ );
+
+               return $dbw->affectedRows() === 1;
        }
 
        /**
@@ -97,8 +102,10 @@
                        'nl_desc' => $description,
                        'nl_main_page_id' => $pageId,
                );
+
                try {
-                       return $this->writeDb->insert( 'nl_newsletters', 
$rowData, __METHOD__ );
+                       $dbw = $this->lb->getConnection( DB_MASTER );
+                       return $dbw->insert( 'nl_newsletters', $rowData, 
__METHOD__ );
                } catch ( DBQueryError $ex ) {
                        return false;
                }
@@ -110,7 +117,7 @@
         * @todo make this more reliable and scalable
         */
        public function deleteNewsletter( $id ) {
-               $dbw = $this->writeDb;
+               $dbw = $this->lb->getConnection( DB_MASTER );
                $dbw->startAtomic( __METHOD__ );
                $dbw->delete( 'nl_newsletters', array( 'nl_id' => $id ), 
__METHOD__ );
                $dbw->delete( 'nl_issues', array( 'nli_newsletter_id' => $id ), 
__METHOD__ );
@@ -125,7 +132,8 @@
         * @return Newsletter|null null if no newsletter exists with the 
provided id
         */
        public function getNewsletter( $id ) {
-               $res = $this->readDb->select(
+               $dbr = $this->lb->getConnection( DB_SLAVE );
+               $res = $dbr->select(
                        'nl_newsletters',
                        array( 'nl_id', 'nl_name', 'nl_desc', 'nl_main_page_id' 
),
                        array( 'nl_id' => $id ),
@@ -146,7 +154,9 @@
         * @return string[]
         */
        public function getPublishersFromID( $id ) {
-               return $this->readDb->selectFieldValues(
+               $dbr = $this->lb->getConnection( DB_SLAVE );
+
+               return $dbr->selectFieldValues(
                        'nl_publishers',
                        'nlp_publisher_id',
                        array( 'nlp_newsletter_id' => $id ),
@@ -160,7 +170,9 @@
         * @return string[]
         */
        public function getSubscribersFromID( $id ) {
-               return $this->readDb->selectFieldValues(
+               $dbr = $this->lb->getConnection( DB_SLAVE );
+
+               return $dbr->selectFieldValues(
                        'nl_subscriptions',
                        'nls_subscriber_id',
                        array( 'nls_newsletter_id' => $id ),
@@ -174,7 +186,9 @@
         * @return Newsletter
         */
        public function getNewsletterForPageId( $id ) {
-               $res = $this->readDb->select(
+               $dbr = $this->lb->getConnection( DB_SLAVE );
+
+               $res = $dbr->select(
                        'nl_newsletters',
                        array( 'nl_id', 'nl_name', 'nl_desc', 'nl_main_page_id' 
),
                        array( 'nl_main_page_id' => $id ),
@@ -190,7 +204,9 @@
         * @return Newsletter[]
         */
        public function getNewslettersUserIsPublisherOf( User $user ) {
-               $res = $this->readDb->select(
+               $dbr = $this->lb->getConnection( DB_SLAVE );
+
+               $res = $dbr->select(
                        array( 'nl_publishers', 'nl_newsletters' ),
                        array( 'nl_id', 'nl_name', 'nl_desc', 'nl_main_page_id' 
),
                        array( 'nlp_publisher_id' => $user->getId() ),
@@ -206,7 +222,9 @@
         * @return Newsletter[]
         */
        public function getAllNewsletters() {
-               $res = $this->readDb->select(
+               $dbr = $this->lb->getConnection( DB_SLAVE );
+
+               $res = $dbr->select(
                        array( 'nl_newsletters' ),
                        array( 'nl_id', 'nl_name', 'nl_desc', 'nl_main_page_id' 
),
                        array(),
@@ -255,7 +273,9 @@
         */
        public function addNewsletterIssue( $newsletterId, $pageId, 
$publisherId ) {
                // Note: the writeDb is used as this is used in the next insert
-               $lastIssueId = $this->writeDb->selectRowCount(
+               $dbw = $this->lb->getConnection( DB_MASTER );
+
+               $lastIssueId = $dbw->selectRowCount(
                        'nl_issues',
                        array( 'nli_issue_id' ),
                        array( 'nli_newsletter_id' => $newsletterId ),
@@ -269,7 +289,7 @@
                        'nli_publisher_id' => $publisherId,
                );
                try {
-                       return $this->writeDb->insert( 'nl_issues', $rowData, 
__METHOD__ );
+                       return $dbw->insert( 'nl_issues', $rowData, __METHOD__ 
);
                } catch ( DBQueryError $ex ) {
                        return false;
                }
diff --git a/tests/NewsletterDbTest.php b/tests/NewsletterDbTest.php
index 251b91f..83ea3d4 100644
--- a/tests/NewsletterDbTest.php
+++ b/tests/NewsletterDbTest.php
@@ -14,6 +14,19 @@
                return $this->getMock( 'IDatabase' );
        }
 
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|LoadBalancer
+        */
+       private function getMockLoadBalancer( $db ) {
+               $mock = $this->getMockBuilder( 'LoadBalancer' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mock->expects( $this->any() )
+                       ->method( 'getConnection' )
+                       ->will( $this->returnValue( $db ) );
+               return $mock;
+       }
+
        public function testAddSubscriber() {
                $mockWriteDb = $this->getMockIDatabase();
                $mockWriteDb->expects( $this->once() )
@@ -26,7 +39,7 @@
                        ->method( 'affectedRows' )
                        ->will( $this->returnValue( 1 ) );
 
-               $table = new NewsletterDb( $this->getMockIDatabase(), 
$mockWriteDb );
+               $table = new NewsletterDb( $this->getMockLoadBalancer( 
$mockWriteDb ) );
                $result = $table->addSubscription( 1, 2 );
 
                $this->assertEquals( true, $result );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifd2dc89c2058473b50e92247579c3084d039243a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Newsletter
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>

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

Reply via email to