Page MenuHomePhabricator

Fix a complicated object caching issue with the policy filter
ClosedPublic

Authored by epriestley on Nov 11 2016, 9:28 PM.
Tags
None
Referenced Files
F14054061: D16840.diff
Fri, Nov 15, 9:58 PM
F14042799: D16840.diff
Tue, Nov 12, 6:06 AM
F14038858: D16840.id40553.diff
Mon, Nov 11, 2:29 AM
F14030294: D16840.id40556.diff
Sat, Nov 9, 2:01 AM
F14030118: D16840.id40556.diff
Sat, Nov 9, 12:08 AM
F14030087: D16840.diff
Fri, Nov 8, 11:53 PM
F14030067: D16840.id.diff
Fri, Nov 8, 11:44 PM
F14029896: D16840.id.diff
Fri, Nov 8, 10:33 PM
Subscribers
None

Details

Summary

Fixes T11853. To set this up:

  • Create "Project A".
  • Join "Project A".
  • Create a subproject, "Project A Subproject 1".
    • This causes Project A to become a parent project.
    • This moves you to be a member of "Project A Subproject 1" instead of "Project A" directly.
  • Create another subproject, "Project A Subproject 2".
    • Do not join this subproject.
  • Set the second subproject's policy to "Visible To: Members of Project A".
  • Try to edit the second subproject.

Before this change, this fails:

  • When querying projects, we sometime try to skip loading the viewer's membership in ancestor projects as a small optimization.
  • Via PhabricatorExtendedPolicyInterface, we may then return the parent project to the policy filter for extended checks.
  • The PolicyFilter has an optimization: if we're checking an object, and we already have that object, we can just use the object we already have. This is common and useful.
  • However, in this case it causes us to reuse an incomplete object (an object without proper membership information). We fail a policy check which we should pass.

Instead, don't skip loading the viewer's membership in ancestor projects.

Test Plan
  • Did all that stuff above.
  • Could edit the subproject.
  • Ran arc unit --everything.

Diff Detail

Repository
rP Phabricator
Branch
pperm1
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 14444
Build 18825: Run Core Tests
Build 18824: arc lint + arc unit

Event Timeline

epriestley retitled this revision from to Fix a complicated object caching issue with the policy filter.
epriestley updated this object.
epriestley edited the test plan for this revision. (Show Details)
epriestley added a reviewer: chad.
chad edited edge metadata.
This revision is now accepted and ready to land.Nov 11 2016, 9:38 PM
This revision was automatically updated to reflect the committed changes.