diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2006-10-11 18:12:39 +0000 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2006-10-11 18:12:39 +0000 |
commit | 183851b06bd6c52f3cae5375f433da720d410447 (patch) | |
tree | a477257decbf3360127f6739c2f9d0ec57a03d39 /maintenance/storage/moveToExternal.php |
MediaWiki 1.7.1 wiederhergestellt
Diffstat (limited to 'maintenance/storage/moveToExternal.php')
-rw-r--r-- | maintenance/storage/moveToExternal.php | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/maintenance/storage/moveToExternal.php b/maintenance/storage/moveToExternal.php new file mode 100644 index 00000000..0b46f70b --- /dev/null +++ b/maintenance/storage/moveToExternal.php @@ -0,0 +1,97 @@ +<?php + +define( 'REPORTING_INTERVAL', 100 ); + +if ( !defined( 'MEDIAWIKI' ) ) { + $optionsWithArgs = array( 'm' ); + + require_once( '../commandLine.inc' ); + require_once( 'ExternalStoreDB.php' ); + require_once( 'resolveStubs.php' ); + + $fname = 'moveToExternal'; + + if ( !isset( $args[0] ) ) { + print "Usage: php moveToExternal.php [-m <maxid>] <cluster>\n"; + exit; + } + + $cluster = $args[0]; + $dbw =& wfGetDB( DB_MASTER ); + + if ( isset( $options['m'] ) ) { + $maxID = $options['m']; + } else { + $maxID = $dbw->selectField( 'text', 'MAX(old_id)', false, $fname ); + } + + moveToExternal( $cluster, $maxID ); +} + + + +function moveToExternal( $cluster, $maxID ) { + $fname = 'moveToExternal'; + $dbw =& wfGetDB( DB_MASTER ); + + print "Moving $maxID text rows to external storage\n"; + $ext = new ExternalStoreDB; + for ( $id = 1; $id <= $maxID; $id++ ) { + if ( !($id % REPORTING_INTERVAL) ) { + print "$id\n"; + wfWaitForSlaves( 5 ); + } + $row = $dbw->selectRow( 'text', array( 'old_flags', 'old_text' ), + array( + 'old_id' => $id, + "old_flags NOT LIKE '%external%'", + ), $fname ); + if ( !$row ) { + # Non-existent or already done + continue; + } + + # Resolve stubs + $text = $row->old_text; + if ( $row->old_flags === '' ) { + $flags = 'external'; + } else { + $flags = "{$row->old_flags},external"; + } + + if ( strpos( $flags, 'object' ) !== false ) { + $obj = unserialize( $text ); + $className = strtolower( get_class( $obj ) ); + if ( $className == 'historyblobstub' ) { + resolveStub( $id, $row->old_text, $row->old_flags ); + continue; + } elseif ( $className == 'historyblobcurstub' ) { + $text = gzdeflate( $obj->getText() ); + $flags = 'utf-8,gzip,external'; + } elseif ( $className == 'concatenatedgziphistoryblob' ) { + // Do nothing + } else { + print "Warning: unrecognised object class \"$className\"\n"; + continue; + } + } + + if ( strlen( $text ) < 100 ) { + // Don't move tiny revisions + continue; + } + + #print "Storing " . strlen( $text ) . " bytes to $url\n"; + + $url = $ext->store( $cluster, $text ); + if ( !$url ) { + print "Error writing to external storage\n"; + exit; + } + $dbw->update( 'text', + array( 'old_flags' => $flags, 'old_text' => $url ), + array( 'old_id' => $id ), $fname ); + } +} + +?> |