Homec4science

Materialize parent project memberships

Authored by epriestley <git@epriestley.com> on Dec 23 2015, 12:12.

Description

Materialize parent project memberships

Summary:
Ref T10010. Subprojects have the following general membership rule: if you are a member of a subproject ("Engineering > Backend"), you are also a member of the parent project.

It would be unreasonably difficult to implement this rule directly in SQL when querying withMemberPHIDs(), because we'd have to do an arbitrarily large number of arbitrarily deep joins, or fetch and then requery a lot of data.

Instead, introduce "materailized members", which are just a copy of all the effective members of a project. When a subproject has a membership change, we go recompute the effective membership of all the parent projects. Then we can just JOIN to satisfy withMemberPHIDs().

Having this process avialable will also be useful in the future, when a project's membership might be defined by some external source.

Also make milestones mostly work like we'd expect them to with respect to membership and visibility.

Test Plan:

  • Added and executed unit tests.
  • Changed project members, verified materialized members populated correctly in the database.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T10010

Differential Revision: https://secure.phabricator.com/D14863

Details

Committed
epriestley <git@epriestley.com>Dec 23 2015, 23:39
Pushed
aubortJan 31 2017, 17:16
Parents
rPH70f6bf306f24: Implement child/descendant query rules in Projects
Branches
Unknown
Tags
Unknown

Event Timeline

epriestley <git@epriestley.com> committed rPH26ba4e871720: Materialize parent project memberships (authored by epriestley <git@epriestley.com>).Dec 23 2015, 23:39