diff options
author | James Moger <james.moger@gitblit.com> | 2013-06-24 14:04:46 -0400 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2013-06-24 14:04:46 -0400 |
commit | 3c4ce1d366641158927cee8b4e47191ed681b524 (patch) | |
tree | 741719f8210067c77d6daad6abbfe3a5b77af801 /src/main/java/com/gitblit/GitBlit.java | |
parent | 5abe3350a38b3cdfc28ac2839860d28b88f2306a (diff) | |
download | gitblit-3c4ce1d366641158927cee8b4e47191ed681b524.tar.gz gitblit-3c4ce1d366641158927cee8b4e47191ed681b524.zip |
Improve performance of cache filling
Diffstat (limited to 'src/main/java/com/gitblit/GitBlit.java')
-rw-r--r-- | src/main/java/com/gitblit/GitBlit.java | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java index 6fd168a6..eabaa3f2 100644 --- a/src/main/java/com/gitblit/GitBlit.java +++ b/src/main/java/com/gitblit/GitBlit.java @@ -102,6 +102,7 @@ import com.gitblit.models.ForkModel; import com.gitblit.models.GitClientApplication; import com.gitblit.models.Metric; import com.gitblit.models.ProjectModel; +import com.gitblit.models.RefModel; import com.gitblit.models.RegistrantAccessPermission; import com.gitblit.models.RepositoryModel; import com.gitblit.models.RepositoryUrl; @@ -3402,9 +3403,8 @@ public class GitBlit implements ServletContextListener { configureJGit(); configureFanout(); configureGitDaemon(); - - CommitCache.instance().setCacheDays(settings.getInteger(Keys.web.activityCacheDays, 14)); - + configureCommitCache(); + ContainerUtils.CVE_2007_0450.test(); } @@ -3514,6 +3514,42 @@ public class GitBlit implements ServletContextListener { } } + protected void configureCommitCache() { + int daysToCache = settings.getInteger(Keys.web.activityCacheDays, 14); + if (daysToCache <= 0) { + logger.info("commit cache disabled"); + } else { + long start = System.nanoTime(); + long repoCount = 0; + long commitCount = 0; + logger.info(MessageFormat.format("preparing {0} day commit cache. please wait...", daysToCache)); + CommitCache.instance().setCacheDays(daysToCache); + Date cutoff = CommitCache.instance().getCutoffDate(); + for (String repositoryName : getRepositoryList()) { + RepositoryModel model = getRepositoryModel(repositoryName); + if (model.hasCommits && model.lastChange.after(cutoff)) { + repoCount++; + Repository repository = getRepository(repositoryName); + for (RefModel ref : JGitUtils.getLocalBranches(repository, true, -1)) { + if (!ref.getDate().after(cutoff)) { + // branch not recently updated + continue; + } + List<?> commits = CommitCache.instance().getCommits(repositoryName, repository, ref.getName()); + if (commits.size() > 0) { + logger.info(MessageFormat.format(" cached {0} commits for {1}:{2}", + commits.size(), repositoryName, ref.getName())); + commitCount += commits.size(); + } + } + repository.close(); + } + } + logger.info(MessageFormat.format("built {0} day commit cache of {1} commits across {2} repositories in {3} msecs", + daysToCache, commitCount, repoCount, TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start))); + } + } + protected final Logger getLogger() { return logger; } |