Mercurial > kallithea
changeset 3276:eaa887c6c0af beta
added recursion limit for stats gathering, sometimes it did >1000 loops which lead to python throwing max recursion depth exceeded error.
ref #642
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 30 Jan 2013 22:30:52 +0100 |
parents | f239029b9f7e |
children | 5440ea1d0628 |
files | rhodecode/controllers/summary.py rhodecode/lib/celerylib/tasks.py |
diffstat | 2 files changed, 10 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/controllers/summary.py Wed Jan 30 22:10:07 2013 +0100 +++ b/rhodecode/controllers/summary.py Wed Jan 30 22:30:52 2013 +0100 @@ -140,7 +140,9 @@ if dbrepo.enable_statistics: c.show_stats = True c.no_data_msg = _('No data loaded yet') - run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, ts_max_y) + recurse_limit = 500 # don't recurse more than 500 times when parsing + run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, + ts_max_y, recurse_limit) else: c.show_stats = False c.no_data_msg = _('Statistics are disabled for this repository')
--- a/rhodecode/lib/celerylib/tasks.py Wed Jan 30 22:10:07 2013 +0100 +++ b/rhodecode/lib/celerylib/tasks.py Wed Jan 30 22:30:52 2013 +0100 @@ -87,7 +87,7 @@ @task(ignore_result=True) @dbsession -def get_commits_stats(repo_name, ts_min_y, ts_max_y): +def get_commits_stats(repo_name, ts_min_y, ts_max_y, recurse_limit=100): log = get_logger(get_commits_stats) DBS = get_session() lockkey = __get_lockkey('get_commits_stats', repo_name, ts_min_y, @@ -240,8 +240,12 @@ lock.release() # execute another task if celery is enabled - if len(repo.revisions) > 1 and CELERY_ON: - run_task(get_commits_stats, repo_name, ts_min_y, ts_max_y) + if len(repo.revisions) > 1 and CELERY_ON and recurse_limit > 0: + recurse_limit -= 1 + run_task(get_commits_stats, repo_name, ts_min_y, ts_max_y, + recurse_limit) + if recurse_limit <= 0: + log.debug('Breaking recursive mode due to reach of recurse limit') return True except LockHeld: log.info('LockHeld')