Ed Hoo has uploaded a new change for review.
https://gerrit.wikimedia.org/r/261105
Change subject: Use of DB_MASTER in order to consider replication lag
......................................................................
Use of DB_MASTER in order to consider replication lag
Fix 1:
Change calls from DB_SLAVE to DB_MASTER in order to ensure that slaves being
out of date will not cause updates to be driven off stale information.
Fix 2:
Use of the naming convention 'dbw' to indicate connections to DB_MASTER.
Bug: T122469
Change-Id: Ic610746ee997f41e37345f9ac01a3d459ce584ad
---
M Cargo.hooks.php
M CargoUtils.php
M parserfunctions/CargoAttach.php
M parserfunctions/CargoStore.php
M specials/CargoDeleteTable.php
M specials/CargoPageValues.php
M specials/CargoRecreateData.php
7 files changed, 50 insertions(+), 50 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Cargo
refs/changes/05/261105/1
diff --git a/Cargo.hooks.php b/Cargo.hooks.php
index 3ea7ddd..9abbb8c 100644
--- a/Cargo.hooks.php
+++ b/Cargo.hooks.php
@@ -117,15 +117,15 @@
// efficiently delete from the former.)
// Get all the "main" tables that this page is contained in.
- $dbr = wfGetDB( DB_MASTER );
+ $dbw = wfGetDB( DB_MASTER );
$cdb = CargoUtils::getDB();
- $res = $dbr->select( 'cargo_pages', 'table_name', array(
'page_id' => $pageID ) );
- while ( $row = $dbr->fetchRow( $res ) ) {
+ $res = $dbw->select( 'cargo_pages', 'table_name', array(
'page_id' => $pageID ) );
+ while ( $row = $dbw->fetchRow( $res ) ) {
$curMainTable = $row['table_name'];
// First, delete from the "field" tables.
- $res2 = $dbr->select( 'cargo_tables', 'field_tables',
array( 'main_table' => $curMainTable ) );
- $row2 = $dbr->fetchRow( $res2 );
+ $res2 = $dbw->select( 'cargo_tables', 'field_tables',
array( 'main_table' => $curMainTable ) );
+ $row2 = $dbw->fetchRow( $res2 );
$fieldTableNames = unserialize( $row2['field_tables'] );
foreach ( $fieldTableNames as $curFieldTable ) {
// Thankfully, the MW DB API already provides a
@@ -139,7 +139,7 @@
}
// Finally, delete from cargo_pages.
- $dbr->delete( 'cargo_pages', array( 'page_id' => $pageID ) );
+ $dbw->delete( 'cargo_pages', array( 'page_id' => $pageID ) );
// This call is needed to get deletions to actually happen.
$cdb->close();
@@ -222,13 +222,13 @@
$newPageName = $newtitle->getPrefixedText();
$newPageTitle = $newtitle->getText();
$newPageNamespace = $newtitle->getNamespace();
- $dbr = wfGetDB( DB_MASTER );
+ $dbw = wfGetDB( DB_MASTER );
$cdb = CargoUtils::getDB();
// We use $oldid, because that's the page ID - $newid is the
// ID of the redirect page.
// @TODO - do anything with the redirect?
- $res = $dbr->select( 'cargo_pages', 'table_name', array(
'page_id' => $oldid ) );
- while ( $row = $dbr->fetchRow( $res ) ) {
+ $res = $dbw->select( 'cargo_pages', 'table_name', array(
'page_id' => $oldid ) );
+ while ( $row = $dbw->fetchRow( $res ) ) {
$curMainTable = $row['table_name'];
$cdb->update( $curMainTable,
array(
diff --git a/CargoUtils.php b/CargoUtils.php
index 0ecd191..e1ad9fd 100644
--- a/CargoUtils.php
+++ b/CargoUtils.php
@@ -22,10 +22,10 @@
public static function getDB() {
global $wgDBuser, $wgDBpassword, $wgDBprefix;
global $wgCargoDBserver, $wgCargoDBname, $wgCargoDBuser,
$wgCargoDBpassword, $wgCargoDBtype;
- $dbr = wfGetDB( DB_SLAVE );
- $server = $dbr->getServer();
- $name = $dbr->getDBname();
- $type = $dbr->getType();
+ $dbw = wfGetDB( DB_MASTER );
+ $server = $dbw->getServer();
+ $name = $dbw->getDBname();
+ $type = $dbw->getType();
$dbType = is_null( $wgCargoDBtype ) ? $type : $wgCargoDBtype;
$dbServer = is_null( $wgCargoDBserver ) ? $server :
$wgCargoDBserver;
@@ -52,8 +52,8 @@
* Gets a page property for the specified page ID and property name.
*/
public static function getPageProp( $pageID, $pageProp ) {
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( 'page_props', array(
+ $dbw = wfGetDB( DB_MASTER );
+ $res = $dbw->select( 'page_props', array(
'pp_value'
), array(
'pp_page' => $pageID,
@@ -61,7 +61,7 @@
)
);
- if ( !$row = $dbr->fetchRow( $res ) ) {
+ if ( !$row = $dbw->fetchRow( $res ) ) {
return null;
}
@@ -72,8 +72,8 @@
* Similar to getPageProp().
*/
public static function getAllPageProps( $pageProp ) {
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( 'page_props', array(
+ $dbw = wfGetDB( DB_MASTER );
+ $res = $dbw->select( 'page_props', array(
'pp_page',
'pp_value'
), array(
@@ -82,7 +82,7 @@
);
$pagesPerValue = array();
- while ( $row = $dbr->fetchRow( $res ) ) {
+ while ( $row = $dbw->fetchRow( $res ) ) {
$pageID = $row['pp_page'];
$pageValue = $row['pp_value'];
if ( array_key_exists( $pageValue, $pagesPerValue ) ) {
@@ -100,15 +100,15 @@
* hopefully there's exactly one of them.
*/
public static function getTemplateIDForDBTable( $tableName ) {
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( 'page_props', array(
+ $dbw = wfGetDB( DB_MASTER );
+ $res = $dbw->select( 'page_props', array(
'pp_page'
), array(
'pp_value' => $tableName,
'pp_propname' => 'CargoTableName'
)
);
- if ( !$row = $dbr->fetchRow( $res ) ) {
+ if ( !$row = $dbw->fetchRow( $res ) ) {
return null;
}
return $row['pp_page'];
@@ -120,9 +120,9 @@
public static function getTables() {
$tableNames = array();
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( 'cargo_tables', 'main_table' );
- while ( $row = $dbr->fetchRow( $res ) ) {
+ $dbw = wfGetDB( DB_MASTER );
+ $res = $dbw->select( 'cargo_tables', 'main_table' );
+ while ( $row = $dbw->fetchRow( $res ) ) {
$tableNames[] = $row[0];
}
return $tableNames;
@@ -141,10 +141,10 @@
}
}
$tableSchemas = array();
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( 'cargo_tables', array( 'main_table',
'table_schema' ),
+ $dbw = wfGetDB( DB_MASTER );
+ $res = $dbw->select( 'cargo_tables', array( 'main_table',
'table_schema' ),
array( 'main_table' => $mainTableNames ) );
- while ( $row = $dbr->fetchRow( $res ) ) {
+ while ( $row = $dbw->fetchRow( $res ) ) {
$tableName = $row['main_table'];
$tableSchemaString = $row['table_schema'];
$tableSchemas[$tableName] =
CargoTableSchema::newFromDBString( $tableSchemaString );
@@ -397,11 +397,11 @@
}
$tableSchema = CargoTableSchema::newFromDBString(
$tableSchemaString );
- $dbr = wfGetDB( DB_MASTER );
+ $dbw = wfGetDB( DB_MASTER );
$cdb = self::getDB();
- $res = $dbr->select( 'cargo_tables', 'main_table', array(
'template_id' => $templatePageID ) );
- while ( $row = $dbr->fetchRow( $res ) ) {
+ $res = $dbw->select( 'cargo_tables', 'main_table', array(
'template_id' => $templatePageID ) );
+ while ( $row = $dbw->fetchRow( $res ) ) {
$curTable = $row['main_table'];
try {
$cdb->dropTable( $curTable );
@@ -409,10 +409,10 @@
throw new MWException( "Caught exception ($e)
while trying to drop Cargo table. "
. "Please make sure that your database user
account has the DROP permission." );
}
- $dbr->delete( 'cargo_pages', array( 'table_name' =>
$curTable ) );
+ $dbw->delete( 'cargo_pages', array( 'table_name' =>
$curTable ) );
}
- $dbr->delete( 'cargo_tables', array( 'template_id' =>
$templatePageID ) );
+ $dbw->delete( 'cargo_tables', array( 'template_id' =>
$templatePageID ) );
if ( $tableName == null ) {
$tableName = self::getPageProp( $templatePageID,
'CargoTableName' );
@@ -521,7 +521,7 @@
$cdb->close();
// Finally, store all the info in the cargo_tables table.
- $dbr->insert( 'cargo_tables',
+ $dbw->insert( 'cargo_tables',
array( 'template_id' => $templatePageID, 'main_table'
=> $tableName,
'field_tables' => serialize( $fieldTableNames ),
'table_schema' => $tableSchemaString ) );
return true;
diff --git a/parserfunctions/CargoAttach.php b/parserfunctions/CargoAttach.php
index 5a5cae9..31eb9e5 100644
--- a/parserfunctions/CargoAttach.php
+++ b/parserfunctions/CargoAttach.php
@@ -41,9 +41,9 @@
return CargoUtils::formatError( "Error: Table name must
be specified." );
}
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( 'cargo_tables', 'COUNT(*)', array(
'main_table' => $tableName ) );
- $row = $dbr->fetchRow( $res );
+ $dbw = wfGetDB( DB_MASTER );
+ $res = $dbw->select( 'cargo_tables', 'COUNT(*)', array(
'main_table' => $tableName ) );
+ $row = $dbw->fetchRow( $res );
if ( $row[0] == 0 ) {
return CargoUtils::formatError( "Error: The specified
table, \"$tableName\", does not exist." );
}
diff --git a/parserfunctions/CargoStore.php b/parserfunctions/CargoStore.php
index e6b9463..2c4c49e 100644
--- a/parserfunctions/CargoStore.php
+++ b/parserfunctions/CargoStore.php
@@ -93,9 +93,9 @@
}
// Get the declaration of the table.
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( 'cargo_tables', 'table_schema', array(
'main_table' => $tableName ) );
- $row = $dbr->fetchRow( $res );
+ $dbw = wfGetDB( DB_MASTER );
+ $res = $dbw->select( 'cargo_tables', 'table_schema', array(
'main_table' => $tableName ) );
+ $row = $dbw->fetchRow( $res );
if ( $row == '' ) {
// This table probably has not been created yet -
// just exit silently.
diff --git a/specials/CargoDeleteTable.php b/specials/CargoDeleteTable.php
index 026c1bb..f3342c3 100644
--- a/specials/CargoDeleteTable.php
+++ b/specials/CargoDeleteTable.php
@@ -56,8 +56,8 @@
}
// Make sure that this table exists.
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( 'cargo_tables', array( 'main_table',
'field_tables' ),
+ $dbw = wfGetDB( DB_MASTER );
+ $res = $dbw->select( 'cargo_tables', array( 'main_table',
'field_tables' ),
array( 'main_table' => $subpage ) );
if ( $res->numRows() == 0 ) {
$out->addHTML( CargoUtils::formatError( "Error: no
table found named \"$subpage\"." ) );
diff --git a/specials/CargoPageValues.php b/specials/CargoPageValues.php
index db948b4..473b298 100644
--- a/specials/CargoPageValues.php
+++ b/specials/CargoPageValues.php
@@ -36,10 +36,10 @@
$text = '';
- $dbr = wfGetDB( DB_MASTER );
- $res = $dbr->select(
+ $dbw = wfGetDB( DB_MASTER );
+ $res = $dbw->select(
'cargo_pages', 'table_name', array( 'page_id' =>
$this->mTitle->getArticleID() ) );
- while ( $row = $dbr->fetchRow( $res ) ) {
+ while ( $row = $dbw->fetchRow( $res ) ) {
$tableName = $row['table_name'];
$queryResults = $this->getRowsForPageInTable(
$tableName );
$text .= Html::element( 'h2', null,
diff --git a/specials/CargoRecreateData.php b/specials/CargoRecreateData.php
index d1b10c8..f9f8589 100644
--- a/specials/CargoRecreateData.php
+++ b/specials/CargoRecreateData.php
@@ -46,16 +46,16 @@
$out->addModules( 'ext.cargo.recreatedata' );
$templateData = array();
- $dbr = wfGetDB( DB_SLAVE );
+ $dbw = wfGetDB( DB_MASTER );
$templateData[] = array(
'name' => $this->mTemplateTitle->getText(),
- 'numPages' => $this->getNumPagesThatCallTemplate( $dbr,
$this->mTemplateTitle )
+ 'numPages' => $this->getNumPagesThatCallTemplate( $dbw,
$this->mTemplateTitle )
);
if ( $this->mIsDeclared ) {
// Get all attached templates.
- $res = $dbr->select( 'page_props',
+ $res = $dbw->select( 'page_props',
array(
'pp_page'
),
@@ -64,10 +64,10 @@
'pp_propname' => 'CargoAttachedTable'
)
);
- while ( $row = $dbr->fetchRow( $res ) ) {
+ while ( $row = $dbw->fetchRow( $res ) ) {
$templateID = $row['pp_page'];
$attachedTemplateTitle = Title::newFromID(
$templateID );
- $numPages = $this->getNumPagesThatCallTemplate(
$dbr, $attachedTemplateTitle );
+ $numPages = $this->getNumPagesThatCallTemplate(
$dbw, $attachedTemplateTitle );
$attachedTemplateName =
$attachedTemplateTitle->getText();
$templateData[] = array(
'name' => $attachedTemplateName,
--
To view, visit https://gerrit.wikimedia.org/r/261105
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic610746ee997f41e37345f9ac01a3d459ce584ad
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Cargo
Gerrit-Branch: master
Gerrit-Owner: Ed Hoo <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits