- **status**: in-progress --> review
- **Comment**:

You were right Igor, when adding thousands of branches/tags, things became 
tricky.

The number of branches and tags were high enough that their initial loading was 
killing the performance.  Due to the nature of git and symbolic references, it 
was necessary to loop through each tag/branch like we had been doing... But by 
removing the validation for each branch, the number of calls can be 
significantly reduced.  

~~~~~
[Object(name=b.name, object_id=b.commit.hexsha) for b in self._git.branches]
~~~~~

*I attached two images of the cprofile breakdown of this loop*


Notice the cumtime is significantly higher when checking validation. Given the 
probability of a symbolic ref existing that doesn't point to a commit, this 
seems like a more than fair trade-off.  Even if it does occur, it would have no 
major impact.

What do you think?



---

** [tickets:#7873] Git branch & tag speedups**

**Status:** review
**Milestone:** unreleased
**Labels:** performance sf-current sf-4 
**Created:** Fri Apr 17, 2015 09:23 PM UTC by Dave Brondsema
**Last Updated:** Fri May 08, 2015 03:28 PM UTC
**Owner:** Heith Seewald

I saw that git pages on forge-allura.apache.org were slow, so I looked at 
stats.log and saw that the sidebar was the slowest part.  I did some additional 
digging and found 2 specific areas for improvement:

* in `git_main.py` change `default_branch_name` to a `@LazyProperty` since it 
is called many times inside a loop in `RepositoryApp.sidebar_menu`
* Since `sidebar_menu` only requests a certain number of branches, pass that 
"limit" all the way through to `git_repo.py`'s `branches` method so that 
`is_valid()` is only called a minimum number of times needed.
    * make sure the default branch logic to put it at the top of the list still 
works (e.g. always put it at the top first)

In addition to those changes, generalize and apply the same approach to the 
tags.  And also check ForgeHg to see if mercurial can benefit the same way.


---

Sent from forge-allura.apache.org because [email protected] is subscribed 
to https://forge-allura.apache.org/p/allura/tickets/

To unsubscribe from further messages, a project admin can change settings at 
https://forge-allura.apache.org/p/allura/admin/tickets/options.  Or, if this is 
a mailing list, you can unsubscribe from the mailing list.

Reply via email to