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
Pass options as array to IDatabase::insert
[lhc/web/wiklou.git]
/
includes
/
objectcache
/
SqlBagOStuff.php
diff --git
a/includes/objectcache/SqlBagOStuff.php
b/includes/objectcache/SqlBagOStuff.php
index
b2d61a8
..
5313ca4
100644
(file)
--- a/
includes/objectcache/SqlBagOStuff.php
+++ b/
includes/objectcache/SqlBagOStuff.php
@@
-234,22
+234,34
@@
class SqlBagOStuff extends BagOStuff {
}
}
}
}
- protected function doGet( $key, $flags = 0 ) {
+ protected function doGet( $key, $flags = 0
, &$casToken = null
) {
$casToken = null;
$casToken = null;
- return $this->getWithToken( $key, $casToken, $flags );
- }
+ $blobs = $this->fetchBlobMulti( [ $key ] );
+ if ( array_key_exists( $key, $blobs ) ) {
+ $blob = $blobs[$key];
+ $value = $this->unserialize( $blob );
+
+ $casToken = ( $value !== false ) ? $blob : null;
- protected function getWithToken( $key, &$casToken, $flags = 0 ) {
- $values = $this->getMulti( [ $key ] );
- if ( array_key_exists( $key, $values ) ) {
- $casToken = $values[$key];
- return $values[$key];
+ return $value;
}
}
+
return false;
}
public function getMulti( array $keys, $flags = 0 ) {
return false;
}
public function getMulti( array $keys, $flags = 0 ) {
+ $values = [];
+
+ $blobs = $this->fetchBlobMulti( $keys );
+ foreach ( $blobs as $key => $blob ) {
+ $values[$key] = $this->unserialize( $blob );
+ }
+
+ return $values;
+ }
+
+ public function fetchBlobMulti( array $keys, $flags = 0 ) {
$values = []; // array of (key => value)
$keysByTable = [];
$values = []; // array of (key => value)
$keysByTable = [];
@@
-298,7
+310,7
@@
class SqlBagOStuff extends BagOStuff {
if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
$this->debug( "get: key has expired" );
} else { // HIT
if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
$this->debug( "get: key has expired" );
} else { // HIT
- $values[$key] = $
this->unserialize( $db->decodeBlob( $row->value )
);
+ $values[$key] = $
db->decodeBlob( $row->value
);
}
} catch ( DBQueryError $e ) {
$this->handleWriteError( $e, $db, $row->serverIndex );
}
} catch ( DBQueryError $e ) {
$this->handleWriteError( $e, $db, $row->serverIndex );
@@
-344,7
+356,7
@@
class SqlBagOStuff extends BagOStuff {
if ( $exptime == 0 ) {
$encExpiry = $this->getMaxDateTime( $db );
} else {
if ( $exptime == 0 ) {
$encExpiry = $this->getMaxDateTime( $db );
} else {
- $exptime = $this->convertExpiry( $exptime );
+ $exptime = $this->convert
To
Expiry( $exptime );
$encExpiry = $db->timestamp( $exptime );
}
foreach ( $serverKeys as $tableName => $tableKeys ) {
$encExpiry = $db->timestamp( $exptime );
}
foreach ( $serverKeys as $tableName => $tableKeys ) {
@@
-406,7
+418,7
@@
class SqlBagOStuff extends BagOStuff {
if ( $exptime == 0 ) {
$encExpiry = $this->getMaxDateTime( $db );
} else {
if ( $exptime == 0 ) {
$encExpiry = $this->getMaxDateTime( $db );
} else {
- $exptime = $this->convertExpiry( $exptime );
+ $exptime = $this->convert
To
Expiry( $exptime );
$encExpiry = $db->timestamp( $exptime );
}
// (T26425) use a replace if the db supports it instead of
$encExpiry = $db->timestamp( $exptime );
}
// (T26425) use a replace if the db supports it instead of
@@
-420,7
+432,7
@@
class SqlBagOStuff extends BagOStuff {
],
[
'keyname' => $key,
],
[
'keyname' => $key,
- 'value' => $db->encodeBlob( $
this->serialize( $casToken )
)
+ 'value' => $db->encodeBlob( $
casToken
)
],
__METHOD__
);
],
__METHOD__
);
@@
-510,7
+522,7
@@
class SqlBagOStuff extends BagOStuff {
'exptime' => $row->exptime
],
__METHOD__,
'exptime' => $row->exptime
],
__METHOD__,
- 'IGNORE'
+ [ 'IGNORE' ]
);
if ( $db->affectedRows() == 0 ) {
);
if ( $db->affectedRows() == 0 ) {
@@
-519,7
+531,7
@@
class SqlBagOStuff extends BagOStuff {
}
} catch ( DBError $e ) {
$this->handleWriteError( $e, $db, $serverIndex );
}
} catch ( DBError $e ) {
$this->handleWriteError( $e, $db, $serverIndex );
- return
null
;
+ return
false
;
}
return $newValue;
}
return $newValue;
@@
-534,20
+546,33
@@
class SqlBagOStuff extends BagOStuff {
return $ok;
}
return $ok;
}
- public function changeTTL( $key, $exp
iry
= 0, $flags = 0 ) {
+ public function changeTTL( $key, $exp
time
= 0, $flags = 0 ) {
list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
$db = null;
$silenceScope = $this->silenceTransactionProfiler();
try {
$db = $this->getDB( $serverIndex );
list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
$db = null;
$silenceScope = $this->silenceTransactionProfiler();
try {
$db = $this->getDB( $serverIndex );
+ if ( $exptime == 0 ) {
+ $timestamp = $this->getMaxDateTime( $db );
+ } else {
+ $timestamp = $db->timestamp( $this->convertToExpiry( $exptime ) );
+ }
$db->update(
$tableName,
$db->update(
$tableName,
- [ 'exptime' => $
db->timestamp( $this->convertExpiry( $expiry ) )
],
+ [ 'exptime' => $
timestamp
],
[ 'keyname' => $key, 'exptime > ' . $db->addQuotes( $db->timestamp( time() ) ) ],
__METHOD__
);
if ( $db->affectedRows() == 0 ) {
[ 'keyname' => $key, 'exptime > ' . $db->addQuotes( $db->timestamp( time() ) ) ],
__METHOD__
);
if ( $db->affectedRows() == 0 ) {
- return false;
+ $exists = (bool)$db->selectField(
+ $tableName,
+ 1,
+ [ 'keyname' => $key, 'exptime' => $timestamp ],
+ __METHOD__,
+ [ 'FOR UPDATE' ]
+ );
+
+ return $exists;
}
} catch ( DBError $e ) {
$this->handleWriteError( $e, $db, $serverIndex );
}
} catch ( DBError $e ) {
$this->handleWriteError( $e, $db, $serverIndex );