Page MenuHomePhabricator

When computing revision ownership, cache some intermediate results for performance
ClosedPublic

Authored by epriestley on Feb 27 2017, 4:05 PM.
Tags
None
Referenced Files
F18659213: D17424.id41893.diff
Tue, Sep 23, 10:31 AM
F18658150: D17424.id.diff
Tue, Sep 23, 5:04 AM
F18628336: D17424.id41899.diff
Tue, Sep 16, 6:10 AM
F18499018: D17424.id.diff
Thu, Sep 4, 7:17 PM
F18483216: D17424.diff
Wed, Sep 3, 4:15 PM
F18454575: D17424.id41899.diff
Mon, Sep 1, 5:17 AM
F18426845: D17424.diff
Sat, Aug 30, 11:21 PM
F18084797: D17424.id41893.diff
Aug 5 2025, 5:30 PM
Subscribers
None

Details

Summary

Ref T12319. With large datasets, the computation of which packages own paths in a revision is needlessly slow.

Improve performance through caching:

  • Cache which paths belong to each repository.
  • Cache the split fragments of each path.
  • Cache the path fragment counts.
  • Micro-optimize accessing $this->path.
Test Plan
  • Used bin/lipsum to generate 4,000 packages with 150,000 paths.
  • Created a revision affecting 100 paths in phabricator/ (these paths mostly overlap with bin/lipsum path rules, since Lipsum uses Phabricator-like rules to generate paths).
  • Before optimizations, this revision spent about 5.5 seconds computing paths.
  • After optimizations, it spends about 275ms.

Screen Shot 2017-02-27 at 8.01.39 AM.png (1×2 px, 375 KB)

Diff Detail

Repository
rP Phabricator
Lint
Lint Not Applicable
Unit
Tests Not Applicable