#2891 closed defect (fixed)
Timeline performance broken in [2990]
| Reported by: | Owned by: | Christian Boos | |
|---|---|---|---|
| Priority: | highest | Milestone: | 0.10.1 | 
| Component: | timeline | Version: | devel | 
| Severity: | normal | Keywords: | timeline performance | 
| Cc: | manuzhai@…, m@… | Branch: | |
| Release Notes: | |||
| API Changes: | |||
| Internal Changes: | |||
Description
As discussed on the mailing list, I have found that changeset [2990] has resulted in a more than tenfold increase in the amount of time it takes to render the timeline. It only affects changeset items, which is consistent with the nature of the changeset in question.
Attachments (0)
Change History (12)
comment:1 by , 20 years ago
| Milestone: | → 0.10 | 
|---|---|
| Owner: | changed from to | 
| Status: | new → assigned | 
comment:2 by , 20 years ago
| Priority: | normal → highest | 
|---|
comment:3 by , 20 years ago
| Cc: | added | 
|---|
comment:4 by , 20 years ago
The patch posted appears to fix the problem. I'm now running on trunk + the patch and the timeline is working as fast as it does normall.
Thanks!
follow-up: 8 comment:5 by , 20 years ago
| Resolution: | → fixed | 
|---|---|
| Status: | assigned → closed | 
Ok, so I applied the patch in r3026. 
I'll look for a better fix later (i.e. making get_repository() cheap).
comment:6 by , 20 years ago
IIUC correctly, this change means that the repository is no longer synced before a changeset link is encountered in wiki text. So you'll get a ”missing changeset” link for a changeset that isn't yet in the cache.
comment:7 by , 20 years ago
You're right, but this is simply the pre-2990 behavior. I'm currently writing a mail for Trac-Dev in order to discuss this, among other things.
comment:8 by , 19 years ago
Replying to cboos:
… I'll look for a better fix later (i.e. making
get_repository()cheap).
As matt reintroduced the usage of get_repository in r3971, I added a (per-request) cache of Repository objects in r3980.
This will be later refined to allow for multiple repositories (see VcRefactoring#SupportforMultipleRepositories).
comment:9 by , 19 years ago
| Cc: | added | 
|---|---|
| Milestone: | 0.10 | 
| Resolution: | fixed | 
| Status: | closed → reopened | 
| Version: | 0.9.4 → devel | 
I am reopening this ticket because the timeline is dead slow. I can't get the timeline of even small projects to display. It nearly killed my webserver, too.
r3994 is my version.
comment:11 by , 19 years ago
| Resolution: | → fixed | 
|---|---|
| Status: | reopened → closed | 
Hm, this was related to a DNS problem. But why?
comment:12 by , 19 years ago
| Milestone: | → 0.10.1 | 
|---|



  
Please try out the following patch:
Index: trac/versioncontrol/web_ui/changeset.py =================================================================== --- trac/versioncontrol/web_ui/changeset.py (revision 3015) +++ trac/versioncontrol/web_ui/changeset.py (working copy) @@ -651,16 +651,17 @@ rev, path = chgset[:sep], chgset[sep:] else: rev, path = chgset, None - repos = self.env.get_repository() - try: - chgset = repos.get_changeset(rev) + cursor = formatter.db.cursor() + cursor.execute('SELECT message FROM revision WHERE rev=%s', (rev,)) + row = cursor.fetchone() + if row: return '<a class="changeset" title="%s" href="%s">%s</a>' \ - % (util.escape(util.shorten_line(chgset.message)), + % (util.escape(util.shorten_line(row[0])), formatter.href.changeset(rev, path), label) - except TracError, e: - return '<a class="missing changeset" title="%s" href="%s"' \ + else: + return '<a class="missing changeset" href="%s"' \ ' rel="nofollow">%s</a>' \ - % (str(e), formatter.href.changeset(rev, path), label) + % (formatter.href.changeset(rev, path), label) def _format_diff_link(self, formatter, ns, params, label): def pathrev(path):