Exemple #1
0
 /**
  * Purges a list of Squids defined in $wgSquidServers.
  * $urlArr should contain the full URLs to purge as values
  * (example: $urlArr[] = 'http://my.host/something')
  * XXX report broken Squids per mail or log
  *
  * @param $urlArr array
  * @return void
  */
 static function purge($urlArr)
 {
     global $wgSquidServers, $wgHTCPMulticastAddress, $wgHTCPPort;
     /*if ( (@$wgSquidServers[0]) == 'echo' ) {
     			echo implode("<br />\n", $urlArr) . "<br />\n";
     			return;
     		}*/
     if (!$urlArr) {
         return;
     }
     // wikia change start
     global $wgPurgeSquidViaScribe;
     if ($wgPurgeSquidViaScribe == true) {
         SquidUpdate::ScribePurge($urlArr);
         return;
     }
     // wikia change end
     if ($wgHTCPMulticastAddress && $wgHTCPPort) {
         SquidUpdate::HTCPPurge($urlArr);
     }
     wfProfileIn(__METHOD__);
     $maxSocketsPerSquid = 8;
     //  socket cap per Squid
     $urlsPerSocket = 400;
     // 400 seems to be a good tradeoff, opening a socket takes a while
     $socketsPerSquid = ceil(count($urlArr) / $urlsPerSocket);
     if ($socketsPerSquid > $maxSocketsPerSquid) {
         $socketsPerSquid = $maxSocketsPerSquid;
     }
     $pool = new SquidPurgeClientPool();
     $chunks = array_chunk($urlArr, ceil(count($urlArr) / $socketsPerSquid));
     foreach ($wgSquidServers as $server) {
         foreach ($chunks as $chunk) {
             $client = new SquidPurgeClient($server);
             foreach ($chunk as $url) {
                 $client->queuePurge($url);
             }
             $pool->addClient($client);
         }
     }
     $pool->run();
     wfProfileOut(__METHOD__);
 }