Bug #91546


Populate slugs upgrade wizard fails with SiteNotFoundException due to orphaned page

Added by filigivuji filigivuji about 4 years ago. Updated about 1 year ago.

Should have
Link Handling, Site Handling & Routing
Target version:
Start date:
Due date:
% Done:


Estimated time:
TYPO3 Version:
PHP Version:
Is Regression:
Sprint Focus:


I'm currently performing an upgrade from TYPO3 8.7 to 9.5.
I've set up a site configuration for the (only) root site.

When performing the Introduce URL parts ("slugs") to all existing pages upgrade wizard, it fails with the following exception:

(1/1) #1534710048 TYPO3\CMS\Core\Exception\SiteNotFoundException
No pseudo-site found in root line of page <pageid>

in /html/typo3/typo3_src-9.5.18/typo3/sysext/core/Classes/Site/PseudoSiteFinder.php line 189
            if (isset($this->pseudoSites[(int)$pageInRootLine['uid']])) {
                return $this->pseudoSites[(int)$pageInRootLine['uid']];
        throw new SiteNotFoundException('No pseudo-site found in root line of page ' . $pageId, 1534710048);

     * Find a site by given root page id
at TYPO3\CMS\Core\Site\PseudoSiteFinder->getSiteByPageId(<pageid>, array())
in /html/typo3/typo3_src-9.5.18/typo3/sysext/core/Classes/Routing/SiteMatcher.php line 229
        try {
            return $this->finder->getSiteByPageId($pageId, $rootLine);
        } catch (SiteNotFoundException $e) {
            // Check for a pseudo / null site
            return $this->pseudoSiteFinder->getSiteByPageId($pageId, $rootLine);

at TYPO3\CMS\Core\Routing\SiteMatcher->matchByPageId(<pageid>)
in /html/typo3/typo3_src-9.5.18/typo3/sysext/core/Classes/DataHandling/SlugHelper.php line 305
        // The installation contains at least ONE other record with the same slug
        // Now find out if it is the same root page ID
        $siteMatcher = GeneralUtility::makeInstance(SiteMatcher::class);
        $siteOfCurrentRecord = $siteMatcher->matchByPageId($pageId);
        // TODO: Rather than silently ignoring this misconfiguration
        // (when getting a PseudoSite or NullSite), a warning should
        // be thrown here, or maybe even let the exception bubble up
        // and catch it in places that uses this API
at TYPO3\CMS\Core\DataHandling\SlugHelper->isUniqueInSite('<slug>', object(TYPO3\CMS\Core\DataHandling\Model\RecordState))
in /html/typo3/typo3_src-9.5.18/typo3/sysext/install/Classes/Updates/PopulatePageSlugs.php line 176

            $state = RecordStateFactory::forName($this->table)
                ->fromArray($record, $pid, $recordId);
            if ($hasToBeUniqueInSite && !$slugHelper->isUniqueInSite($slug, $state)) {
                $slug = $slugHelper->buildSlugForUniqueInSite($slug, $state);
at TYPO3\CMS\Install\Updates\PopulatePageSlugs->populateSlugs()
in /html/typo3/typo3_src-9.5.18/typo3/sysext/install/Classes/Updates/PopulatePageSlugs.php line 101
     * @return bool Whether everything went smoothly or not
    public function executeUpdate(): bool
        return true;

at TYPO3\CMS\Install\Updates\PopulatePageSlugs->executeUpdate()
in /html/typo3/typo3_src-9.5.18/typo3/sysext/install/Classes/Service/UpgradeWizardsService.php line 397
                        $performResult = true;
                } else {
                    // confirmation yes or non-confirmable
                    $performResult = $updateObject->executeUpdate();

            $stream = $this->output->getStream();
at TYPO3\CMS\Install\Service\UpgradeWizardsService->executeWizard('pagesSlugs')
in /html/typo3/typo3_src-9.5.18/typo3/sysext/install/Classes/Controller/UpgradeController.php line 1000
        // ext_localconf, db and ext_tables must be loaded for the updates :(
        $upgradeWizardsService = new UpgradeWizardsService();
        $identifier = $request->getParsedBody()['install']['identifier'];
        $messages = $upgradeWizardsService->executeWizard($identifier);
        return new JsonResponse([
            'success' => true,
            'status' => $messages,
at TYPO3\CMS\Install\Controller\UpgradeController->upgradeWizardsExecuteAction(object(TYPO3\CMS\Core\Http\ServerRequest))
in /html/typo3/typo3_src-9.5.18/typo3/sysext/install/Classes/Http/RequestHandler.php line 221
                    'Unknown action method ' . $action . ' in controller ' . $controllerName,
            $response = $controller->$action($request);

        return $response;
at TYPO3\CMS\Install\Http\RequestHandler->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /html/typo3/typo3_src-9.5.18/typo3/sysext/install/Classes/Http/Application.php line 65
        foreach ($this->availableRequestHandlers as $handler) {
            if ($handler->canHandleRequest($request)) {
                return $handler->handle($request)
                    ->withHeader('X-Frame-Options', 'SAMEORIGIN');
        throw new \TYPO3\CMS\Core\Exception('No suitable request handler found.', 1518448686);
at TYPO3\CMS\Install\Http\Application->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /html/typo3/typo3_src-9.5.18/typo3/sysext/core/Classes/Http/AbstractApplication.php line 120
    final public function run(callable $execute = null)
        try {
            $response = $this->handle(
            if ($execute !== null) {
at TYPO3\CMS\Core\Http\AbstractApplication->run()
in /html/typo3/typo3_src-9.5.18/typo3/install.php line 104

call_user_func(function () {
    $classLoader = require dirname(__DIR__).'/vendor/autoload.php';
    \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::run(1, \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_INSTALL);
    \TYPO3\CMS\Core\Core\Bootstrap::init($classLoader, true)->get(\TYPO3\CMS\Install\Http\Application::class)->run();
at {closure}()
in /html/typo3/typo3_src-9.5.18/typo3/install.php line 105
call_user_func(function () {
    $classLoader = require dirname(__DIR__).'/vendor/autoload.php';
    \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::run(1, \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_INSTALL);
    \TYPO3\CMS\Core\Core\Bootstrap::init($classLoader, true)->get(\TYPO3\CMS\Install\Http\Application::class)->run();

<pageid> has the following properties: It is marked as deleted=0, but its parent page is marked as deleted=1.

This affects TYPO3 9.5. It seems this is already fixed in TYPO3 10 and later:

Actions #1

Updated by Gerrit Code Review about 4 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

Actions #2

Updated by Gerrit Code Review about 4 years ago

Patch set 1 for branch 9.5 of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at

Actions #3

Updated by Riccardo De Contardi about 1 year ago

  • Status changed from Under Review to Closed

Abandoned for 9.5 -> closing it

If you think that this is the wrong decision or experience the issue again, please reopen it or open a new issue with a reference to this one. Thank you.


Also available in: Atom PDF