[MediaWiki-commits] [Gerrit] mediawiki...Wikibase[master]: Only try to add a row in EntityPerPageTable if needed

2016-08-17 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged.

Change subject: Only try to add a row in EntityPerPageTable if needed
..


Only try to add a row in EntityPerPageTable if needed

No need to (re-)insert a row there, if there's already one.

EntityPerPageTable::addEntityPage is called after any entity
edit, see EntityHandler::getEntityModificationUpdates.

Change-Id: I143f37949813e0849711bc808ce48a741c236d11
---
M repo/includes/Store/Sql/EntityPerPageTable.php
M repo/includes/Store/Sql/SqlStore.php
M repo/tests/phpunit/includes/Store/Sql/EntityPerPageTableTest.php
3 files changed, 77 insertions(+), 8 deletions(-)

Approvals:
  Aude: Looks good to me, approved
  Daniel Kinzler: Looks good to me, approved
  Thiemo Mättig (WMDE): Looks good to me, but someone else must approve
  jenkins-bot: Verified



diff --git a/repo/includes/Store/Sql/EntityPerPageTable.php 
b/repo/includes/Store/Sql/EntityPerPageTable.php
index 2aabf66..16b41d7 100644
--- a/repo/includes/Store/Sql/EntityPerPageTable.php
+++ b/repo/includes/Store/Sql/EntityPerPageTable.php
@@ -3,6 +3,7 @@
 namespace Wikibase\Repo\Store\SQL;
 
 use InvalidArgumentException;
+use LoadBalancer;
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\EntityIdParser;
 use Wikibase\DataModel\Entity\Int32EntityId;
@@ -34,10 +35,21 @@
private $entityIdComposer;
 
/**
+* @var LoadBalancer
+*/
+   private $loadBalancer;
+
+   /**
+* @param LoadBalancer $loadBalancer
 * @param EntityIdParser $entityIdParser
 * @param EntityIdComposer $entityIdComposer
 */
-   public function __construct( EntityIdParser $entityIdParser, 
EntityIdComposer $entityIdComposer ) {
+   public function __construct(
+   LoadBalancer $loadBalancer,
+   EntityIdParser $entityIdParser,
+   EntityIdComposer $entityIdComposer
+   ) {
+   $this->loadBalancer = $loadBalancer;
$this->entityIdParser = $entityIdParser;
$this->entityIdComposer = $entityIdComposer;
}
@@ -94,14 +106,16 @@
'epp_redirect_target' => $redirectTarget
);
 
-   $this->addRowInternal( $values );
+   if ( !$this->rowExists( $values ) ) {
+   $this->addRowInternal( $values );
+   }
}
 
/**
 * @param array $row
 */
private function addRowInternal( array $row ) {
-   $dbw = wfGetDB( DB_MASTER );
+   $dbw = $this->loadBalancer->getConnection( DB_MASTER );
// Try to add the row and see it it conflicts on (id,type) or 
(page_id).
// With innodb, this only sets IX gap and SH/EX record locks. 
This is useful for new
// page/entity creation, as just doing DELETE+INSERT would put 
SH gap locks on the range
@@ -133,8 +147,19 @@
);
}
 
+   /**
+* @param array $row
+*
+* @return bool
+*/
+   private function rowExists( array $row ) {
+   $dbw = $this->loadBalancer->getConnection( DB_MASTER );
+
+   return $dbw->selectRow( 'wb_entity_per_page', '1', $row, 
__METHOD__ ) !== false;
+   }
+
private function getConflictingRowConditions( array $values ) {
-   $dbw = wfGetDB( DB_MASTER );
+   $dbw = $this->loadBalancer->getConnection( DB_MASTER );
$indexes = $this->getUniqueIndexes();
 
$conditions = array();
@@ -187,7 +212,7 @@
throw new InvalidArgumentException( '$entityId must be 
an Int32EntityId' );
}
 
-   $dbw = wfGetDB( DB_MASTER );
+   $dbw = $this->loadBalancer->getConnection( DB_MASTER );
 
return $dbw->delete(
'wb_entity_per_page',
@@ -207,7 +232,7 @@
 * @return boolean Success indicator
 */
public function clear() {
-   return wfGetDB( DB_MASTER )->delete( 'wb_entity_per_page', '*', 
__METHOD__ );
+   return $this->loadBalancer->getConnection( DB_MASTER )->delete( 
'wb_entity_per_page', '*', __METHOD__ );
}
 
/**
diff --git a/repo/includes/Store/Sql/SqlStore.php 
b/repo/includes/Store/Sql/SqlStore.php
index bcc4974d..b17b439 100644
--- a/repo/includes/Store/Sql/SqlStore.php
+++ b/repo/includes/Store/Sql/SqlStore.php
@@ -294,7 +294,7 @@
 * @return EntityPerPage
 */
public function newEntityPerPage() {
-   return new EntityPerPageTable( $this->entityIdParser, 
$this->entityIdComposer );
+   return new EntityPerPageTable( wfGetLB(), 
$this->entityIdParser, $this->entityIdComposer );
}
 
/**
diff --git a/repo/tests/phpunit/includes/Store/Sql/EntityPerPageTableTest.php 

[MediaWiki-commits] [Gerrit] mediawiki...Wikibase[master]: Only try to add a row in EntityPerPageTable if needed

2016-08-14 Thread Hoo man (Code Review)
Hoo man has uploaded a new change for review.

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

Change subject: Only try to add a row in EntityPerPageTable if needed
..

Only try to add a row in EntityPerPageTable if needed

No need to (re-)insert a row there, if there's already one.

EntityPerPageTable::addEntityPage is called after any entity
edit, see EntityHandler::getEntityModificationUpdates.

Change-Id: I143f37949813e0849711bc808ce48a741c236d11
---
M repo/includes/Store/Sql/EntityPerPageTable.php
1 file changed, 12 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/11/304711/1

diff --git a/repo/includes/Store/Sql/EntityPerPageTable.php 
b/repo/includes/Store/Sql/EntityPerPageTable.php
index 2aabf66..c05d2de 100644
--- a/repo/includes/Store/Sql/EntityPerPageTable.php
+++ b/repo/includes/Store/Sql/EntityPerPageTable.php
@@ -94,7 +94,9 @@
'epp_redirect_target' => $redirectTarget
);
 
-   $this->addRowInternal( $values );
+   if ( !$this->rowExists( $values ) ) {
+   $this->addRowInternal( $values );
+   }
}
 
/**
@@ -133,6 +135,15 @@
);
}
 
+   /**
+* @param array $row
+*/
+   private function rowExists( array $row ) {
+   $dbw = wfGetDB( DB_MASTER );
+
+   $dbw->selectRow( 'wb_entity_per_page', '*', $row, __METHOD__ ) 
!== false;
+   }
+
private function getConflictingRowConditions( array $values ) {
$dbw = wfGetDB( DB_MASTER );
$indexes = $this->getUniqueIndexes();

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I143f37949813e0849711bc808ce48a741c236d11
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Hoo man 

___
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits