24define(
'REPORTING_INTERVAL', 1 );
26if ( !defined(
'MEDIAWIKI' ) ) {
28 require_once __DIR__ .
'/../commandLine.inc';
29 require_once
'resolveStubs.php';
33 if ( !isset(
$args[0] ) ) {
34 print "Usage: php moveToExternal.php [-s <startid>] [-e <endid>] <cluster>\n";
44 $maxID = $dbw->selectField(
'text',
'MAX(old_id)',
'',
$fname );
56 $count = $maxID - $minID + 1;
58 $numBlocks = ceil( $count / $blockSize );
59 print "Moving text rows from $minID to $maxID to external storage\n";
63 for ( $block = 0; $block < $numBlocks; $block++ ) {
64 $blockStart = $block * $blockSize + $minID;
65 $blockEnd = $blockStart + $blockSize - 1;
68 print "oldid=$blockStart, moved=$numMoved\n";
72 $res =
$dbr->select(
'text', [
'old_id',
'old_flags',
'old_text' ],
74 "old_id BETWEEN $blockStart AND $blockEnd",
75 'old_flags NOT ' .
$dbr->buildLike(
$dbr->anyString(),
'external',
$dbr->anyString() ),
77 foreach (
$res as $row ) {
79 $text = $row->old_text;
81 if ( $row->old_flags ===
'' ) {
84 $flags =
"{$row->old_flags},external";
87 if ( strpos( $flags,
'object' ) !==
false ) {
89 $className = strtolower( get_class( $obj ) );
90 if ( $className ==
'historyblobstub' ) {
91 # resolveStub( $id, $row->old_text, $row->old_flags );
94 } elseif ( $className ==
'historyblobcurstub' ) {
95 $text = gzdeflate( $obj->getText() );
96 $flags =
'utf-8,gzip,external';
97 } elseif ( $className ==
'concatenatedgziphistoryblob' ) {
100 print "Warning: unrecognised object class \"$className\"\n";
107 if ( strlen( $text ) < 100 && $className ===
false ) {
112 # print "Storing " . strlen( $text ) . " bytes to $url\n";
113 # print "old_id=$id\n";
115 $url =
$ext->store( $cluster, $text );
117 print "Error writing to external storage\n";
120 $dbw->update(
'text',
121 [
'old_flags' => $flags,
'old_text' => $url ],
122 [
'old_id' => $id ],
$fname );
unserialize( $serialized)
wfWaitForSlaves( $ifWritesSince=null, $wiki=false, $cluster=false, $timeout=null)
Waits for the replica DBs to catch up to the master position.
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
if(defined( 'MW_SETUP_CALLBACK')) $fname
Customization point after all loading (constants, functions, classes, DefaultSettings,...
DB accessible external objects.
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped & $options
while(( $__line=Maintenance::readconsole()) !==false) print
if(!defined('MEDIAWIKI')) moveToExternal( $cluster, $maxID, $minID=1)
if(!is_readable( $file)) $ext