X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FGlobalFunctions.php;h=cda3154253dd3d5dff9546385d73460db59b5dda;hb=52010e6d21d8bdefa1c89fbc9421850185cc5011;hp=6fbc11d0d84f4759909850e48abe31eda3e346fe;hpb=e047732be4f78b1f803173db4b10fcde45225e6d;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 6fbc11d0d8..cda3154253 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -1233,7 +1233,7 @@ function wfLogWarning( $msg, $callerOffset = 1, $level = E_USER_WARNING ) { * @param string $file Filename * @param array $context Additional logging context data * @throws MWException - * @deprecated since 1.25 Use MediaWiki\Logger\LegacyLogger::emit or UDPTransport + * @deprecated since 1.25 Use \\MediaWiki\\Logger\\LegacyLogger::emit or UDPTransport */ function wfErrorLog( $text, $file, array $context = array() ) { wfDeprecated( __METHOD__, '1.25' ); @@ -1342,11 +1342,36 @@ function wfReadOnly() { } /** - * Get the value of $wgReadOnly or the contents of $wgReadOnlyFile. + * Check if the site is in read-only mode and return the message if so + * + * This checks wfConfiguredReadOnlyReason() and the main load balancer + * for slave lag. This may result in DB_SLAVE connection being made. * * @return string|bool String when in read-only mode; false otherwise */ function wfReadOnlyReason() { + $readOnly = wfConfiguredReadOnlyReason(); + if ( $readOnly !== false ) { + return $readOnly; + } + + static $lbReadOnly = null; + if ( $lbReadOnly === null ) { + // Callers use this method to be aware that data presented to a user + // may be very stale and thus allowing submissions can be problematic. + $lbReadOnly = wfGetLB()->getReadOnlyReason(); + } + + return $lbReadOnly; +} + +/** + * Get the value of $wgReadOnly or the contents of $wgReadOnlyFile. + * + * @return string|bool String when in read-only mode; false otherwise + * @since 1.27 + */ +function wfConfiguredReadOnlyReason() { global $wgReadOnly, $wgReadOnlyFile; if ( $wgReadOnly === null ) { @@ -1356,17 +1381,6 @@ function wfReadOnlyReason() { } else { $wgReadOnly = false; } - // Callers use this method to be aware that data presented to a user - // may be very stale and thus allowing submissions can be problematic. - try { - if ( $wgReadOnly === false && wfGetLB()->getLaggedSlaveMode() ) { - $wgReadOnly = 'The database has been automatically locked ' . - 'while the slave database servers catch up to the master'; - } - } catch ( DBConnectionError $e ) { - $wgReadOnly = 'The database has been automatically locked ' . - 'until the slave database servers become available'; - } } return $wgReadOnly; @@ -1961,8 +1975,11 @@ function wfGetAllCallers( $limit = 3 ) { * @return string */ function wfFormatStackFrame( $frame ) { - return isset( $frame['class'] ) ? - $frame['class'] . '::' . $frame['function'] : + if ( !isset( $frame['function'] ) ) { + return 'NO_FUNCTION_GIVEN'; + } + return isset( $frame['class'] ) && isset( $frame['type'] ) ? + $frame['class'] . $frame['type'] . $frame['function'] : $frame['function']; } @@ -2832,16 +2849,17 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), $status = false; $logMsg = false; - // According to the documentation, it is possible for stream_select() - // to fail due to EINTR. I haven't managed to induce this in testing - // despite sending various signals. If it did happen, the error - // message would take the form: - // - // stream_select(): unable to select [4]: Interrupted system call (max_fd=5) - // - // where [4] is the value of the macro EINTR and "Interrupted system - // call" is string which according to the Linux manual is "possibly" - // localised according to LC_MESSAGES. + /* According to the documentation, it is possible for stream_select() + * to fail due to EINTR. I haven't managed to induce this in testing + * despite sending various signals. If it did happen, the error + * message would take the form: + * + * stream_select(): unable to select [4]: Interrupted system call (max_fd=5) + * + * where [4] is the value of the macro EINTR and "Interrupted system + * call" is string which according to the Linux manual is "possibly" + * localised according to LC_MESSAGES. + */ $eintr = defined( 'SOCKET_EINTR' ) ? SOCKET_EINTR : 4; $eintrMessage = "stream_select(): unable to select [$eintr]"; @@ -3530,11 +3548,10 @@ function wfGetPrecompiledData( $name ) { * @return string */ function wfMemcKey( /*...*/ ) { - global $wgCachePrefix; - $prefix = $wgCachePrefix === false ? wfWikiID() : $wgCachePrefix; - $args = func_get_args(); - $key = $prefix . ':' . implode( ':', $args ); - return strtr( $key, ' ', '_' ); + return call_user_func_array( + array( ObjectCache::getLocalClusterInstance(), 'makeKey' ), + func_get_args() + ); } /** @@ -3549,13 +3566,11 @@ function wfMemcKey( /*...*/ ) { */ function wfForeignMemcKey( $db, $prefix /*...*/ ) { $args = array_slice( func_get_args(), 2 ); - if ( $prefix ) { - // Match wfWikiID() logic - $key = "$db-$prefix:" . implode( ':', $args ); - } else { - $key = $db . ':' . implode( ':', $args ); - } - return strtr( $key, ' ', '_' ); + $keyspace = $prefix ? "$db-$prefix" : $db; + return call_user_func_array( + array( ObjectCache::getLocalClusterInstance(), 'makeKeyInternal' ), + array( $keyspace, $args ) + ); } /** @@ -3570,9 +3585,10 @@ function wfForeignMemcKey( $db, $prefix /*...*/ ) { * @return string */ function wfGlobalCacheKey( /*...*/ ) { - $args = func_get_args(); - $key = 'global:' . implode( ':', $args ); - return strtr( $key, ' ', '_' ); + return call_user_func_array( + array( ObjectCache::getLocalClusterInstance(), 'makeGlobalKey' ), + func_get_args() + ); } /** @@ -3689,20 +3705,20 @@ function wfQueriesMustScale() { /** * Get the path to a specified script file, respecting file - * extensions; this is a wrapper around $wgScriptExtension etc. + * extensions; this is a wrapper around $wgScriptPath etc. * except for 'index' and 'load' which use $wgScript/$wgLoadScript * * @param string $script Script filename, sans extension * @return string */ function wfScript( $script = 'index' ) { - global $wgScriptPath, $wgScriptExtension, $wgScript, $wgLoadScript; + global $wgScriptPath, $wgScript, $wgLoadScript; if ( $script === 'index' ) { return $wgScript; } elseif ( $script === 'load' ) { return $wgLoadScript; } else { - return "{$wgScriptPath}/{$script}{$wgScriptExtension}"; + return "{$wgScriptPath}/{$script}.php"; } } @@ -3713,16 +3729,16 @@ function wfScript( $script = 'index' ) { */ function wfGetScriptUrl() { if ( isset( $_SERVER['SCRIPT_NAME'] ) ) { - # - # as it was called, minus the query string. - # - # Some sites use Apache rewrite rules to handle subdomains, - # and have PHP set up in a weird way that causes PHP_SELF - # to contain the rewritten URL instead of the one that the - # outside world sees. - # - # If in this mode, use SCRIPT_URL instead, which mod_rewrite - # provides containing the "before" URL. + /* as it was called, minus the query string. + * + * Some sites use Apache rewrite rules to handle subdomains, + * and have PHP set up in a weird way that causes PHP_SELF + * to contain the rewritten URL instead of the one that the + * outside world sees. + * + * If in this mode, use SCRIPT_URL instead, which mod_rewrite + * provides containing the "before" URL. + */ return $_SERVER['SCRIPT_NAME']; } else { return $_SERVER['URL']; @@ -3912,12 +3928,13 @@ function wfTransactionalTimeLimit() { * Converts shorthand byte notation to integer form * * @param string $string + * @param int $default Returned if $string is empty * @return int */ -function wfShorthandToInteger( $string = '' ) { +function wfShorthandToInteger( $string = '', $default = -1 ) { $string = trim( $string ); if ( $string === '' ) { - return -1; + return $default; } $last = $string[strlen( $string ) - 1]; $val = intval( $string );