Aaron Schulz has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/385126 )

Change subject: Split off some code in WANObjectCahe::getWithSetCallback
......................................................................

Split off some code in WANObjectCahe::getWithSetCallback

This makes it a bit easier to follow

Change-Id: I67968814ab046473eb8eca4086a8600c77417b82
---
M includes/libs/objectcache/WANObjectCache.php
1 file changed, 42 insertions(+), 15 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/26/385126/1

diff --git a/includes/libs/objectcache/WANObjectCache.php 
b/includes/libs/objectcache/WANObjectCache.php
index cab5782..a0652c6 100644
--- a/includes/libs/objectcache/WANObjectCache.php
+++ b/includes/libs/objectcache/WANObjectCache.php
@@ -987,11 +987,8 @@
                                // Use the INTERIM value for tombstoned keys to 
reduce regeneration load.
                                // For hot keys, either another thread has the 
lock or the lock failed;
                                // use the INTERIM value from the last thread 
that regenerated it.
-                               $wrapped = $this->cache->get( 
self::INTERIM_KEY_PREFIX . $key );
-                               list( $value ) = $this->unwrap( $wrapped, 
microtime( true ) );
-                               if ( $value !== false && $this->isValid( 
$value, $versioned, $asOf, $minTime ) ) {
-                                       $asOf = $wrapped[self::FLD_TIME];
-
+                               $value = $this->getInterimValue( $key, 
$versioned, $minTime, $asOf );
+                               if ( $value !== false ) {
                                        return $value;
                                }
                                // Use the busy fallback value if nothing else
@@ -1013,24 +1010,19 @@
                } finally {
                        --$this->callbackDepth;
                }
+               $valueIsCacheable = ( $value !== false && $ttl >= 0 );
+
                // When delete() is called, writes are write-holed by the 
tombstone,
                // so use a special INTERIM key to pass the new value around 
threads.
-               if ( ( $isTombstone && $lockTSE > 0 ) && $value !== false && 
$ttl >= 0 ) {
+               if ( ( $isTombstone && $lockTSE > 0 ) && $valueIsCacheable ) {
                        $tempTTL = max( 1, (int)$lockTSE ); // set() expects 
seconds
                        $newAsOf = microtime( true );
                        $wrapped = $this->wrap( $value, $tempTTL, $newAsOf );
                        // Avoid using set() to avoid pointless mcrouter 
broadcasting
-                       $this->cache->merge(
-                               self::INTERIM_KEY_PREFIX . $key,
-                               function () use ( $wrapped ) {
-                                       return $wrapped;
-                               },
-                               $tempTTL,
-                               1
-                       );
+                       $this->setInterimValue( $key, $wrapped, $tempTTL );
                }
 
-               if ( $value !== false && $ttl >= 0 ) {
+               if ( $valueIsCacheable ) {
                        $setOpts['lockTSE'] = $lockTSE;
                        // Use best known "since" timestamp if not provided
                        $setOpts += [ 'since' => $preCallbackTime ];
@@ -1047,6 +1039,41 @@
        }
 
        /**
+        * @param string $key
+        * @param bool $versioned
+        * @param float $minTime
+        * @param mixed $asOf
+        * @return mixed
+        */
+       protected function getInterimValue( $key, $versioned, $minTime, &$asOf 
) {
+               $wrapped = $this->cache->get( self::INTERIM_KEY_PREFIX . $key );
+               list( $value ) = $this->unwrap( $wrapped, microtime( true ) );
+               if ( $value !== false && $this->isValid( $value, $versioned, 
$asOf, $minTime ) ) {
+                       $asOf = $wrapped[self::FLD_TIME];
+
+                       return $value;
+               }
+
+               return false;
+       }
+
+       /**
+        * @param string $key
+        * @param array $wrapped
+        * @param int $tempTTL
+        */
+       protected function setInterimValue( $key, $wrapped, $tempTTL ) {
+               $this->cache->merge(
+                       self::INTERIM_KEY_PREFIX . $key,
+                       function () use ( $wrapped ) {
+                               return $wrapped;
+                       },
+                       $tempTTL,
+                       1
+               );
+       }
+
+       /**
         * Method to fetch multiple cache keys at once with regeneration
         *
         * This works the same as getWithSetCallback() except:

-- 
To view, visit https://gerrit.wikimedia.org/r/385126
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I67968814ab046473eb8eca4086a8600c77417b82
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <asch...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to