diff --git a/Neos.Neos/Classes/FrontendRouting/CatchUpHook/RouterCacheHook.php b/Neos.Neos/Classes/FrontendRouting/CatchUpHook/RouterCacheHook.php index e0081f19c13..b6529d5be4c 100644 --- a/Neos.Neos/Classes/FrontendRouting/CatchUpHook/RouterCacheHook.php +++ b/Neos.Neos/Classes/FrontendRouting/CatchUpHook/RouterCacheHook.php @@ -72,7 +72,7 @@ public function onAfterCatchUp(): void private function onBeforeSubtreeWasTagged(SubtreeWasTagged $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } @@ -92,7 +92,7 @@ private function onBeforeSubtreeWasTagged(SubtreeWasTagged $event): void private function onBeforeNodeAggregateWasRemoved(NodeAggregateWasRemoved $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } @@ -112,7 +112,7 @@ private function onBeforeNodeAggregateWasRemoved(NodeAggregateWasRemoved $event) private function onBeforeNodePropertiesWereSet(NodePropertiesWereSet $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } @@ -137,7 +137,7 @@ private function onBeforeNodePropertiesWereSet(NodePropertiesWereSet $event): vo private function onBeforeNodeAggregateWasMoved(NodeAggregateWasMoved $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } diff --git a/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathFinder.php b/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathFinder.php index d219e450a88..b2751aac5b9 100644 --- a/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathFinder.php +++ b/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathFinder.php @@ -8,7 +8,6 @@ use Doctrine\DBAL\Exception as DBALException; use Neos\ContentRepository\Core\Projection\ProjectionStateInterface; use Neos\ContentRepository\Core\SharedModel\Node\NodeAggregateId; -use Neos\ContentRepository\Core\SharedModel\Workspace\ContentStreamId; use Neos\Flow\Annotations as Flow; use Neos\Neos\Domain\Model\SiteNodeName; use Neos\Neos\FrontendRouting\Exception\NodeNotFoundException; @@ -18,7 +17,6 @@ */ final class DocumentUriPathFinder implements ProjectionStateInterface { - private ?ContentStreamId $liveContentStreamIdRuntimeCache = null; private bool $cacheEnabled = true; /** @@ -218,36 +216,6 @@ public function getLastChildNodeNotBeing( ); } - /** - * @api - */ - public function getLiveContentStreamId(): ContentStreamId - { - if ($this->liveContentStreamIdRuntimeCache === null) { - try { - $contentStreamId = $this->dbal->fetchOne( - 'SELECT contentStreamId FROM ' - . $this->tableNamePrefix . '_livecontentstreams LIMIT 1' - ); - } catch (DBALException $e) { - throw new \RuntimeException(sprintf( - 'Failed to fetch contentStreamId for live workspace: %s', - $e->getMessage() - ), 1599666764, $e); - } - if (!is_string($contentStreamId)) { - throw new \RuntimeException( - 'Failed to fetch contentStreamId for live workspace,' - . ' probably you have to replay the "documenturipath" projection', - 1599667894 - ); - } - $this->liveContentStreamIdRuntimeCache - = ContentStreamId::fromString($contentStreamId); - } - return $this->liveContentStreamIdRuntimeCache; - } - /** * @param array $parameters * @throws NodeNotFoundException @@ -345,9 +313,4 @@ public function getDescendantsOfNode(DocumentNodeInfo $node): DocumentNodeInfos ] ); } - - public function isLiveContentStream(ContentStreamId $contentStreamId): bool - { - return $contentStreamId->equals($this->getLiveContentStreamId()); - } } diff --git a/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathProjection.php b/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathProjection.php index 9d99aad0174..6c5b5d7a4fb 100644 --- a/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathProjection.php +++ b/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathProjection.php @@ -6,7 +6,6 @@ use Doctrine\DBAL\Connection; use Doctrine\DBAL\Exception as DBALException; -use Doctrine\DBAL\Schema\AbstractSchemaManager; use Doctrine\DBAL\Types\Types; use Neos\ContentRepository\Core\DimensionSpace\OriginDimensionSpacePoint; use Neos\ContentRepository\Core\EventStore\EventInterface; @@ -25,7 +24,6 @@ use Neos\ContentRepository\Core\Feature\RootNodeCreation\Event\RootNodeAggregateWithNodeWasCreated; use Neos\ContentRepository\Core\Feature\SubtreeTagging\Event\SubtreeWasTagged; use Neos\ContentRepository\Core\Feature\SubtreeTagging\Event\SubtreeWasUntagged; -use Neos\ContentRepository\Core\Feature\WorkspaceCreation\Event\RootWorkspaceWasCreated; use Neos\ContentRepository\Core\Infrastructure\DbalCheckpointStorage; use Neos\ContentRepository\Core\Infrastructure\DbalSchemaDiff; use Neos\ContentRepository\Core\NodeType\NodeTypeManager; @@ -109,7 +107,12 @@ private function determineRequiredSqlStatements(): array { $schemaManager = $this->dbal->createSchemaManager(); $schema = (new DocumentUriPathSchemaBuilder($this->tableNamePrefix))->buildSchema($schemaManager); - return DbalSchemaDiff::determineRequiredSqlStatements($this->dbal, $schema); + $statements = DbalSchemaDiff::determineRequiredSqlStatements($this->dbal, $schema); + // MIGRATIONS + if ($this->dbal->getSchemaManager()->tablesExist([$this->tableNamePrefix . '_livecontentstreams'])) { + $statements[] = sprintf('DROP table %s_livecontentstreams;', $this->tableNamePrefix); + } + return $statements; } @@ -125,7 +128,6 @@ private function truncateDatabaseTables(): void { try { $this->dbal->exec('TRUNCATE ' . $this->tableNamePrefix . '_uri'); - $this->dbal->exec('TRUNCATE ' . $this->tableNamePrefix . '_livecontentstreams'); } catch (DBALException $e) { throw new \RuntimeException(sprintf('Failed to truncate tables: %s', $e->getMessage()), 1599655382, $e); } @@ -135,7 +137,6 @@ private function truncateDatabaseTables(): void public function canHandle(EventInterface $event): bool { return in_array($event::class, [ - RootWorkspaceWasCreated::class, RootNodeAggregateWithNodeWasCreated::class, RootNodeAggregateDimensionsWereUpdated::class, NodeAggregateWithNodeWasCreated::class, @@ -156,7 +157,6 @@ public function canHandle(EventInterface $event): bool public function apply(EventInterface $event, EventEnvelope $eventEnvelope): void { match ($event::class) { - RootWorkspaceWasCreated::class => $this->whenRootWorkspaceWasCreated($event), RootNodeAggregateWithNodeWasCreated::class => $this->whenRootNodeAggregateWithNodeWasCreated($event), RootNodeAggregateDimensionsWereUpdated::class => $this->whenRootNodeAggregateDimensionsWereUpdated($event), NodeAggregateWithNodeWasCreated::class => $this->whenNodeAggregateWithNodeWasCreated($event), @@ -191,25 +191,9 @@ public function getState(): DocumentUriPathFinder return $this->stateAccessor; } - private function whenRootWorkspaceWasCreated(RootWorkspaceWasCreated $event): void - { - try { - $this->dbal->insert($this->tableNamePrefix . '_livecontentstreams', [ - 'contentStreamId' => $event->newContentStreamId->value, - 'workspaceName' => $event->workspaceName->value, - ]); - } catch (DBALException $e) { - throw new \RuntimeException(sprintf( - 'Failed to insert root content stream id of the root workspace "%s": %s', - $event->workspaceName->value, - $e->getMessage() - ), 1599646608, $e); - } - } - private function whenRootNodeAggregateWithNodeWasCreated(RootNodeAggregateWithNodeWasCreated $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } foreach ($event->coveredDimensionSpacePoints as $dimensionSpacePoint) { @@ -225,7 +209,7 @@ private function whenRootNodeAggregateWithNodeWasCreated(RootNodeAggregateWithNo private function whenRootNodeAggregateDimensionsWereUpdated(RootNodeAggregateDimensionsWereUpdated $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } @@ -265,7 +249,7 @@ private function whenRootNodeAggregateDimensionsWereUpdated(RootNodeAggregateDim private function whenNodeAggregateWithNodeWasCreated(NodeAggregateWithNodeWasCreated $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } $documentTypeClassification = $this->getDocumentTypeClassification($event->nodeTypeName); @@ -360,7 +344,7 @@ private function whenNodeAggregateWithNodeWasCreated(NodeAggregateWithNodeWasCre private function whenNodeAggregateTypeWasChanged(NodeAggregateTypeWasChanged $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } switch ($this->getDocumentTypeClassification($event->newNodeTypeName)) { @@ -395,7 +379,7 @@ private function whenNodeAggregateTypeWasChanged(NodeAggregateTypeWasChanged $ev private function whenNodePeerVariantWasCreated(NodePeerVariantWasCreated $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } $this->copyVariants( @@ -408,7 +392,7 @@ private function whenNodePeerVariantWasCreated(NodePeerVariantWasCreated $event) private function whenNodeGeneralizationVariantWasCreated(NodeGeneralizationVariantWasCreated $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } $this->copyVariants( @@ -421,7 +405,7 @@ private function whenNodeGeneralizationVariantWasCreated(NodeGeneralizationVaria private function whenNodeSpecializationVariantWasCreated(NodeSpecializationVariantWasCreated $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } $this->copyVariants( @@ -463,7 +447,7 @@ private function copyVariants( private function whenSubtreeWasTagged(SubtreeWasTagged $event): void { - if ($event->tag->value !== 'disabled' || !$this->getState()->isLiveContentStream($event->contentStreamId)) { + if ($event->tag->value !== 'disabled' || !$event->workspaceName->isLive()) { return; } foreach ($event->affectedDimensionSpacePoints as $dimensionSpacePoint) { @@ -494,7 +478,7 @@ private function whenSubtreeWasTagged(SubtreeWasTagged $event): void private function whenSubtreeWasUntagged(SubtreeWasUntagged $event): void { - if ($event->tag->value !== 'disabled' || !$this->getState()->isLiveContentStream($event->contentStreamId)) { + if ($event->tag->value !== 'disabled' || !$event->workspaceName->isLive()) { return; } foreach ($event->affectedDimensionSpacePoints as $dimensionSpacePoint) { @@ -525,7 +509,7 @@ private function whenSubtreeWasUntagged(SubtreeWasUntagged $event): void private function whenNodeAggregateWasRemoved(NodeAggregateWasRemoved $event): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } foreach ($event->affectedCoveredDimensionSpacePoints as $dimensionSpacePoint) { @@ -555,7 +539,7 @@ private function whenNodeAggregateWasRemoved(NodeAggregateWasRemoved $event): vo private function whenNodePropertiesWereSet(NodePropertiesWereSet $event, EventEnvelope $eventEnvelope): void { - if (!$this->getState()->isLiveContentStream($event->contentStreamId)) { + if (!$event->workspaceName->isLive()) { return; } $newPropertyValues = $event->propertyValues->getPlainValues(); @@ -623,7 +607,7 @@ private function whenNodePropertiesWereSet(NodePropertiesWereSet $event, EventEn private function whenNodeAggregateWasMoved(NodeAggregateWasMoved $event): void { - if (!$this->getState()->isLiveContentStream($event->getContentStreamId())) { + if (!$event->workspaceName->isLive()) { return; } @@ -941,7 +925,7 @@ private function connectNodeWithSiblings( private function whenDimensionSpacePointWasMoved(DimensionSpacePointWasMoved $event): void { - if ($this->getState()->isLiveContentStream($event->contentStreamId)) { + if ($event->workspaceName->isLive()) { $this->updateNodeQuery( 'SET dimensionspacepointhash = :newDimensionSpacePointHash WHERE dimensionspacepointhash = :originalDimensionSpacePointHash', @@ -965,7 +949,7 @@ private function whenDimensionSpacePointWasMoved(DimensionSpacePointWasMoved $ev private function whenDimensionShineThroughWasAdded(DimensionShineThroughWasAdded $event): void { - if ($this->getState()->isLiveContentStream($event->contentStreamId)) { + if ($event->workspaceName->isLive()) { try { $this->dbal->executeStatement('INSERT INTO ' . $this->tableNamePrefix . '_uri ( nodeaggregateid, diff --git a/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathSchemaBuilder.php b/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathSchemaBuilder.php index a983f41fd26..e91bf7d9e9d 100644 --- a/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathSchemaBuilder.php +++ b/Neos.Neos/Classes/FrontendRouting/Projection/DocumentUriPathSchemaBuilder.php @@ -33,8 +33,7 @@ public function __construct( public function buildSchema(AbstractSchemaManager $schemaManager): Schema { $schema = DbalSchemaFactory::createSchemaWithTables($schemaManager, [ - $this->createUriTable(), - $this->createLiveContentStreamsTable() + $this->createUriTable() ]); return $schema; @@ -67,13 +66,4 @@ private function createUriTable(): Table ], 'preceding_succeeding') ->addIndex(['sitenodename', 'uripath'], null, [], ['lengths' => [null, 100]]); } - - private function createLiveContentStreamsTable(): Table - { - $table = new Table($this->tableNamePrefix . '_livecontentstreams', [ - DbalSchemaFactory::columnForContentStreamId('contentstreamid')->setNotNull(true), - DbalSchemaFactory::columnForWorkspaceName('workspacename')->setDefault('') - ]); - return $table->setPrimaryKey(['contentstreamid']); - } } diff --git a/Neos.Neos/Classes/PendingChangesProjection/ChangeProjection.php b/Neos.Neos/Classes/PendingChangesProjection/ChangeProjection.php index f83739e30bb..310319f1768 100644 --- a/Neos.Neos/Classes/PendingChangesProjection/ChangeProjection.php +++ b/Neos.Neos/Classes/PendingChangesProjection/ChangeProjection.php @@ -16,7 +16,6 @@ use Doctrine\DBAL\Connection; use Doctrine\DBAL\Exception as DBALException; -use Doctrine\DBAL\Schema\AbstractSchemaManager; use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Schema\SchemaException; use Doctrine\DBAL\Schema\Table; @@ -36,7 +35,6 @@ use Neos\ContentRepository\Core\Feature\NodeVariation\Event\NodeSpecializationVariantWasCreated; use Neos\ContentRepository\Core\Feature\SubtreeTagging\Event\SubtreeWasTagged; use Neos\ContentRepository\Core\Feature\SubtreeTagging\Event\SubtreeWasUntagged; -use Neos\ContentRepository\Core\Feature\WorkspaceCreation\Event\RootWorkspaceWasCreated; use Neos\ContentRepository\Core\Infrastructure\DbalCheckpointStorage; use Neos\ContentRepository\Core\Infrastructure\DbalSchemaDiff; use Neos\ContentRepository\Core\Infrastructure\DbalSchemaFactory; @@ -61,10 +59,6 @@ class ChangeProjection implements ProjectionInterface */ private ?ChangeFinder $changeFinder = null; - /** - * @var array|null - */ - private ?array $liveContentStreamIdsRuntimeCache = null; private DbalCheckpointStorage $checkpointStorage; public function __construct( @@ -144,20 +138,18 @@ private function determineRequiredSqlStatements(): array 'originDimensionSpacePointHash' ]); - $liveContentStreamsTable = new Table($this->tableNamePrefix . '_livecontentstreams', [ - DbalSchemaFactory::columnForContentStreamId('contentstreamid')->setNotNull(true), - DbalSchemaFactory::columnForWorkspaceName('workspacename')->setDefault('') - ]); - $liveContentStreamsTable->setPrimaryKey(['contentstreamid']); - - $schema = DbalSchemaFactory::createSchemaWithTables($schemaManager, [$changeTable, $liveContentStreamsTable]); - return DbalSchemaDiff::determineRequiredSqlStatements($connection, $schema); + $schema = DbalSchemaFactory::createSchemaWithTables($schemaManager, [$changeTable]); + $statements = DbalSchemaDiff::determineRequiredSqlStatements($connection, $schema); + // MIGRATIONS + if ($this->dbal->getSchemaManager()->tablesExist([$this->tableNamePrefix . '_livecontentstreams'])) { + $statements[] = sprintf('DROP table %s_livecontentstreams;', $this->tableNamePrefix); + } + return $statements; } public function reset(): void { $this->dbal->exec('TRUNCATE ' . $this->tableNamePrefix); - $this->dbal->exec('TRUNCATE ' . $this->tableNamePrefix . '_livecontentstreams'); $this->checkpointStorage->acquireLock(); $this->checkpointStorage->updateAndReleaseLock(SequenceNumber::none()); } @@ -165,7 +157,6 @@ public function reset(): void public function canHandle(EventInterface $event): bool { return in_array($event::class, [ - RootWorkspaceWasCreated::class, NodeAggregateWasMoved::class, NodePropertiesWereSet::class, NodeReferencesWereSet::class, @@ -183,7 +174,6 @@ public function canHandle(EventInterface $event): bool public function apply(EventInterface $event, EventEnvelope $eventEnvelope): void { match ($event::class) { - RootWorkspaceWasCreated::class => $this->whenRootWorkspaceWasCreated($event), NodeAggregateWasMoved::class => $this->whenNodeAggregateWasMoved($event), NodePropertiesWereSet::class => $this->whenNodePropertiesWereSet($event), NodeReferencesWereSet::class => $this->whenNodeReferencesWereSet($event), @@ -215,24 +205,12 @@ public function getState(): ChangeFinder return $this->changeFinder; } - private function whenRootWorkspaceWasCreated(RootWorkspaceWasCreated $event): void + private function whenNodeAggregateWasMoved(NodeAggregateWasMoved $event): void { - try { - $this->dbal->insert($this->tableNamePrefix . '_livecontentstreams', [ - 'contentStreamId' => $event->newContentStreamId->value, - 'workspaceName' => $event->workspaceName->value, - ]); - } catch (DBALException $e) { - throw new \RuntimeException(sprintf( - 'Failed to insert root content stream id of the root workspace "%s": %s', - $event->workspaceName->value, - $e->getMessage() - ), 1689933563, $e); + if ($event->workspaceName->isLive()) { + return; } - } - private function whenNodeAggregateWasMoved(NodeAggregateWasMoved $event): void - { $affectedDimensionSpacePoints = iterator_to_array($event->succeedingSiblingsForCoverage->toDimensionSpacePointSet()); $arbitraryDimensionSpacePoint = reset($affectedDimensionSpacePoints); if ($arbitraryDimensionSpacePoint instanceof DimensionSpacePoint) { @@ -252,6 +230,9 @@ private function whenNodeAggregateWasMoved(NodeAggregateWasMoved $event): void private function whenNodePropertiesWereSet(NodePropertiesWereSet $event): void { + if ($event->workspaceName->isLive()) { + return; + } $this->markAsChanged( $event->contentStreamId, $event->nodeAggregateId, @@ -261,6 +242,9 @@ private function whenNodePropertiesWereSet(NodePropertiesWereSet $event): void private function whenNodeReferencesWereSet(NodeReferencesWereSet $event): void { + if ($event->workspaceName->isLive()) { + return; + } foreach ($event->affectedSourceOriginDimensionSpacePoints as $dimensionSpacePoint) { $this->markAsChanged( $event->contentStreamId, @@ -272,6 +256,9 @@ private function whenNodeReferencesWereSet(NodeReferencesWereSet $event): void private function whenNodeAggregateWithNodeWasCreated(NodeAggregateWithNodeWasCreated $event): void { + if ($event->workspaceName->isLive()) { + return; + } $this->markAsCreated( $event->contentStreamId, $event->nodeAggregateId, @@ -281,6 +268,9 @@ private function whenNodeAggregateWithNodeWasCreated(NodeAggregateWithNodeWasCre private function whenSubtreeWasTagged(SubtreeWasTagged $event): void { + if ($event->workspaceName->isLive()) { + return; + } foreach ($event->affectedDimensionSpacePoints as $dimensionSpacePoint) { $this->markAsChanged( $event->contentStreamId, @@ -292,6 +282,9 @@ private function whenSubtreeWasTagged(SubtreeWasTagged $event): void private function whenSubtreeWasUntagged(SubtreeWasUntagged $event): void { + if ($event->workspaceName->isLive()) { + return; + } foreach ($event->affectedDimensionSpacePoints as $dimensionSpacePoint) { $this->markAsChanged( $event->contentStreamId, @@ -303,7 +296,7 @@ private function whenSubtreeWasUntagged(SubtreeWasUntagged $event): void private function whenNodeAggregateWasRemoved(NodeAggregateWasRemoved $event): void { - if ($this->isLiveContentStream($event->contentStreamId)) { + if ($event->workspaceName->isLive()) { return; } @@ -377,6 +370,9 @@ private function whenDimensionSpacePointWasMoved(DimensionSpacePointWasMoved $ev private function whenNodeSpecializationVariantWasCreated(NodeSpecializationVariantWasCreated $event): void { + if ($event->workspaceName->isLive()) { + return; + } $this->markAsCreated( $event->contentStreamId, $event->nodeAggregateId, @@ -386,6 +382,9 @@ private function whenNodeSpecializationVariantWasCreated(NodeSpecializationVaria private function whenNodeGeneralizationVariantWasCreated(NodeGeneralizationVariantWasCreated $event): void { + if ($event->workspaceName->isLive()) { + return; + } $this->markAsCreated( $event->contentStreamId, $event->nodeAggregateId, @@ -395,6 +394,9 @@ private function whenNodeGeneralizationVariantWasCreated(NodeGeneralizationVaria private function whenNodePeerVariantWasCreated(NodePeerVariantWasCreated $event): void { + if ($event->workspaceName->isLive()) { + return; + } $this->markAsCreated( $event->contentStreamId, $event->nodeAggregateId, @@ -454,10 +456,6 @@ private function modifyChange( OriginDimensionSpacePoint $originDimensionSpacePoint, callable $modifyFn ): void { - if ($this->isLiveContentStream($contentStreamId)) { - return; - } - $change = $this->getChange($contentStreamId, $nodeAggregateId, $originDimensionSpacePoint); if ($change === null) { @@ -490,12 +488,4 @@ private function getChange( // We always allow root nodes return $changeRow ? Change::fromDatabaseRow($changeRow) : null; } - - private function isLiveContentStream(ContentStreamId $contentStreamId): bool - { - if ($this->liveContentStreamIdsRuntimeCache === null) { - $this->liveContentStreamIdsRuntimeCache = $this->dbal->fetchFirstColumn('SELECT contentstreamid FROM ' . $this->tableNamePrefix . '_livecontentstreams'); - } - return in_array($contentStreamId->value, $this->liveContentStreamIdsRuntimeCache, true); - } }