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

catalog: Key expression cache by binary version #31206

Merged

Conversation

jkosh44
Copy link
Contributor

@jkosh44 jkosh44 commented Jan 27, 2025

The expression cache caches optimized expressions in a persist shard. It uses the environment's deploy generation as part of the key for the cache. The assumption was that two environments with the same deploy generation would always have the same binary version. This assumption would allow two environments with the same deploy generation to safely deserialize each other's expressions, without worrying about backwards and forwards compatibility.

This assumption was not correct. Two environments with different binary version can use the same deploy generation as long as one environment never fully completed a deployment. This is especially bad because the expression cache is written to and read from in read-only mode, before a deployment is complete.

This commit updates the key of the expression cache to explicitly use the binary version of environmentd so that two environments with the same version can safely deserialize each other's expressions.

Fixes #MaterializeInc/database-issues/issues/8917

Motivation

This PR fixes a recognized bug.

Checklist

  • This PR has adequate test coverage / QA involvement has been duly considered. (trigger-ci for additional test/nightly runs)
  • This PR has an associated up-to-date design doc, is a design doc (template), or is sufficiently small to not require a design.
  • If this PR evolves an existing $T ⇔ Proto$T mapping (possibly in a backwards-incompatible way), then it is tagged with a T-proto label.
  • If this PR will require changes to cloud orchestration or tests, there is a companion cloud PR to account for those changes that is tagged with the release-blocker label (example).
  • If this PR includes major user-facing behavior changes, I have pinged the relevant PM to schedule a changelog post.

The expression cache caches optimized expressions in a persist shard.
It uses the environment's deploy generation as part of the key for the
cache. The assumption was that two environments with the same deploy
generation would always have the same binary version. This assumption
would allow two environments with the same deploy generation to safely
deserialize each other's expressions, without worrying about backwards
and forwards compatibility.

This assumption was not correct. Two environments with different binary
version can use the same deploy generation as long as one environment
never fully completed a deployment. This is especially bad because the
expression cache is written to and read from in read-only mode, before
a deployment is complete.

This commit updates the key of the expression cache to explicitly use
the binary version of environmentd so that two environments with the
same version can safely deserialize each other's expressions.

Fixes #MaterializeInc/database-issues/issues/8917
@jkosh44 jkosh44 marked this pull request as ready for review January 27, 2025 21:48
@jkosh44 jkosh44 requested a review from a team as a code owner January 27, 2025 21:48
@jkosh44 jkosh44 requested a review from ParkMyCar January 27, 2025 21:48
@jkosh44
Copy link
Contributor Author

jkosh44 commented Jan 27, 2025

WARNING: This commit is going to cause 15-20 seconds of startup time regression in the next release because it will wipe out the expression cache.

Copy link
Member

@ParkMyCar ParkMyCar left a comment

Choose a reason for hiding this comment

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

LGTM

@jkosh44 jkosh44 merged commit 5df1932 into MaterializeInc:main Jan 27, 2025
191 of 239 checks passed
@jkosh44 jkosh44 deleted the stop-using-deploy-generation-expr-cache branch January 27, 2025 22:21
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