X-Git-Url: https://git.cyclocoop.org/%7B%7B%20url_for%28%27votes%27%2C%20votes=%27waiting%27%29%20%7D%7D?a=blobdiff_plain;f=maintenance%2Fstorage%2FmoveToExternal.php;h=2dcc25c22ca0b17bf0d76ccb895368580123e17a;hb=67bfdc7a68940d901e585eadd984a2074bf0216a;hp=0b46f70bdf935d71e7bc32d8c9d63b75616e1523;hpb=c4409658c6c5b468d9df0842ac7ff441a26c1f45;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/storage/moveToExternal.php b/maintenance/storage/moveToExternal.php index 0b46f70bdf..2dcc25c22c 100644 --- a/maintenance/storage/moveToExternal.php +++ b/maintenance/storage/moveToExternal.php @@ -1,97 +1,128 @@ ] \n"; + print "Usage: php moveToExternal.php [-s ] [-e ] \n"; exit; } $cluster = $args[0]; - $dbw =& wfGetDB( DB_MASTER ); + $dbw = wfGetDB( DB_MASTER ); - if ( isset( $options['m'] ) ) { - $maxID = $options['m']; + if ( isset( $options['e'] ) ) { + $maxID = $options['e']; } else { $maxID = $dbw->selectField( 'text', 'MAX(old_id)', false, $fname ); } + $minID = isset( $options['s'] ) ? $options['s'] : 1; - moveToExternal( $cluster, $maxID ); + moveToExternal( $cluster, $maxID, $minID ); } - - -function moveToExternal( $cluster, $maxID ) { +function moveToExternal( $cluster, $maxID, $minID = 1 ) { $fname = 'moveToExternal'; - $dbw =& wfGetDB( DB_MASTER ); + $dbw = wfGetDB( DB_MASTER ); + $dbr = wfGetDB( DB_SLAVE ); - print "Moving $maxID text rows to external storage\n"; + $count = $maxID - $minID + 1; + $blockSize = 1000; + $numBlocks = ceil( $count / $blockSize ); + print "Moving text rows from $minID to $maxID to external storage\n"; $ext = new ExternalStoreDB; - for ( $id = 1; $id <= $maxID; $id++ ) { - if ( !($id % REPORTING_INTERVAL) ) { - print "$id\n"; - wfWaitForSlaves( 5 ); + $numMoved = 0; + + for ( $block = 0; $block < $numBlocks; $block++ ) { + $blockStart = $block * $blockSize + $minID; + $blockEnd = $blockStart + $blockSize - 1; + + if ( !( $block % REPORTING_INTERVAL ) ) { + print "oldid=$blockStart, moved=$numMoved\n"; + wfWaitForSlaves(); } - $row = $dbw->selectRow( 'text', array( 'old_flags', 'old_text' ), + + $res = $dbr->select( 'text', array( 'old_id', 'old_flags', 'old_text' ), array( - 'old_id' => $id, - "old_flags NOT LIKE '%external%'", + "old_id BETWEEN $blockStart AND $blockEnd", + 'old_flags NOT ' . $dbr->buildLike( $dbr->anyString(), 'external', $dbr->anyString() ), ), $fname ); - if ( !$row ) { - # Non-existent or already done - continue; - } + foreach ( $res as $row ) { + # Resolve stubs + $text = $row->old_text; + $id = $row->old_id; + if ( $row->old_flags === '' ) { + $flags = 'external'; + } else { + $flags = "{$row->old_flags},external"; + } - # 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 + if ( strpos( $flags, 'object' ) !== false ) { + $obj = unserialize( $text ); + $className = strtolower( get_class( $obj ) ); + if ( $className == 'historyblobstub' ) { + # resolveStub( $id, $row->old_text, $row->old_flags ); + # $numStubs++; + 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; + } } else { - print "Warning: unrecognised object class \"$className\"\n"; - continue; + $className = false; } - } - if ( strlen( $text ) < 100 ) { - // Don't move tiny revisions - continue; - } + if ( strlen( $text ) < 100 && $className === false ) { + // Don't move tiny revisions + continue; + } - #print "Storing " . strlen( $text ) . " bytes to $url\n"; + # print "Storing " . strlen( $text ) . " bytes to $url\n"; + # print "old_id=$id\n"; - $url = $ext->store( $cluster, $text ); - if ( !$url ) { - print "Error writing to external storage\n"; - exit; + $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 ); + $numMoved++; } - $dbw->update( 'text', - array( 'old_flags' => $flags, 'old_text' => $url ), - array( 'old_id' => $id ), $fname ); } } -?> +