Merge "tests: Remove unused TableCleanupTest class"
[lhc/web/wiklou.git] / includes / deferred / SquidUpdate.php
index bad91a5..c223de8 100644 (file)
  * @ingroup Cache
  */
 
+use Wikimedia\Assert\Assert;
+
 /**
  * Handles purging appropriate Squid URLs given a title (or titles)
  * @ingroup Cache
  */
-class SquidUpdate implements DeferrableUpdate {
+class SquidUpdate implements DeferrableUpdate, MergeableUpdate {
        /** @var string[] Collection of URLs to purge */
        protected $urls = array();
 
        /**
-        * @param array $urlArr Collection of URLs to purge
+        * @param string[] $urlArr Collection of URLs to purge
         */
        public function __construct( array $urlArr ) {
-               // Remove duplicate URLs from list
-               $this->urls = array_unique( $urlArr );
+               $this->urls = $urlArr;
        }
 
        /**
         * Create a SquidUpdate from an array of Title objects, or a TitleArray object
         *
         * @param Traversable|array $titles
-        * @param array $urlArr
+        * @param string[] $urlArr
         * @return SquidUpdate
         */
        public static function newFromTitles( $titles, $urlArr = array() ) {
@@ -59,9 +60,7 @@ class SquidUpdate implements DeferrableUpdate {
         * @deprecated 1.27
         */
        public static function newSimplePurge( Title $title ) {
-               $urlArr = $title->getSquidURLs();
-
-               return new SquidUpdate( $urlArr );
+               return new SquidUpdate( $title->getSquidURLs() );
        }
 
        /**
@@ -71,13 +70,20 @@ class SquidUpdate implements DeferrableUpdate {
                self::purge( $this->urls );
        }
 
+       public function merge( MergeableUpdate $update ) {
+               /** @var SquidUpdate $update */
+               Assert::parameterType( __CLASS__, $update, '$update' );
+
+               $this->urls = array_merge( $this->urls, $update->urls );
+       }
+
        /**
         * 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 array $urlArr List of full URLs to purge
+        * @param string[] $urlArr List of full URLs to purge
         */
        public static function purge( array $urlArr ) {
                global $wgSquidServers, $wgHTCPRouting;
@@ -86,6 +92,9 @@ class SquidUpdate implements DeferrableUpdate {
                        return;
                }
 
+               // Remove duplicate URLs from list
+               $urlArr = array_unique( $urlArr );
+
                wfDebugLog( 'squid', __METHOD__ . ': ' . implode( ' ', $urlArr ) );
 
                if ( $wgHTCPRouting ) {
@@ -93,8 +102,6 @@ class SquidUpdate implements DeferrableUpdate {
                }
 
                if ( $wgSquidServers ) {
-                       // Remove duplicate URLs
-                       $urlArr = array_unique( $urlArr );
                        // Maximum number of parallel connections per squid
                        $maxSocketsPerSquid = 8;
                        // Number of requests to send per socket
@@ -125,9 +132,9 @@ class SquidUpdate implements DeferrableUpdate {
         * Send Hyper Text Caching Protocol (HTCP) CLR requests.
         *
         * @throws MWException
-        * @param array $urlArr Collection of URLs to purge
+        * @param string[] $urlArr Collection of URLs to purge
         */
-       protected static function HTCPPurge( $urlArr ) {
+       private static function HTCPPurge( array $urlArr ) {
                global $wgHTCPRouting, $wgHTCPMulticastTTL;
 
                // HTCP CLR operation
@@ -158,8 +165,6 @@ class SquidUpdate implements DeferrableUpdate {
                                $wgHTCPMulticastTTL );
                }
 
-               // Remove duplicate URLs from collection
-               $urlArr = array_unique( $urlArr );
                // Get sequential trx IDs for packet loss counting
                $ids = UIDGenerator::newSequentialPerNodeIDs(
                        'squidhtcppurge', 32, count( $urlArr ), UIDGenerator::QUICK_VOLATILE