From 6ca35faf9d392a994661e06fe65d3c32ec023496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Ar=C3=A8s?= Date: Wed, 11 Apr 2018 09:12:37 -0400 Subject: [PATCH] Remove duplication between both index modules Change-Id: I16d866bb1b4c5d7887a29827cbd71b7911d141e1 --- .../elasticsearch/ElasticIndexModule.java | 60 ++++--------- .../gerrit/lucene/LuceneIndexModule.java | 67 +++++--------- .../server/index/AbstractIndexModule.java | 88 +++++++++++++++++++ 3 files changed, 127 insertions(+), 88 deletions(-) create mode 100644 gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractIndexModule.java diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexModule.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexModule.java index 9573fd5689..b98a4145b0 100644 --- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexModule.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexModule.java @@ -14,24 +14,14 @@ package com.google.gerrit.elasticsearch; -import com.google.gerrit.lifecycle.LifecycleModule; -import com.google.gerrit.server.config.GerritServerConfig; +import com.google.gerrit.server.index.AbstractIndexModule; import com.google.gerrit.server.index.AbstractVersionManager; -import com.google.gerrit.server.index.IndexConfig; -import com.google.gerrit.server.index.IndexModule; -import com.google.gerrit.server.index.SingleVersionModule; import com.google.gerrit.server.index.account.AccountIndex; import com.google.gerrit.server.index.change.ChangeIndex; import com.google.gerrit.server.index.group.GroupIndex; -import com.google.inject.Provides; -import com.google.inject.Singleton; -import com.google.inject.assistedinject.FactoryModuleBuilder; import java.util.Map; -import org.eclipse.jgit.lib.Config; -public class ElasticIndexModule extends LifecycleModule { - private final int threads; - private final Map singleVersions; +public class ElasticIndexModule extends AbstractIndexModule { public static ElasticIndexModule singleVersionWithExplicitVersions( Map versions, int threads) { @@ -43,44 +33,26 @@ public class ElasticIndexModule extends LifecycleModule { } private ElasticIndexModule(Map singleVersions, int threads) { - this.singleVersions = singleVersions; - this.threads = threads; + super(singleVersions, threads); } @Override - protected void configure() { - install( - new FactoryModuleBuilder() - .implement(AccountIndex.class, ElasticAccountIndex.class) - .build(AccountIndex.Factory.class)); - install( - new FactoryModuleBuilder() - .implement(ChangeIndex.class, ElasticChangeIndex.class) - .build(ChangeIndex.Factory.class)); - install( - new FactoryModuleBuilder() - .implement(GroupIndex.class, ElasticGroupIndex.class) - .build(GroupIndex.Factory.class)); - - install(new IndexModule(threads)); - if (singleVersions == null) { - install(new MultiVersionModule()); - } else { - install(new SingleVersionModule(singleVersions)); - } + protected Class getAccountIndex() { + return ElasticAccountIndex.class; } - @Provides - @Singleton - IndexConfig getIndexConfig(@GerritServerConfig Config cfg) { - return IndexConfig.fromConfig(cfg); + @Override + protected Class getChangeIndex() { + return ElasticChangeIndex.class; } - private static class MultiVersionModule extends LifecycleModule { - @Override - public void configure() { - bind(AbstractVersionManager.class).to(ElasticVersionManager.class); - listener().to(ElasticVersionManager.class); - } + @Override + protected Class getGroupIndex() { + return ElasticGroupIndex.class; + } + + @Override + protected Class getVersionManager() { + return ElasticVersionManager.class; } } diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneIndexModule.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneIndexModule.java index 5e857908cd..a78504f59b 100644 --- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneIndexModule.java +++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneIndexModule.java @@ -15,23 +15,18 @@ package com.google.gerrit.lucene; import com.google.common.collect.ImmutableMap; -import com.google.gerrit.lifecycle.LifecycleModule; import com.google.gerrit.server.config.GerritServerConfig; +import com.google.gerrit.server.index.AbstractIndexModule; import com.google.gerrit.server.index.AbstractVersionManager; import com.google.gerrit.server.index.IndexConfig; -import com.google.gerrit.server.index.IndexModule; -import com.google.gerrit.server.index.SingleVersionModule; import com.google.gerrit.server.index.account.AccountIndex; import com.google.gerrit.server.index.change.ChangeIndex; import com.google.gerrit.server.index.group.GroupIndex; -import com.google.inject.Provides; -import com.google.inject.Singleton; -import com.google.inject.assistedinject.FactoryModuleBuilder; import java.util.Map; import org.apache.lucene.search.BooleanQuery; import org.eclipse.jgit.lib.Config; -public class LuceneIndexModule extends LifecycleModule { +public class LuceneIndexModule extends AbstractIndexModule { public static LuceneIndexModule singleVersionAllLatest(int threads) { return new LuceneIndexModule(ImmutableMap.of(), threads); } @@ -49,50 +44,34 @@ public class LuceneIndexModule extends LifecycleModule { return cfg.getBoolean("index", "lucene", "testInmemory", false); } - private final int threads; - private final Map singleVersions; - private LuceneIndexModule(Map singleVersions, int threads) { - this.singleVersions = singleVersions; - this.threads = threads; + super(singleVersions, threads); } @Override - protected void configure() { - install( - new FactoryModuleBuilder() - .implement(AccountIndex.class, LuceneAccountIndex.class) - .build(AccountIndex.Factory.class)); - install( - new FactoryModuleBuilder() - .implement(ChangeIndex.class, LuceneChangeIndex.class) - .build(ChangeIndex.Factory.class)); - install( - new FactoryModuleBuilder() - .implement(GroupIndex.class, LuceneGroupIndex.class) - .build(GroupIndex.Factory.class)); - - install(new IndexModule(threads)); - if (singleVersions == null) { - install(new MultiVersionModule()); - } else { - install(new SingleVersionModule(singleVersions)); - } + protected Class getAccountIndex() { + return LuceneAccountIndex.class; } - @Provides - @Singleton - IndexConfig getIndexConfig(@GerritServerConfig Config cfg) { + @Override + protected Class getChangeIndex() { + return LuceneChangeIndex.class; + } + + @Override + protected Class getGroupIndex() { + return LuceneGroupIndex.class; + } + + @Override + protected Class getVersionManager() { + return LuceneVersionManager.class; + } + + @Override + protected IndexConfig getIndexConfig(@GerritServerConfig Config cfg) { BooleanQuery.setMaxClauseCount( cfg.getInt("index", "maxTerms", BooleanQuery.getMaxClauseCount())); - return IndexConfig.fromConfig(cfg); - } - - private static class MultiVersionModule extends LifecycleModule { - @Override - public void configure() { - bind(AbstractVersionManager.class).to(LuceneVersionManager.class); - listener().to(LuceneVersionManager.class); - } + return super.getIndexConfig(cfg); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractIndexModule.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractIndexModule.java new file mode 100644 index 0000000000..ec7804369c --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractIndexModule.java @@ -0,0 +1,88 @@ +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.index; + +import com.google.gerrit.lifecycle.LifecycleModule; +import com.google.gerrit.server.config.GerritServerConfig; +import com.google.gerrit.server.index.account.AccountIndex; +import com.google.gerrit.server.index.change.ChangeIndex; +import com.google.gerrit.server.index.group.GroupIndex; +import com.google.inject.AbstractModule; +import com.google.inject.Provides; +import com.google.inject.Singleton; +import com.google.inject.assistedinject.FactoryModuleBuilder; +import java.util.Map; +import org.eclipse.jgit.lib.Config; + +public abstract class AbstractIndexModule extends AbstractModule { + + private final int threads; + private final Map singleVersions; + + protected AbstractIndexModule(Map singleVersions, int threads) { + this.singleVersions = singleVersions; + this.threads = threads; + } + + @Override + protected void configure() { + install( + new FactoryModuleBuilder() + .implement(AccountIndex.class, getAccountIndex()) + .build(AccountIndex.Factory.class)); + install( + new FactoryModuleBuilder() + .implement(ChangeIndex.class, getChangeIndex()) + .build(ChangeIndex.Factory.class)); + install( + new FactoryModuleBuilder() + .implement(GroupIndex.class, getGroupIndex()) + .build(GroupIndex.Factory.class)); + + install(new IndexModule(threads)); + if (singleVersions == null) { + install(new MultiVersionModule()); + } else { + install(new SingleVersionModule(singleVersions)); + } + } + + protected abstract Class getAccountIndex(); + + protected abstract Class getChangeIndex(); + + protected abstract Class getGroupIndex(); + + protected abstract Class getVersionManager(); + + @Provides + @Singleton + IndexConfig provideIndexConfig(@GerritServerConfig Config cfg) { + return getIndexConfig(cfg); + } + + protected IndexConfig getIndexConfig(@GerritServerConfig Config cfg) { + return IndexConfig.fromConfig(cfg); + } + + private class MultiVersionModule extends LifecycleModule { + @Override + public void configure() { + Class versionManagerClass = getVersionManager(); + bind(AbstractVersionManager.class).to(versionManagerClass); + listener().to(versionManagerClass); + } + } +}