From e95a1420f135f990c46b9c7eb9f8bccb5fec1dbf Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Thu, 15 Oct 2020 15:59:21 +0200 Subject: [PATCH] Clear cached app config while waiting for the SCSSCache to finish processing the file Signed-off-by: Morris Jobke --- lib/private/AppConfig.php | 10 ++++++++++ lib/private/Template/SCSSCacher.php | 8 +++++++- tests/lib/Template/CSSResourceLocatorTest.php | 7 ++++++- tests/lib/Template/SCSSCacherTest.php | 8 +++++++- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/private/AppConfig.php b/lib/private/AppConfig.php index b35bc4070d..d3b6444987 100644 --- a/lib/private/AppConfig.php +++ b/lib/private/AppConfig.php @@ -344,4 +344,14 @@ class AppConfig implements IAppConfig { $this->configLoaded = true; } + + /** + * Clear all the cached app config values + * + * WARNING: do not use this - this is only for usage with the SCSSCacher to + * clear the memory cache of the app config + */ + public function clearCachedConfig() { + $this->configLoaded = false; + } } diff --git a/lib/private/Template/SCSSCacher.php b/lib/private/Template/SCSSCacher.php index 597d4323d3..f19674776b 100644 --- a/lib/private/Template/SCSSCacher.php +++ b/lib/private/Template/SCSSCacher.php @@ -30,6 +30,7 @@ namespace OC\Template; +use OC\AppConfig; use OC\Files\AppData\Factory; use OC\Memcache\NullCache; use OCP\AppFramework\Utility\ITimeFactory; @@ -89,6 +90,8 @@ class SCSSCacher { /** @var IMemcache */ private $lockingCache; + /** @var AppConfig */ + private $appConfig; /** * @param ILogger $logger @@ -109,7 +112,8 @@ class SCSSCacher { $serverRoot, ICacheFactory $cacheFactory, IconsCacher $iconsCacher, - ITimeFactory $timeFactory) { + ITimeFactory $timeFactory, + AppConfig $appConfig) { $this->logger = $logger; $this->appData = $appDataFactory->get('css'); $this->urlGenerator = $urlGenerator; @@ -126,6 +130,7 @@ class SCSSCacher { $this->lockingCache = $lockingCache; $this->iconsCacher = $iconsCacher; $this->timeFactory = $timeFactory; + $this->appConfig = $appConfig; } /** @@ -166,6 +171,7 @@ class SCSSCacher { $retry = 0; sleep(1); while ($retry < 10) { + $this->appConfig->clearCachedConfig(); $this->logger->debug('SCSSCacher::process check in while loop follows', ['app' => 'scss_cacher']); if (!$this->variablesChanged() && $this->isCached($fileNameCSS, $app)) { // Inject icons vars css if any diff --git a/tests/lib/Template/CSSResourceLocatorTest.php b/tests/lib/Template/CSSResourceLocatorTest.php index 42fa06a474..d50ad708d0 100644 --- a/tests/lib/Template/CSSResourceLocatorTest.php +++ b/tests/lib/Template/CSSResourceLocatorTest.php @@ -23,6 +23,7 @@ namespace Test\Template; +use OC\AppConfig; use OC\Files\AppData\AppData; use OC\Files\AppData\Factory; use OC\Template\CSSResourceLocator; @@ -53,6 +54,8 @@ class CSSResourceLocatorTest extends \Test\TestCase { protected $iconsCacher; /** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */ private $timeFactory; + /** @var AppConfig|\PHPUnit\Framework\MockObject\MockObject */ + private $appConfig; protected function setUp(): void { parent::setUp(); @@ -65,6 +68,7 @@ class CSSResourceLocatorTest extends \Test\TestCase { $this->themingDefaults = $this->createMock(ThemingDefaults::class); $this->iconsCacher = $this->createMock(IconsCacher::class); $this->timeFactory = $this->createMock(ITimeFactory::class); + $this->appConfig = $this->createMock(AppConfig::class); } private function cssResourceLocator() { @@ -80,7 +84,8 @@ class CSSResourceLocatorTest extends \Test\TestCase { \OC::$SERVERROOT, $this->cacheFactory, $this->iconsCacher, - $this->timeFactory + $this->timeFactory, + $this->appConfig ); return new CSSResourceLocator( $this->logger, diff --git a/tests/lib/Template/SCSSCacherTest.php b/tests/lib/Template/SCSSCacherTest.php index 1a77f789af..77a9bdde76 100644 --- a/tests/lib/Template/SCSSCacherTest.php +++ b/tests/lib/Template/SCSSCacherTest.php @@ -23,6 +23,7 @@ namespace Test\Template; +use OC\AppConfig; use OC\Files\AppData\AppData; use OC\Files\AppData\Factory; use OC\Template\IconsCacher; @@ -60,6 +61,8 @@ class SCSSCacherTest extends \Test\TestCase { protected $iconsCacher; /** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */ protected $timeFactory; + /** @var AppConfig|\PHPUnit\Framework\MockObject\MockObject */ + protected $appConfig; protected function setUp(): void { parent::setUp(); @@ -92,6 +95,8 @@ class SCSSCacherTest extends \Test\TestCase { ->method('getCachedCSS') ->willReturn($iconsFile); + $this->appConfig = $this->createMock(AppConfig::class); + $this->scssCacher = new SCSSCacher( $this->logger, $factory, @@ -101,7 +106,8 @@ class SCSSCacherTest extends \Test\TestCase { \OC::$SERVERROOT, $this->cacheFactory, $this->iconsCacher, - $this->timeFactory + $this->timeFactory, + $this->appConfig ); }