Merge maintenance-work branch:
[lhc/web/wiklou.git] / maintenance / deleteImageMemcached.php
1 <?php
2 /**
3 * This script delete image information from memcached.
4 *
5 * Usage example:
6 * php deleteImageMemcached.php --until "2005-09-05 00:00:00" --sleep 0
7 *
8 * @file
9 * @ingroup Maintenance
10 */
11
12 require_once( "Maintenance.php" );
13
14 class DeleteImageCache extends Maintenance {
15 public function __construct() {
16 parent::__construct();
17 $this->mDescription = "Delete image information from memcached";
18 $this->addParam( 'sleep', 'How many seconds to sleep between deletions', true, true );
19 $this->addParam( 'until', 'Timestamp to delete all entries prior to', true, true );
20 }
21
22 public function execute() {
23 global $wgMemc;
24
25 $until = preg_replace( "/[^\d]/", '', $this->getOption('until') );
26 $sleep = (int)$this->getOption('sleep') * 1000; // milliseconds
27
28 ini_set( 'display_errors', false );
29
30 $dbr = wfGetDB( DB_SLAVE );
31
32 $res = $dbr->select( 'image',
33 array( 'img_name' ),
34 array( "img_timestamp < {$until}" ),
35 __METHOD__
36 );
37
38 $i = 0;
39 $total = $this->getImageCount();
40
41 while ( $row = $dbr->fetchObject( $res ) ) {
42 if ($i % $this->report == 0)
43 $this->output( sprintf("%s: %13s done (%s)\n", wfWikiID(), "$i/$total", wfPercent( $i / $total * 100 ) ) );
44 $md5 = md5( $row->img_name );
45 $wgMemc->delete( wfMemcKey( 'Image', $md5 ) );
46
47 if ($sleep != 0)
48 usleep( $sleep );
49
50 ++$i;
51 }
52 }
53
54 private function getImageCount() {
55 $dbr = wfGetDB( DB_SLAVE );
56 return $dbr->selectField( 'image', 'COUNT(*)', array(), __METHOD__ );
57 }
58 }
59
60 $maintClass = "DeleteImageCache";
61 require_once( DO_MAINTENANCE );