Merge pull request #23478 from nextcloud/fix/21059/fix-deadlock-in-scsscacher
Clear cached app config while waiting for the SCSSCache lock to return
This commit is contained in:
commit
4bf891f605
|
@ -344,4 +344,14 @@ class AppConfig implements IAppConfig {
|
||||||
|
|
||||||
$this->configLoaded = true;
|
$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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
namespace OC\Template;
|
namespace OC\Template;
|
||||||
|
|
||||||
|
use OC\AppConfig;
|
||||||
use OC\Files\AppData\Factory;
|
use OC\Files\AppData\Factory;
|
||||||
use OC\Memcache\NullCache;
|
use OC\Memcache\NullCache;
|
||||||
use OCP\AppFramework\Utility\ITimeFactory;
|
use OCP\AppFramework\Utility\ITimeFactory;
|
||||||
|
@ -89,6 +90,8 @@ class SCSSCacher {
|
||||||
|
|
||||||
/** @var IMemcache */
|
/** @var IMemcache */
|
||||||
private $lockingCache;
|
private $lockingCache;
|
||||||
|
/** @var AppConfig */
|
||||||
|
private $appConfig;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ILogger $logger
|
* @param ILogger $logger
|
||||||
|
@ -109,7 +112,8 @@ class SCSSCacher {
|
||||||
$serverRoot,
|
$serverRoot,
|
||||||
ICacheFactory $cacheFactory,
|
ICacheFactory $cacheFactory,
|
||||||
IconsCacher $iconsCacher,
|
IconsCacher $iconsCacher,
|
||||||
ITimeFactory $timeFactory) {
|
ITimeFactory $timeFactory,
|
||||||
|
AppConfig $appConfig) {
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
$this->appData = $appDataFactory->get('css');
|
$this->appData = $appDataFactory->get('css');
|
||||||
$this->urlGenerator = $urlGenerator;
|
$this->urlGenerator = $urlGenerator;
|
||||||
|
@ -126,6 +130,7 @@ class SCSSCacher {
|
||||||
$this->lockingCache = $lockingCache;
|
$this->lockingCache = $lockingCache;
|
||||||
$this->iconsCacher = $iconsCacher;
|
$this->iconsCacher = $iconsCacher;
|
||||||
$this->timeFactory = $timeFactory;
|
$this->timeFactory = $timeFactory;
|
||||||
|
$this->appConfig = $appConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -166,6 +171,7 @@ class SCSSCacher {
|
||||||
$retry = 0;
|
$retry = 0;
|
||||||
sleep(1);
|
sleep(1);
|
||||||
while ($retry < 10) {
|
while ($retry < 10) {
|
||||||
|
$this->appConfig->clearCachedConfig();
|
||||||
$this->logger->debug('SCSSCacher::process check in while loop follows', ['app' => 'scss_cacher']);
|
$this->logger->debug('SCSSCacher::process check in while loop follows', ['app' => 'scss_cacher']);
|
||||||
if (!$this->variablesChanged() && $this->isCached($fileNameCSS, $app)) {
|
if (!$this->variablesChanged() && $this->isCached($fileNameCSS, $app)) {
|
||||||
// Inject icons vars css if any
|
// Inject icons vars css if any
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
namespace Test\Template;
|
namespace Test\Template;
|
||||||
|
|
||||||
|
use OC\AppConfig;
|
||||||
use OC\Files\AppData\AppData;
|
use OC\Files\AppData\AppData;
|
||||||
use OC\Files\AppData\Factory;
|
use OC\Files\AppData\Factory;
|
||||||
use OC\Template\CSSResourceLocator;
|
use OC\Template\CSSResourceLocator;
|
||||||
|
@ -53,6 +54,8 @@ class CSSResourceLocatorTest extends \Test\TestCase {
|
||||||
protected $iconsCacher;
|
protected $iconsCacher;
|
||||||
/** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
|
/** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
|
||||||
private $timeFactory;
|
private $timeFactory;
|
||||||
|
/** @var AppConfig|\PHPUnit\Framework\MockObject\MockObject */
|
||||||
|
private $appConfig;
|
||||||
|
|
||||||
protected function setUp(): void {
|
protected function setUp(): void {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
@ -65,6 +68,7 @@ class CSSResourceLocatorTest extends \Test\TestCase {
|
||||||
$this->themingDefaults = $this->createMock(ThemingDefaults::class);
|
$this->themingDefaults = $this->createMock(ThemingDefaults::class);
|
||||||
$this->iconsCacher = $this->createMock(IconsCacher::class);
|
$this->iconsCacher = $this->createMock(IconsCacher::class);
|
||||||
$this->timeFactory = $this->createMock(ITimeFactory::class);
|
$this->timeFactory = $this->createMock(ITimeFactory::class);
|
||||||
|
$this->appConfig = $this->createMock(AppConfig::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function cssResourceLocator() {
|
private function cssResourceLocator() {
|
||||||
|
@ -80,7 +84,8 @@ class CSSResourceLocatorTest extends \Test\TestCase {
|
||||||
\OC::$SERVERROOT,
|
\OC::$SERVERROOT,
|
||||||
$this->cacheFactory,
|
$this->cacheFactory,
|
||||||
$this->iconsCacher,
|
$this->iconsCacher,
|
||||||
$this->timeFactory
|
$this->timeFactory,
|
||||||
|
$this->appConfig
|
||||||
);
|
);
|
||||||
return new CSSResourceLocator(
|
return new CSSResourceLocator(
|
||||||
$this->logger,
|
$this->logger,
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
namespace Test\Template;
|
namespace Test\Template;
|
||||||
|
|
||||||
|
use OC\AppConfig;
|
||||||
use OC\Files\AppData\AppData;
|
use OC\Files\AppData\AppData;
|
||||||
use OC\Files\AppData\Factory;
|
use OC\Files\AppData\Factory;
|
||||||
use OC\Template\IconsCacher;
|
use OC\Template\IconsCacher;
|
||||||
|
@ -60,6 +61,8 @@ class SCSSCacherTest extends \Test\TestCase {
|
||||||
protected $iconsCacher;
|
protected $iconsCacher;
|
||||||
/** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
|
/** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
|
||||||
protected $timeFactory;
|
protected $timeFactory;
|
||||||
|
/** @var AppConfig|\PHPUnit\Framework\MockObject\MockObject */
|
||||||
|
protected $appConfig;
|
||||||
|
|
||||||
protected function setUp(): void {
|
protected function setUp(): void {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
@ -92,6 +95,8 @@ class SCSSCacherTest extends \Test\TestCase {
|
||||||
->method('getCachedCSS')
|
->method('getCachedCSS')
|
||||||
->willReturn($iconsFile);
|
->willReturn($iconsFile);
|
||||||
|
|
||||||
|
$this->appConfig = $this->createMock(AppConfig::class);
|
||||||
|
|
||||||
$this->scssCacher = new SCSSCacher(
|
$this->scssCacher = new SCSSCacher(
|
||||||
$this->logger,
|
$this->logger,
|
||||||
$factory,
|
$factory,
|
||||||
|
@ -101,7 +106,8 @@ class SCSSCacherTest extends \Test\TestCase {
|
||||||
\OC::$SERVERROOT,
|
\OC::$SERVERROOT,
|
||||||
$this->cacheFactory,
|
$this->cacheFactory,
|
||||||
$this->iconsCacher,
|
$this->iconsCacher,
|
||||||
$this->timeFactory
|
$this->timeFactory,
|
||||||
|
$this->appConfig
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue