diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/ChangeSubIndex.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/ChangeSubIndex.java index 6f0df0f7bb..9bec97853b 100644 --- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/ChangeSubIndex.java +++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/ChangeSubIndex.java @@ -97,4 +97,8 @@ public class ChangeSubIndex extends AbstractLuceneIndex } super.add(doc, values); } + + @Override + public void stop() { + } } diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneAccountIndex.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneAccountIndex.java index 78c0185fe3..59980e7721 100644 --- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneAccountIndex.java +++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneAccountIndex.java @@ -214,4 +214,8 @@ public class LuceneAccountIndex // to reindex when those change. return accountCache.get(id); } + + @Override + public void stop() { + } } diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java index b5b391e088..530566c8f8 100644 --- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java +++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java @@ -30,12 +30,11 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; @@ -96,6 +95,7 @@ import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; /** * Secondary index implementation using Apache Lucene. @@ -186,22 +186,19 @@ public class LuceneChangeIndex implements ChangeIndex { } } + @Override + public void stop() { + MoreExecutors.shutdownAndAwaitTermination( + executor, Long.MAX_VALUE, TimeUnit.SECONDS); + } + @Override public void close() { - List> closeFutures = Lists.newArrayListWithCapacity(2); - closeFutures.add(executor.submit(new Runnable() { - @Override - public void run() { - openIndex.close(); - } - })); - closeFutures.add(executor.submit(new Runnable() { - @Override - public void run() { - closedIndex.close(); - } - })); - Futures.getUnchecked(Futures.allAsList(closeFutures)); + try { + openIndex.close(); + } finally { + closedIndex.close(); + } } @Override diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/Index.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/Index.java index 533e57c4ed..d12de44f73 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/Index.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/Index.java @@ -34,6 +34,9 @@ public interface Index { /** @return the schema version used by this index. */ Schema getSchema(); + /** Stop and await termination of all executor threads */ + void stop(); + /** Close this index. */ void close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexCollection.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexCollection.java index ca0fab2bce..61c4675c4b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexCollection.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexCollection.java @@ -98,6 +98,7 @@ public abstract class IndexCollection> } for (I write : writeIndexes) { if (write != read) { + write.stop(); write.close(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/change/DummyChangeIndex.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/change/DummyChangeIndex.java index ff681061f0..78c463cbd8 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/change/DummyChangeIndex.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/change/DummyChangeIndex.java @@ -57,4 +57,8 @@ public class DummyChangeIndex implements ChangeIndex { public int getMaxLimit() { return Integer.MAX_VALUE; } + + @Override + public void stop() { + } } diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/index/change/FakeChangeIndex.java b/gerrit-server/src/test/java/com/google/gerrit/server/index/change/FakeChangeIndex.java index 43039f89cd..ea13ec4748 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/index/change/FakeChangeIndex.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/index/change/FakeChangeIndex.java @@ -108,4 +108,8 @@ public class FakeChangeIndex implements ChangeIndex { public void markReady(boolean ready) { throw new UnsupportedOperationException(); } + + @Override + public void stop() { + } }