[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * This program is free software; you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published by 5 * the Free Software Foundation; either version 2 of the License, or 6 * (at your option) any later version. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License along 14 * with this program; if not, write to the Free Software Foundation, Inc., 15 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 16 * http://www.gnu.org/copyleft/gpl.html 17 * 18 * @file 19 * @author Aaron Schulz 20 */ 21 22 /** 23 * @since 1.24 24 */ 25 class BloomFilterTitleHasLogs { 26 public static function mergeAndCheck( 27 BloomCache $bcache, $domain, $virtualKey, array $status 28 ) { 29 $age = microtime( true ) - $status['asOfTime']; // seconds 30 $scopedLock = ( mt_rand( 1, (int)pow( 3, max( 0, 5 - $age ) ) ) == 1 ) 31 ? $bcache->getScopedLock( $virtualKey ) 32 : false; 33 34 if ( $scopedLock ) { 35 $updates = self::merge( $bcache, $domain, $virtualKey, $status ); 36 if ( isset( $updates['asOfTime'] ) ) { 37 $age = ( microtime( true ) - $updates['asOfTime'] ); 38 } 39 } 40 41 return ( $age < 30 ); 42 } 43 44 public static function merge( 45 BloomCache $bcache, $domain, $virtualKey, array $status 46 ) { 47 $limit = 1000; 48 $dbr = wfGetDB( DB_SLAVE, array(), $domain ); 49 $res = $dbr->select( 'logging', 50 array( 'log_namespace', 'log_title', 'log_id', 'log_timestamp' ), 51 array( 'log_id > ' . $dbr->addQuotes( (int)$status['lastID'] ) ), 52 __METHOD__, 53 array( 'ORDER BY' => 'log_id', 'LIMIT' => $limit ) 54 ); 55 56 $updates = array(); 57 if ( $res->numRows() > 0 ) { 58 $members = array(); 59 foreach ( $res as $row ) { 60 $members[] = "$virtualKey:{$row->log_namespace}:{$row->log_title}"; 61 } 62 $lastID = $row->log_id; 63 $lastTime = $row->log_timestamp; 64 if ( !$bcache->add( 'shared', $members ) ) { 65 return false; 66 } 67 $updates['lastID'] = $lastID; 68 $updates['asOfTime'] = wfTimestamp( TS_UNIX, $lastTime ); 69 } else { 70 $updates['asOfTime'] = microtime( true ); 71 } 72 73 $updates['epoch'] = $status['epoch'] ?: microtime( true ); 74 75 $bcache->setStatus( $virtualKey, $updates ); 76 77 return $updates; 78 } 79 }
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 |