Actions
Bug #84070
closedEpic #83652: EXT: Redirects module - Umbrella issue
RedirectCacheService does not fallback gracefully if caching backend fails
Status:
Closed
Priority:
Should have
Assignee:
-
Category:
Backend API
Target version:
-
Start date:
2018-02-27
Due date:
% Done:
100%
Estimated time:
TYPO3 Version:
9
PHP Version:
Tags:
Complexity:
Is Regression:
Sprint Focus:
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;
}
}
Files
Actions