91 $class = get_class(
$job );
92 $title =
$job->getTitle();
93 $params =
$job->getParams();
96 ->getBacklinkCache( $title );
97 if ( isset( $params[
'pages'] ) || empty( $params[
'recursive'] ) ) {
101 wfWarn( __METHOD__ .
" called on {$job->getType()} leaf job (explosive recursion)." );
102 } elseif ( isset( $params[
'range'] ) ) {
104 $ranges = $params[
'range'][
'subranges'];
105 $realBSize = $params[
'range'][
'batchSize'];
108 $ranges = $backlinkCache->partition( $params[
'table'], $bSize );
112 $extraParams = $opts[
'params'] ?? [];
116 if ( isset( $ranges[0] ) ) {
117 $start = $ranges[0][0];
118 $end = isset( $ranges[1] ) ? $ranges[1][0] - 1 :
false;
120 $iter = $backlinkCache->getLinkPages( $params[
'table'], $start, $end );
121 $pageSources = iterator_to_array( $iter );
123 foreach ( array_chunk( $pageSources, $cSize ) as $pageBatch ) {
125 foreach ( $pageBatch as $page ) {
126 $pages[$page->getId()] = [ $page->getNamespace(), $page->getDBkey() ];
128 $jobs[] =
new $class(
130 [
'pages' => $pages ] + $extraParams
135 if ( isset( $ranges[1] ) ) {
136 $jobs[] =
new $class(
140 'table' => $params[
'table'],
142 'start' => $ranges[1][0],
143 'end' => $ranges[count( $ranges ) - 1][1],
144 'batchSize' => $realBSize,
145 'subranges' => array_slice( $ranges, 1 )
148 'division' => isset( $params[
'division'] )
149 ? ( $params[
'division'] + 1 )