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