Bug #84070
Epic #83652: EXT: Redirects module - Umbrella issue
RedirectCacheService does not fallback gracefully if caching backend fails
100%
Description
Tested with 9.2.0-dev (current master).
If the configured caching backend (e.g. redis) fails because of a misconfiguration or downtime, TYPO3 falls back very nicely to non cached entries.
However the RedirectCacheService throws an exception in this case:
Core: Exception handler (WEB): Uncaught TYPO3 Exception:
Return value of TYPO3\CMS\Redirects\Service\RedirectCacheService::getRedirects() must be of the type array, boolean returned
| TypeError thrown in file
/<webroot>/typo3/sysext/redirects/Classes/Service/RedirectCacheService.php in line 60.
Requested URL: http://localhost/index.php?id=1
Steps to reproduce¶
- Initial installation with "introduction package" (or without, in this case create a new page with standard root template)
- Configure Redis as Caching backend (see configuration snippet below)
- cause redis backend to fail by stopping the redis service, e.g. service stop redis
- (while not logged in in backend): Load frontend pages, e.g. "Get Started" page id=1
Results¶
Oops Error / Exception gets thrown.
Verify¶
Test without redirect:
- deinstall "redirect" extension. There will be no more exceptions, even though redis still isn't available
Basic Cache Configuration:¶
typo3conf/AdditionalConfiguration.php:
<?php
...
@include_once('GeneralConfigurationCache.php');
@setCacheConfigurationRedis(2);
typo3conf/GeneralConfigurationCache.php:
function setCacheConfigurationRedis($database=false, $names = [
'cache_pages',
'cache_pagesection',
'cache_hash',
'cache_rootline',
'cache_imagesizes',
'extbase_object',
'extbase_reflection',
'extbase_typo3dbbackend_queries',
'extbase_datamapfactory_datamap',
'extbase_object',
'extbase_reflection'
] )
{
if (!$database) {
return;
}
foreach($names as $name) {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$name]['backend'] = \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$name]['options']['database'] = $database;
// problem with gzuncompress + php-redis
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$name]['options']['compression'] = false;
}
}
Associated revisions
[BUGFIX] Let RedirectCacheService not rely on having redirects cached
RedirectCacheService::getRedirects() relies on having the redirects
cached. This assumption may lead to issues (e.g. in case a Redis server
fails), causing TypeErrors.
The code is changed to return the composed array in case the initial
cache request misses.
Resolves: #84070
Releases: master
Change-Id: I148db9ccbf28a2f93761fbf4b2cb632e27787b2d
Reviewed-on: https://review.typo3.org/56050
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Benjamin Franzke <bfr@qbus.de>
Tested-by: Benjamin Franzke <bfr@qbus.de>
Reviewed-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Tested-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
History
#1
Updated by Sybille Peters almost 2 years ago
- Description updated (diff)
#2
Updated by Susanne Moog almost 2 years ago
- Parent task set to #83652
#3
Updated by Gerrit Code Review almost 2 years ago
- Status changed from New to Under Review
Patch set 1 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/56050
#4
Updated by Andreas Fernandez almost 2 years ago
- Status changed from Under Review to Resolved
- % Done changed from 0 to 100
Applied in changeset 43cda8c4405ae78bab6908c47eda14d4dcffbf49.
#5
Updated by Benni Mack about 1 year ago
- Status changed from Resolved to Closed