Follow-up from "Add a boolean field hidden in the Issue ES mapping"
The following discussion from !111678 (merged) should be addressed:
- 
@dgruzd started a discussion: (+8 comments) issue: I'm not sure that we should use class-level method here when we update every user state. First of all, we'd blow up ::User.elastic_index_dependantswith a risk of OOM. For example this is how it would look like after having multiple state changes for different users:[1] pry(main)> ::User.elastic_index_dependants => [] [2] pry(main)> ::User.elastic_index_dependant_association :issues, on_change: :state => [{:association_name=>:issues, :on_change=>:state}] [3] pry(main)> ::User.elastic_index_dependant_association :issues, on_change: :state => [{:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}] [4] pry(main)> ::User.elastic_index_dependant_association :issues, on_change: :state => [{:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}] [5] pry(main)> ::User.elastic_index_dependant_association :issues, on_change: :state => [{:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}] [6] pry(main)> ::User.elastic_index_dependant_association :issues, on_change: :state => [{:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}] [7] pry(main)> ::User.elastic_index_dependant_association :issues, on_change: :state => [{:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}, {:association_name=>:issues, :on_change=>:state}]I've tested this on master, but I think it will be similar in this MR branch Possible solution- And the last idea/suggestion is to extend elastic_index_dependantsto support migration guards, which can be quite useful in the future. Something like:
 # in `Elastic::ApplicationVersionedSearch` elastic_index_dependants << { association_name: association_name, on_change: on_change, migration_should_finish: migration_should_finish } # in `ee/app/models/ee/user.rb` elastic_index_dependant_association :issues, on_change: :state, migration_should_finish: :add_hidden_to_issues
- And the last idea/suggestion is to extend