/**
* Add raw HTML to the list of scripts (including \<script\> tag, etc.)
+ * Internal use only. Use OutputPage::addModules() or OutputPage::addJsConfigVars()
+ * if possible.
*
* @param string $script Raw HTML
*/
/**
* Register and add a stylesheet from an extension directory.
*
+ * @deprecated since 1.27 use addModuleStyles() or addStyle() instead
* @param string $url Path to sheet. Provide either a full url (beginning
* with 'http', etc) or a relative path from the document root
* (beginning with '/'). Otherwise it behaves identically to
* addStyle() and draws from the /skins folder.
*/
public function addExtensionStyle( $url ) {
+ wfDeprecated( __METHOD__, '1.27' );
array_push( $this->mExtStyles, $url );
}
/**
* Get all styles added by extensions
*
+ * @deprecated since 1.27
* @return array
*/
function getExtStyle() {
+ wfDeprecated( __METHOD__, '1.27' );
return $this->mExtStyles;
}
/**
* Add a JavaScript file out of skins/common, or a given relative path.
+ * Internal use only. Use OutputPage::addModules() if possible.
*
* @param string $file Filename in skins/common or complete on-server path
* (/foo/bar.js)
/**
* Add a self-contained script tag with the given contents
+ * Internal use only. Use OutputPage::addModules() if possible.
*
* @param string $script JavaScript text, no "<script>" tags
*/
/**
* Add or replace an header item to the output
*
+ * Whenever possible, use more specific options like ResourceLoader modules,
+ * OutputPage::addLink(), OutputPage::addMetaLink() and OutputPage::addFeedLink()
+ * Fallback options for those are: OutputPage::addStyle, OutputPage::addScript(),
+ * OutputPage::addInlineScript() and OutputPage::addInlineStyle()
+ * This would be your very LAST fallback.
+ *
* @param string $name Item name
* @param string $value Raw HTML
*/
* @param string|Message $str String or Message to add to the subtitle
*/
public function appendSubtitle( $str ) {
+ wfDeprecated( __METHOD__, '1.19' );
$this->addSubtitle( $str );
}
* @param ParserOutput $parserOutput
*/
public function addParserOutputNoText( $parserOutput ) {
+ wfDeprecated( __METHOD__, '1.24' );
$this->addParserOutputMetadata( $parserOutput );
}
* @deprecated since 1.18
*/
function blockedPage() {
+ wfDeprecated( __METHOD__, '1.18' );
throw new UserBlockedError( $this->getUser()->mBlock );
}
* @throws PermissionsError
*/
public function permissionRequired( $permission ) {
+ wfDeprecated( __METHOD__, '1.18' );
throw new PermissionsError( $permission );
}
* @deprecated since 1.19; throw the exception directly
*/
public function loginToUse() {
+ wfDeprecated( __METHOD__, '1.19' );
throw new PermissionsError( 'read' );
}
/**
* Add a local or specified stylesheet, with the given media options.
- * Meant primarily for internal use...
+ * Internal use only. Use OutputPage::addModuleStyles() if possible.
*
* @param string $style URL to the file
* @param string $media To specify a media type, 'screen', 'printable', 'handheld' or any.
/**
* Adds inline CSS styles
+ * Internal use only. Use OutputPage::addModuleStyles() if possible.
+ *
* @param mixed $style_css Inline CSS
* @param string $flip Set to 'flip' to flip the CSS if needed
*/
* @deprecated since 1.17
*/
public function includeJQuery( array $modules = array() ) {
+ wfDeprecated( __METHOD__, '1.17' );
return array();
}
class SqlBagOStuff extends BagOStuff {
/** @var LoadBalancer */
protected $lb;
-
/** @var array */
protected $serverInfos;
-
/** @var array */
protected $serverNames;
-
/** @var int */
protected $numServers;
-
- /** @var array */
- protected $conns;
-
/** @var int */
protected $lastExpireAll = 0;
-
/** @var int */
protected $purgePeriod = 100;
-
/** @var int */
protected $shards = 1;
-
/** @var string */
protected $tableName = 'objectcache';
-
/** @var bool */
protected $slaveOnly = false;
+ /** @var int */
+ protected $syncTimeout = 3;
+ /** @var array */
+ protected $conns;
/** @var array UNIX timestamps */
protected $connFailureTimes = array();
-
/** @var array Exceptions */
protected $connFailureErrors = array();
* 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.
+ * - syncTimeout: Max seconds to wait for slaves to catch up for WRITE_SYNC.
*
* @param array $params
*/
if ( isset( $params['shards'] ) ) {
$this->shards = intval( $params['shards'] );
}
+ if ( isset( $params['syncTimeout'] ) ) {
+ $this->syncTimeout = $params['syncTimeout'];
+ }
$this->slaveOnly = !empty( $params['slaveOnly'] );
}
}
public function set( $key, $value, $exptime = 0, $flags = 0 ) {
- return $this->setMulti( array( $key => $value ), $exptime );
+ $ok = $this->setMulti( array( $key => $value ), $exptime );
+ if ( ( $flags & self::WRITE_SYNC ) == self::WRITE_SYNC ) {
+ $ok = $ok && $this->waitForSlaves();
+ }
+
+ return $ok;
}
protected function cas( $casToken, $key, $value, $exptime = 0 ) {
throw new Exception( "Got invalid callback." );
}
- return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+ $ok = $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+ if ( ( $flags & self::WRITE_SYNC ) == self::WRITE_SYNC ) {
+ $ok = $ok && $this->waitForSlaves();
+ }
+
+ return $ok;
}
/**
}
}
}
+
+ protected function waitForSlaves() {
+ if ( !$this->serverInfos ) {
+ // Main LB is used; wait for any slaves to catch up
+ return wfWaitForSlaves( null, false, false, $this->syncTimeout );
+ } else {
+ // Custom DB server list; probably doesn't use replication
+ return true;
+ }
+ }
}