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)',
false,
$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( 'MEDIAWIKI')) $fname
This file is not a valid entry point, perform no further processing unless MEDIAWIKI is defined.
DB accessable 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
it s the revision text itself In either if gzip is the revision text is gzipped $flags
if(!defined('MEDIAWIKI')) moveToExternal( $cluster, $maxID, $minID=1)