-
-
Notifications
You must be signed in to change notification settings - Fork 515
Run tests with MongoDB 8.0 replica set #2798
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
Conversation
Cannot insert into a time-series collection in a multi-document transaction: doctrine_odm_tests.TimeSeriesDocument
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR fixes test failures when running with MongoDB 8.0 replica set configuration by adjusting transaction handling and adding replication synchronization logic.
- Disables transactions for time series document operations which are incompatible with MongoDB 8.0 replica sets
- Adds retry logic with backoff for read preference tests to handle replication lag
- Includes MongoDB 8.0 replica set configuration in CI workflow
Reviewed Changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| tests/Doctrine/ODM/MongoDB/Tests/Functional/TimeSeriesTest.php | Disables transactions for time series operations to fix compatibility with MongoDB 8.0 |
| tests/Doctrine/ODM/MongoDB/Tests/Functional/ReadPreferenceTest.php | Adds retry mechanism with delays to handle replication lag in replica set environments |
| .github/workflows/continuous-integration.yml | Adds MongoDB 8.0 replica set test configuration to CI matrix |
| $retries = 0; | ||
| do { | ||
| // Wait a bit to ensure replication has caught up. | ||
| usleep(1_000 * $retries); | ||
| $user = $query->getSingleResult(); | ||
| } while ($user === null && $retries++ < 100); | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix this error:
1) Doctrine\ODM\MongoDB\Tests\Functional\ReadPreferenceTest::testHintIsSetOnQuery with data set #1 ('secondaryPreferred', [])
Failed asserting that null is an instance of class Documents\User.
/home/runner/work/mongodb-odm/mongodb-odm/tests/Doctrine/ODM/MongoDB/Tests/Functional/ReadPreferenceTest.php:61
2) Doctrine\ODM\MongoDB\Tests\Functional\ReadPreferenceTest::testHintIsSetOnQuery with data set #2 ('secondary', [['east'], []])
Failed asserting that null is an instance of class Documents\User.
|
|
||
| $this->dm->persist($document); | ||
| $this->dm->flush(); | ||
| $this->dm->flush(['withTransaction' => false]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix this error:
1) Doctrine\ODM\MongoDB\Tests\Functional\TimeSeriesTest::testCreateTimeSeriesDocumentWithoutId
MongoDB\Driver\Exception\BulkWriteException: time-series insert failed: doctrine_odm_tests.TimeSeriesDocument :: caused by :: Cannot insert into a time-series collection in a multi-document transaction: doctrine_odm_tests.TimeSeriesDocument
/home/runner/work/mongodb-odm/mongodb-odm/vendor/mongodb/mongodb/src/Operation/InsertMany.php:134
/home/runner/work/mongodb-odm/mongodb-odm/vendor/mongodb/mongodb/src/Collection.php:854
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/Persisters/DocumentPersister.php:230
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:1186
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:3120
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:467
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:3172
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:464
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentManager.php:585
/home/runner/work/mongodb-odm/mongodb-odm/tests/Doctrine/ODM/MongoDB/Tests/Functional/TimeSeriesTest.php:44
|
|
||
| $this->dm->persist($document); | ||
| $this->dm->flush(); | ||
| $this->dm->flush(['withTransaction' => false]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix this error:
2) Doctrine\ODM\MongoDB\Tests\Functional\TimeSeriesTest::testCreateTimeSeriesDocumentWithId
MongoDB\Driver\Exception\BulkWriteException: time-series insert failed: doctrine_odm_tests.TimeSeriesDocument :: caused by :: Cannot insert into a time-series collection in a multi-document transaction: doctrine_odm_tests.TimeSeriesDocument
/home/runner/work/mongodb-odm/mongodb-odm/vendor/mongodb/mongodb/src/Operation/InsertMany.php:134
/home/runner/work/mongodb-odm/mongodb-odm/vendor/mongodb/mongodb/src/Collection.php:854
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/Persisters/DocumentPersister.php:230
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:1186
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:3120
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:467
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:3172
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:464
/home/runner/work/mongodb-odm/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentManager.php:585
/home/runner/work/mongodb-odm/mongodb-odm/tests/Doctrine/ODM/MongoDB/Tests/Functional/TimeSeriesTest.php:60
Summary
Fixes tests failing with this configuration.