Update ci_pending_builds when trackable attributes are mutated
Ref: #335866 (closed)
What does this MR do?
This MR updates Ci::PendingBuild
when shared runners is toggled at the project & group
level.
It includes the following items:
- Introduce new module
TrackableAttribute
- Add new service to bulk update
ci_pending_builds
table at the project and group level - Listen to database changes for the following attributes and kicks off service to update
ci_pending_builds
-
shared_runners_enabled
for group -
shared_runners_enabled
for project -
pending_delete
for project -
builds_access_level
for project
-
Why are we doing this?
When working on denormalization shared runners data to ci_pending_builds
in !64644 (merged), it was brought up that we need to make sure to update our new denormalized column to ensure data consistency.
This MR takes care of it and add this new feature behind a feature flag ci_pending_builds_maintain_shared_runners_data
.
Note: Alternatively we could use postgresql triggers as discovered in this MR
Does this MR meet the acceptance criteria?
Conformity
- [-] I have included changelog trailers, or none are needed. (Does this MR need a changelog?)
- [-] I have added/updated documentation, or it's not needed. (Is documentation required?)
- [-] I have properly separated EE content from FOSS, or this MR is FOSS only. (Where should EE code go?)
-
I have added information for database reviewers in the MR description, or it's not needed. (Does this MR have database related changes?) -
I have self-reviewed this MR per code review guidelines. -
This MR does not harm performance, or I have asked a reviewer to help assess the performance impact. (Merge request performance guidelines) -
I have followed the style guides. -
This change is backwards compatible across updates, or this does not apply.
Edited by Max Orefice