neos / neos-development-collection

The unified repository containing the Neos core packages, used for Neos development.
https://www.neos.io/
GNU General Public License v3.0
260 stars 221 forks source link

BUGFIX: Use dedicated connection for EventStore #5005

Open bwaidelich opened 2 months ago

bwaidelich commented 2 months ago

Use a dedicated DBAL Connection for the DoctrineEventStore in order to prevent nested transactions potentially leading to RuntimeException of

A transaction is active already, can't commit events!

As a result, the doctrine:migrate and cr:setup commands can be skipped during CI

mhsdesign commented 2 months ago

Yes i observed that already once in ci ... locally it works without ... probably because stuff (schema) is already warmed up?

bwaidelich commented 2 months ago

@mhsdesign The error is

RuntimeException: Failed to acquire checkpoint lock for subscriber "Neos\Neos\FrontendRouting\Projection\DocumentUriPathProjection_Original" because a transaction is active already

I guess this is only implicitly related. I'll check again once #4988 is merged

bwaidelich commented 2 months ago

grml, this isn't solved wiht #4988 it seems – I applied the fix there and checks still fail. But The actual exception is now revealed and this can be reproduced locally by removing all Flow/Neos tables and running:

../../bin/behat -f progress --strict --no-interaction '-vvv' '--stop-on-failure' '-c' 'Neos.Neos/Tests/Behavior/behat.yml'  

=>

001 Scenario: Match homepage URL                                     # Features/FrontendRouting/Basic.feature:69
      When the command CreateRootWorkspace is executed with payload: # Features/FrontendRouting/Basic.feature:30
        RuntimeException: A transaction is active already, can't commit events! in Packages/Libraries/neos/eventstore-doctrineadapter/src/DoctrineEventStore.php:95

So this is the line that fails. I'll investigate..

bwaidelich commented 2 months ago

I can confirm that the last version works in conjunction with the reworked catchup: image

If we were to create a dedicated connection per projection, it would probably work here as well – and maybe that even makes sense since they have their independent transaction boundaries

mhsdesign commented 3 weeks ago

I have encountered the bug also in the NodeTemplates Ci (see https://github.com/Flowpack/Flowpack.NodeTemplates/pull/51/commits/f37b6c4a21abd9ae4fa368a62c5a81ab01d1a152)

The first error is:

Neos.ContentRepository.Core/Classes/EventStore/EventPersister.php:47

RuntimeException: A transaction is active already, can't commit events!


and succeeding errors:

Neos.ContentRepository.Core/Classes/Infrastructure/DbalCheckpointStorage.php:88

RuntimeException: Failed to acquire checkpoint lock for subscriber "Neos\ContentRepository\Core\Projection\ContentStream\ContentStreamProjection" because a transaction is active already