Remove duplicate URLs in SquidUpdate.php
authorCatrope <roan.kattouw@gmail.com>
Fri, 6 Apr 2012 18:20:04 +0000 (11:20 -0700)
committerCatrope <roan.kattouw@gmail.com>
Fri, 6 Apr 2012 18:26:46 +0000 (11:26 -0700)
This has to be done in 3 places, because there are 3 public entry
points.

I originally submitted this to fight duplicates I thought I was seeing
in production, but it turns out I'm blind and the URLs weren't
duplicates after all. Nevertheless, preventing duplicate purges in the
SquidUpdate class is a good idea.

Change-Id: Idc21dd7d0b3b79572853b787fac746454d9178ea

includes/cache/SquidUpdate.php

index d47b5b5..bd70095 100644 (file)
@@ -19,6 +19,7 @@ class SquidUpdate {
                } else {
                        $this->mMaxTitles = $maxTitles;
                }
+               $urlArr = array_unique( $urlArr ); // Remove duplicates
                if ( count( $urlArr ) > $this->mMaxTitles ) {
                        $urlArr = array_slice( $urlArr, 0, $this->mMaxTitles );
                }
@@ -119,6 +120,7 @@ class SquidUpdate {
 
                wfProfileIn( __METHOD__ );
 
+               $urlArr = array_unique( $urlArr ); // Remove duplicates
                $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 );
@@ -168,6 +170,7 @@ class SquidUpdate {
                                socket_set_option( $conn, IPPROTO_IP, IP_MULTICAST_TTL,
                                        $wgHTCPMulticastTTL );
 
+                       $urlArr = array_unique( $urlArr ); // Remove duplicates
                        foreach ( $urlArr as $url ) {
                                if( !is_string( $url ) ) {
                                        throw new MWException( 'Bad purge URL' );