Project

General

Profile

Actions

Bug #84070

closed

Epic #83652: EXT: Redirects module - Umbrella issue

RedirectCacheService does not fallback gracefully if caching backend fails

Added by Sybille Peters about 6 years ago. Updated over 5 years ago.

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

RedirectCacheService.php#60

Steps to reproduce

  1. Initial installation with "introduction package" (or without, in this case create a new page with standard root template)
  2. Configure Redis as Caching backend (see configuration snippet below)
  3. cause redis backend to fail by stopping the redis service, e.g. service stop redis
  4. (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:

  1. 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

oops.png (16.4 KB) oops.png Sybille Peters, 2018-02-27 18:01
Actions

Also available in: Atom PDF