From dad8b4b5dc2ad22556968b878c466a59ba80933a Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 31 Oct 2012 16:32:41 -0400
Subject: [PATCH] Don't even bother running Lucene indexer if we are GCing anything

---
 src/com/gitblit/GitBlit.java        |    8 ++++++++
 src/com/gitblit/GCExecutor.java     |   10 ++++++++++
 src/com/gitblit/LuceneExecutor.java |    5 +++++
 3 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/src/com/gitblit/GCExecutor.java b/src/com/gitblit/GCExecutor.java
index 243cbb9..312baf5 100644
--- a/src/com/gitblit/GCExecutor.java
+++ b/src/com/gitblit/GCExecutor.java
@@ -53,6 +53,8 @@
 
 	private final IStoredSettings settings;
 	
+	private AtomicBoolean running = new AtomicBoolean(false);
+	
 	private AtomicBoolean forceClose = new AtomicBoolean(false);
 	
 	private final Map<String, GCStatus> gcCache = new ConcurrentHashMap<String, GCStatus>();
@@ -68,6 +70,10 @@
 	 */
 	public boolean isReady() {
 		return settings.getBoolean(Keys.git.enableGarbageCollection, false);
+	}
+	
+	public boolean isRunning() {
+		return running.get();
 	}
 	
 	public boolean lock(String repositoryName) {
@@ -121,6 +127,8 @@
 		if (!isReady()) {
 			return;
 		}
+		
+		running.set(true);		
 		Date now = new Date();
 
 		for (String repositoryName : GitBlit.self().getRepositoryList()) {
@@ -205,6 +213,8 @@
 				logger.debug(MessageFormat.format("GCExecutor released GC lock for {0}", repositoryName));
 			}
 		}
+		
+		running.set(false);
 	}
 	
 	private boolean isRepositoryIdle(FileRepository repository) {
diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index e9b5e73..8355c03 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/src/com/gitblit/GitBlit.java
@@ -2907,6 +2907,14 @@
 	}
 	
 	/**
+	 * 
+	 * @return true if we are running the gc executor
+	 */
+	public boolean isCollectingGarbage() {
+		return gcExecutor.isRunning();
+	}
+	
+	/**
 	 * Returns true if Gitblit is actively collecting garbage in this repository.
 	 * 
 	 * @param repositoryName
diff --git a/src/com/gitblit/LuceneExecutor.java b/src/com/gitblit/LuceneExecutor.java
index dffd478..0e4baae 100644
--- a/src/com/gitblit/LuceneExecutor.java
+++ b/src/com/gitblit/LuceneExecutor.java
@@ -167,6 +167,11 @@
 		String exts = storedSettings.getString(Keys.web.luceneIgnoreExtensions, luceneIgnoreExtensions);
 		excludedExtensions = new TreeSet<String>(StringUtils.getStringsFromValue(exts));
 
+		if (GitBlit.self().isCollectingGarbage()) {
+			// busy collecting garbage, try again later
+			return;
+		}
+		
 		for (String repositoryName: GitBlit.self().getRepositoryList()) {
 			RepositoryModel model = GitBlit.self().getRepositoryModel(repositoryName);
 			if (model.hasCommits && !ArrayUtils.isEmpty(model.indexedBranches)) {

--
Gitblit v1.9.1