dépôts
/
lhc
/
web
/
wiklou.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge "Remove the strong formatting for 'revdelete-suppress'"
[lhc/web/wiklou.git]
/
includes
/
objectcache
/
SqlBagOStuff.php
diff --git
a/includes/objectcache/SqlBagOStuff.php
b/includes/objectcache/SqlBagOStuff.php
index
b8c1e75
..
c57c9fb
100644
(file)
--- a/
includes/objectcache/SqlBagOStuff.php
+++ b/
includes/objectcache/SqlBagOStuff.php
@@
-30,6
+30,7
@@
class SqlBagOStuff extends BagOStuff {
/** @var LoadBalancer */
protected $lb;
/** @var LoadBalancer */
protected $lb;
+ /** @var array */
protected $serverInfos;
/** @var array */
protected $serverInfos;
/** @var array */
@@
-53,6
+54,9
@@
class SqlBagOStuff extends BagOStuff {
/** @var string */
protected $tableName = 'objectcache';
/** @var string */
protected $tableName = 'objectcache';
+ /** @var bool */
+ protected $slaveOnly = false;
+
/** @var array UNIX timestamps */
protected $connFailureTimes = array();
/** @var array UNIX timestamps */
protected $connFailureTimes = array();
@@
-84,6
+88,10
@@
class SqlBagOStuff extends BagOStuff {
* required to hold the largest shard index. Data will be
* distributed across all tables by key hash. This is for
* MySQL bugs 61735 and 61736.
* required to hold the largest shard index. Data will be
* distributed across all tables by key hash. This is for
* MySQL bugs 61735 and 61736.
+ * - slaveOnly: Whether to only use slave DBs and avoid triggering
+ * garbage collection logic of expired items. This only
+ * makes sense if the primary DB is used and only if get()
+ * calls will be used. This is used by ReplicatedBagOStuff.
*
* @param array $params
*/
*
* @param array $params
*/
@@
-112,6
+120,7
@@
class SqlBagOStuff extends BagOStuff {
if ( isset( $params['shards'] ) ) {
$this->shards = intval( $params['shards'] );
}
if ( isset( $params['shards'] ) ) {
$this->shards = intval( $params['shards'] );
}
+ $this->slaveOnly = !empty( $params['slaveOnly'] );
}
/**
}
/**
@@
-155,12
+164,13
@@
class SqlBagOStuff extends BagOStuff {
* However, SQLite has an opposite behavior. And PostgreSQL needs to know
* if we are in transaction or no
*/
* However, SQLite has an opposite behavior. And PostgreSQL needs to know
* if we are in transaction or no
*/
- if ( wfGetDB( DB_MASTER )->getType() == 'mysql' ) {
+ $index = $this->slaveOnly ? DB_SLAVE : DB_MASTER;
+ if ( wfGetDB( $index )->getType() == 'mysql' ) {
$this->lb = wfGetLBFactory()->newMainLB();
$this->lb = wfGetLBFactory()->newMainLB();
- $db = $this->lb->getConnection(
DB_MASTER
);
+ $db = $this->lb->getConnection(
$index
);
$db->clearFlag( DBO_TRX ); // auto-commit mode
} else {
$db->clearFlag( DBO_TRX ); // auto-commit mode
} else {
- $db = wfGetDB(
DB_MASTER
);
+ $db = wfGetDB(
$index
);
}
}
if ( $wgDebugDBTransactions ) {
}
}
if ( $wgDebugDBTransactions ) {
@@
-274,12
+284,7
@@
class SqlBagOStuff extends BagOStuff {
try {
$db = $this->getDB( $row->serverIndex );
if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
try {
$db = $this->getDB( $row->serverIndex );
if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
- $this->debug( "get: key has expired, deleting" );
- # Put the expiry time in the WHERE condition to avoid deleting a
- # newly-inserted value
- $db->delete( $row->tableName,
- array( 'keyname' => $key, 'exptime' => $row->exptime ),
- __METHOD__ );
+ $this->debug( "get: key has expired" );
} else { // HIT
$values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
}
} else { // HIT
$values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
}
@@
-544,7
+549,7
@@
class SqlBagOStuff extends BagOStuff {
}
protected function garbageCollect() {
}
protected function garbageCollect() {
- if ( !$this->purgePeriod ) {
+ if ( !$this->purgePeriod
|| $this->slaveOnly
) {
// Disabled
return;
}
// Disabled
return;
}