Fix the annotation migration for mysql #3591
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Slack Conversation: https://cloudfoundry.slack.com/archives/C07C04W4Q/p1704495655161239
Some mysql like DBs apearently do not support locking tables. An example for this is Percona xtraDB Cluster. With this change we optimistically try to run this migration consitently if we can. If not we try it anyway best effort.
The migration removes possible duplcates and then sets a unique constraint to prevent new duplicates. For this whole process to work consistently we need table locks to prevent inserts of new duplicates while the deduplication runs. Otherwise the creation of the unique
constraint may fail.
In case the table lock feature is not supported or the mysql db user is lacking permissions we deduplicate anyway and in case a error to set the unique constraint occurs we fail and rely on retry mechanism of db migrations to eventually succede the migration when the next run is not triggering the race condition described above that causes the migration to fail.
For Databases that support table locking this race condition cannot happen at all since writes to the table in question are prevented.