Neos 9.2 Beta-3 Release

We released our third beta of the new Neos 9.2 release line.

This release and work was mostly an effort to fix another hidden race-condition from Neos 9 which would have corrupted a Neos 9.2 graph.

Thank you

Goto ← Previous Beta Release

Upgrade from Neos 9.2.0-beta2 / Neos 9.2.0-beta1 :playground_slide:

In your composer.json you should require 9.2.0-beta3 for all Neos packages from the development collection and for the Neos.Ui as well as Flow:

"neos/flow": "9.2.0-beta3",
"neos/neos": "9.2.0-beta3",
"neos/neos-ui": "9.2.0-beta3"

Also if you use PHPUnit as suggested with the base distribution you must update it to ensure the FLOW testing context compiles.

"phpunit/phpunit": "~11.5",
"mikey179/vfsstream": "^1.6.12",

Otherwise you might run into exceptions like these: Attribute class `"PHPUnit\Framework\Attributes\Test"` not found · Issue #5969 · neos/neos-development-collection · GitHub

The content graph projection requires a little schema adjustment:

./flow cr:setup

Which will remove the now obsolete closed column, otherwise it would fail during new catchups:

Field ‘closed’ doesn’t have a default value

Upgrade from Neos 9.0 or Neos 9.1 :rocket:

please adjust your dependencies to 9.2.0-beta3 and carry out ALL database migrations as explained in 9.2.0-beta1.

Kickstart empty new demo project with Neos 9.2.0-beta3 :package:

Creating a new project is as simple as using

composer create-project neos/neos-base-distribution:9.2.0-beta3

Or

git clone git@github.com:neos/neos-base-distribution.git --depth 1 --branch 9.2

Race conditions during content stream forking

On the conference we philosophized a bit about the concurrency issues we had at that point. And we discussed how to solve most cases. But it struck our minds that technically nothing is safe if we don’t to atomic commits. On that note we noticed how fragile events are that technically rely on two assertions. The ContentStreamWasForked event requires its own stream to not exist but expresses a version of the source content stream where Neos would like to start the copy from. But so far we were never able to express the condition that the source content stream version still matches the condition when the event lands in the event-stream. By then we thought its just theory and would not happen or cause too much trouble. We thought targeting Neos 9.3 or 10.0 for a fix.

Now during test of the previous Neos 9.2 beta it was noticed that old Neos 9.1 events failed to replay. And after investigating we noticed a variant of exactly the problem outlined occurred: It was attempted to fork a content stream where the source content stream does not exist anymore. The event sequence is utterly broken and fails to replay in Neos 9.2.

With this beta we can now repair these events and also ensure that this kind of problem can no longer occur. For that we finalised the already started work on our event-store to commit multiple events and also to allow to enforce these constraints using GET_LOCK. Neos now commits all events at once in a single atomic transaction. We removed content stream closing which is obsolete with this new design and was previously unreliable.

Implementation PRs:

New event migration to restore events from race condition

The new migration ./flow crupgrade:eventsconcurrentworkspacerebases will detect the above mentioned race condition and can repair the events to restore an order in which the events make sense.

To safe you the trouble of which migrations to run and which are not needed there is a new command which just safely checks what is needed.

./flow crupgrade:eventsstatus

More release notes

2 Likes