Skip to content

[18.0][FIX] base_exception: MissingError on records created in the ongoing transaction - #3725

Merged
OCA-git-bot merged 1 commit into
OCA:18.0from
Tecnativa:18.0-fix-base_exception-uncommitted-record-cursor
Sep 15, 2026
Merged

OCA-git-bot merged 1 commit into
OCA:18.0from
Tecnativa:18.0-fix-base_exception-uncommitted-record-cursor

Conversation

@sergio-teruel

@sergio-teruel sergio-teruel commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

detect_exceptions() opens a second, genuinely independent DB connection (self.env.registry.cursor()) to write exception flags so they survive a rollback of the ongoing transaction. It then re-derived main_records through that same second connection (self.with_env(new_env)), which crashes with MissingError whenever _get_main_records() has to read a field on records created earlier in the SAME ongoing transaction and not yet committed (e.g. sale.order.line._get_main_records() reading order_id right after the line was created by write()).

Typical trigger: adding a product to an already confirmed sale order. sale_exception.write() re-runs detect_exceptions() on order_line whenever order_line changes on a confirmed order; the new line only exists in the ongoing transaction, so the second connection can't see it yet.

Resolve main_records once through the original (main) cursor, which does see the just-created records, and only rebind that already-resolved recordset to the new environment for the exception_ids check.

@Tecnativa TT64467

ping @carlosdauden @carlos-lopez-tecnativa

…transaction

detect_exceptions() opens a second, genuinely independent DB connection
(self.env.registry.cursor()) to write exception flags so they survive a
rollback of the ongoing transaction. It then re-derived main_records
through that same second connection (self.with_env(new_env)), which
crashes with MissingError whenever _get_main_records() has to read a
field on records created earlier in the SAME ongoing transaction and not
yet committed (e.g. sale.order.line._get_main_records() reading order_id
right after the line was created by write()).

Typical trigger: adding a product to an already confirmed sale order.
sale_exception.write() re-runs detect_exceptions() on order_line whenever
order_line changes on a confirmed order; the new line only exists in the
ongoing transaction, so the second connection can't see it yet.

Resolve main_records once through the original (main) cursor, which does
see the just-created records, and only rebind that already-resolved
recordset to the new environment for the exception_ids check.
@OCA-git-bot

Copy link
Copy Markdown
Contributor

Hi @hparfr, @sebastienbeau,
some modules you are maintaining are being modified, check this out!

@hparfr

hparfr commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

FYI @florian-dacosta @grindtildeath

@sergio-teruel
sergio-teruel marked this pull request as ready for review September 14, 2026 12:17

@grindtildeath grindtildeath left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Good catch 👍

@hparfr hparfr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

/ocabot merge minor

@OCA-git-bot

Copy link
Copy Markdown
Contributor

This PR looks fantastic, let's merge it!
Prepared branch 18.0-ocabot-merge-pr-3725-by-hparfr-bump-minor, awaiting test results.

@OCA-git-bot
OCA-git-bot merged commit b7499fc into OCA:18.0 Sep 15, 2026
7 checks passed
@OCA-git-bot

Copy link
Copy Markdown
Contributor

Congratulations, your PR was merged at 60cd54e. Thanks a lot for contributing to OCA. ❤️

@pedrobaeza
pedrobaeza deleted the 18.0-fix-base_exception-uncommitted-record-cursor branch September 15, 2026 06:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants