[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Makes several 'set', 'incr' and 'get' requests on every memcached 4 * server and shows a report. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License along 17 * with this program; if not, write to the Free Software Foundation, Inc., 18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 19 * http://www.gnu.org/copyleft/gpl.html 20 * 21 * @file 22 * @ingroup Maintenance 23 */ 24 25 require_once __DIR__ . '/Maintenance.php'; 26 27 /** 28 * Maintenance script that makes several 'set', 'incr' and 'get' requests 29 * on every memcached server and shows a report. 30 * 31 * @ingroup Maintenance 32 */ 33 class McTest extends Maintenance { 34 public function __construct() { 35 parent::__construct(); 36 $this->mDescription = "Makes several 'set', 'incr' and 'get' requests on every" 37 . " memcached server and shows a report"; 38 $this->addOption( 'i', 'Number of iterations', false, true ); 39 $this->addOption( 'cache', 'Use servers from this $wgObjectCaches store', false, true ); 40 $this->addArg( 'server[:port]', 'Memcached server to test, with optional port', false ); 41 } 42 43 public function execute() { 44 global $wgMainCacheType, $wgMemCachedTimeout, $wgObjectCaches; 45 46 $cache = $this->getOption( 'cache' ); 47 $iterations = $this->getOption( 'i', 100 ); 48 if ( $cache ) { 49 if ( !isset( $wgObjectCaches[$cache] ) ) { 50 $this->error( "MediaWiki isn't configured with a cache named '$cache'", 1 ); 51 } 52 $servers = $wgObjectCaches[$cache]['servers']; 53 } elseif ( $this->hasArg() ) { 54 $servers = array( $this->getArg() ); 55 } elseif ( $wgMainCacheType === CACHE_MEMCACHED ) { 56 global $wgMemCachedServers; 57 $servers = $wgMemCachedServers; 58 } elseif ( isset( $wgObjectCaches[$wgMainCacheType]['servers'] ) ) { 59 $servers = $wgObjectCaches[$wgMainCacheType]['servers']; 60 } else { 61 $this->error( "MediaWiki isn't configured for Memcached usage", 1 ); 62 } 63 64 # find out the longest server string to nicely align output later on 65 $maxSrvLen = $servers ? max( array_map( 'strlen', $servers ) ) : 0; 66 67 foreach ( $servers as $server ) { 68 $this->output( 69 str_pad( $server, $maxSrvLen ), 70 $server # output channel 71 ); 72 73 $mcc = new MemCachedClientforWiki( array( 74 'persistant' => true, 75 'timeout' => $wgMemCachedTimeout 76 ) ); 77 $mcc->set_servers( array( $server ) ); 78 $set = 0; 79 $incr = 0; 80 $get = 0; 81 $time_start = microtime( true ); 82 for ( $i = 1; $i <= $iterations; $i++ ) { 83 if ( $mcc->set( "test$i", $i ) ) { 84 $set++; 85 } 86 } 87 for ( $i = 1; $i <= $iterations; $i++ ) { 88 if ( !is_null( $mcc->incr( "test$i", $i ) ) ) { 89 $incr++; 90 } 91 } 92 for ( $i = 1; $i <= $iterations; $i++ ) { 93 $value = $mcc->get( "test$i" ); 94 if ( $value == $i * 2 ) { 95 $get++; 96 } 97 } 98 $exectime = microtime( true ) - $time_start; 99 100 $this->output( " set: $set incr: $incr get: $get time: $exectime", $server ); 101 } 102 } 103 } 104 105 $maintClass = "McTest"; 106 require_once RUN_MAINTENANCE_IF_MAIN;
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |