Originally Goal objects were immutable and replaced on change. However, as we move towards an architecture where there are objects which keep references to goals, it makes more sense to have them be mutable and updated (and ideally with only one instance per goal). This was somewhat true before, but has become more explicit with recent changes.
Here we allow goals to be refreshed, update some controllers to use this functionality, and address some resulting concurrency issues.
Originally
Goal
objects were immutable and replaced on change. However, as we move towards an architecture where there are objects which keep references to goals, it makes more sense to have them be mutable and updated (and ideally with only one instance per goal). This was somewhat true before, but has become more explicit with recent changes.Here we allow goals to be refreshed, update some controllers to use this functionality, and address some resulting concurrency issues.
Test Plan: Smoke test running locally for a while