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

MONGOID-5704 Fix performance regression on belongs_to validation #5787

Merged
merged 9 commits into from
Feb 27, 2024

Conversation

jamis
Copy link
Contributor

@jamis jamis commented Feb 21, 2024

When validating a belongs_to association, Mongoid was loading the associated record and validating it, which could result in a recursive chain of records being loaded and validated, even though they had been persisted and had not changed.

This PR fixes the regression by only validating the associated record if it is (1) already loaded, and (2) either new (unpersisted), or changed.

@jamis jamis requested a review from comandeo-mongo February 22, 2024 19:16
lib/mongoid/validatable/associated.rb Outdated Show resolved Hide resolved
Co-authored-by: Dmitry Rybakov <160598371+comandeo-mongo@users.noreply.github.com>
@jamis jamis merged commit 82a89f3 into mongodb:master Feb 27, 2024
54 of 56 checks passed
@jamis jamis deleted the 5704-belongs_to-performance branch February 27, 2024 16:59
jamis added a commit to jamis/mongoid that referenced this pull request Feb 27, 2024
…godb#5787)

* MONGOID-5704 don't try to validate persisted, unchanged associations

* we just need the attribute name

* fix failing specs

* tread very carefully so we don't trigger a load while validating

* hopefully fix has-many behavior

* documentation

* simplify

* make sure attributes getter is defined

* Fix typo -- records are not loaded *from the database*

Co-authored-by: Dmitry Rybakov <160598371+comandeo-mongo@users.noreply.github.com>

---------

Co-authored-by: Dmitry Rybakov <160598371+comandeo-mongo@users.noreply.github.com>
jamis added a commit to jamis/mongoid that referenced this pull request Feb 27, 2024
…godb#5787)

* MONGOID-5704 don't try to validate persisted, unchanged associations

* we just need the attribute name

* fix failing specs

* tread very carefully so we don't trigger a load while validating

* hopefully fix has-many behavior

* documentation

* simplify

* make sure attributes getter is defined

* Fix typo -- records are not loaded *from the database*

Co-authored-by: Dmitry Rybakov <160598371+comandeo-mongo@users.noreply.github.com>

---------

Co-authored-by: Dmitry Rybakov <160598371+comandeo-mongo@users.noreply.github.com>
jamis added a commit that referenced this pull request Feb 27, 2024
…kport to 8.1-stable) (#5793)

* MONGOID-5704 Fix performance regression on belongs_to validation (#5787)

* MONGOID-5704 don't try to validate persisted, unchanged associations

* we just need the attribute name

* fix failing specs

* tread very carefully so we don't trigger a load while validating

* hopefully fix has-many behavior

* documentation

* simplify

* make sure attributes getter is defined

* Fix typo -- records are not loaded *from the database*

Co-authored-by: Dmitry Rybakov <160598371+comandeo-mongo@users.noreply.github.com>

---------

Co-authored-by: Dmitry Rybakov <160598371+comandeo-mongo@users.noreply.github.com>

* use `rake ci` instead of `rake spec` to avoid side effects

---------

Co-authored-by: Dmitry Rybakov <160598371+comandeo-mongo@users.noreply.github.com>
jamis added a commit that referenced this pull request Feb 27, 2024
…kport to 8.0-stable) (#5794)

* MONGOID-5704 Fix performance regression on belongs_to validation (#5787)

* MONGOID-5704 don't try to validate persisted, unchanged associations

* we just need the attribute name

* fix failing specs

* tread very carefully so we don't trigger a load while validating

* hopefully fix has-many behavior

* documentation

* simplify

* make sure attributes getter is defined

* Fix typo -- records are not loaded *from the database*

Co-authored-by: Dmitry Rybakov <160598371+comandeo-mongo@users.noreply.github.com>

---------

Co-authored-by: Dmitry Rybakov <160598371+comandeo-mongo@users.noreply.github.com>

* use `rake ci` instead of `rake spec` to avoid side effects

---------

Co-authored-by: Dmitry Rybakov <160598371+comandeo-mongo@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants