Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BUGFIX: #4614 NodeAggregateWasMoved change not marked as changed in correct dimension #5369

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ public function __construct(
public ContentStreamId $contentStreamId,
public NodeAggregateId $nodeAggregateId,
public ?NodeAggregateId $newParentNodeAggregateId,
/**
* @var DimensionSpacePoint $dimensionSpacePoint This is one of the *covered* dimension space points of the node aggregate and not necessarily one of the occupied ones. This allows us to move virtual specializations only when using the scatter strategy
*/
public DimensionSpacePoint $dimensionSpacePoint,
Comment on lines +66 to +69
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so that we need the originally attempted dimensionSpacePoint to be moved seems correct. But the question is, see #5360 if also the relationDistributionStrategy should be part of the event?

Whas is your opinion? @nezaniel

Copy link
Member

@kitsunet kitsunet Nov 30, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it wouldn't hurt to have the strategy in here if only for potential debugging help....

public InterdimensionalSiblings $succeedingSiblingsForCoverage,
) {
}
Expand All @@ -89,6 +93,7 @@ public function withWorkspaceNameAndContentStreamId(WorkspaceName $targetWorkspa
$contentStreamId,
$this->nodeAggregateId,
$this->newParentNodeAggregateId,
$this->dimensionSpacePoint,
$this->succeedingSiblingsForCoverage,
);
}
Expand Down Expand Up @@ -132,6 +137,7 @@ public static function fromArray(array $values): self
ContentStreamId::fromString($values['contentStreamId']),
NodeAggregateId::fromString($values['nodeAggregateId']),
$newParentNodeAggregateId,
DimensionSpacePoint::fromArray($values['dimensionSpacePoint']),
$succeedingSiblingsForCoverage,
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ private function handleMoveNodeAggregate(
$contentStreamId,
$command->nodeAggregateId,
$command->newParentNodeAggregateId,
$command->dimensionSpacePoint,
$this->resolveInterdimensionalSiblingsForMove(
$contentGraph,
$command->dimensionSpacePoint,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,7 @@ private function createNodeVariant(NodeAggregateId $nodeAggregateId, OriginDimen
$this->contentStreamId,
$nodeAggregateId,
$parentNodeAggregate->nodeAggregateId,
$originDimensionSpacePoint->toDimensionSpacePoint(),
new InterdimensionalSiblings(
new InterdimensionalSibling(
$originDimensionSpacePoint->toDimensionSpacePoint(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,18 +235,21 @@ private function reorderNodes(
$succeedingNode = $actualTetheredChildNodes[$succeedingSiblingNodeName];

$succeedingSiblingsForCoverage = [];
$arbitraryCoveredDimensionSpacePoint = null;
foreach ($coverageByOrigin as $coveredDimensionSpacePoint) {
$succeedingSiblingsForCoverage[] = new InterdimensionalSibling(
$coveredDimensionSpacePoint,
$succeedingNode->aggregateId
);
$arbitraryCoveredDimensionSpacePoint = $coveredDimensionSpacePoint;
}

assert($arbitraryCoveredDimensionSpacePoint !== null);
$events[] = new NodeAggregateWasMoved(
$workspaceName,
$contentStreamId,
$nodeToMove->aggregateId,
null,
$arbitraryCoveredDimensionSpacePoint,
new InterdimensionalSiblings(...$succeedingSiblingsForCoverage),
);

Expand Down
25 changes: 10 additions & 15 deletions Neos.Neos/Classes/PendingChangesProjection/ChangeProjection.php
Original file line number Diff line number Diff line change
Expand Up @@ -214,21 +214,16 @@ private function whenNodeAggregateWasMoved(NodeAggregateWasMoved $event): void
return;
}

$affectedDimensionSpacePoints = iterator_to_array($event->succeedingSiblingsForCoverage->toDimensionSpacePointSet());
$arbitraryDimensionSpacePoint = reset($affectedDimensionSpacePoints);
if ($arbitraryDimensionSpacePoint instanceof DimensionSpacePoint) {
// always the case due to constraint enforcement (at least one DSP is selected and must have a succeeding sibling or null)

// WORKAROUND: we simply use the event's first DSP here as the origin dimension space point.
// But this DSP is not necessarily occupied.
// @todo properly handle this by storing the necessary information in the projection

$this->markAsMoved(
$event->getContentStreamId(),
$event->getNodeAggregateId(),
OriginDimensionSpacePoint::fromDimensionSpacePoint($arbitraryDimensionSpacePoint)
);
}
// WORKAROUND: we simply use the event's DSP here as the origin dimension space point.
// But this DSP is not necessarily occupied.
// @todo properly handle this by storing the necessary information in the projection
// todo so we need to create a change if there is none????
Comment on lines +217 to +220
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this will start to bite us with #5314 in place as scatter will be started to be used:

But i wonder if that is not already handled via modifyChange? I guess a test could answer that ...
\Neos\Neos\PendingChangesProjection\ChangeProjection::modifyChange


$this->markAsMoved(
$event->getContentStreamId(),
$event->getNodeAggregateId(),
OriginDimensionSpacePoint::fromDimensionSpacePoint($event->dimensionSpacePoint)
);
}

private function whenNodePropertiesWereSet(NodePropertiesWereSet $event): void
Expand Down
Loading