Remove InMemoryDatabase
At this point, the only functionality provided by this class was a method to call SchemaCreator#create. Callers can use that directly instead. The real ReviewDbSchemaFactory is a simple enough stub now that it's fine to install DatabaseModule directly in tests. Change-Id: Iaa19a04bfe1fc83885c1fd58f84ca6986317e35b
This commit is contained in:
@@ -430,8 +430,8 @@ public abstract class AbstractDaemonTest {
|
||||
// contained in the instance of the group index which is available here and in tests. There are
|
||||
// two reasons:
|
||||
// 1) No group index is available in SchemaCreatorImpl when using an in-memory database.
|
||||
// (This could be fixed by using the IndexManagerOnInit in InMemoryDatabase similar as BaseInit
|
||||
// uses it.)
|
||||
// (This could be fixed by using the IndexManagerOnInit in InMemoryTestingDatabaseModule similar
|
||||
// to how BaseInit uses it.)
|
||||
// 2) During the on-init part of the server start, we use another instance of the index than
|
||||
// later on. As test indexes are non-permanent, closing an instance and opening another one
|
||||
// removes all indexed data.
|
||||
|
||||
@@ -21,28 +21,24 @@ import com.google.gerrit.extensions.events.LifecycleListener;
|
||||
import com.google.gerrit.lifecycle.LifecycleModule;
|
||||
import com.google.gerrit.metrics.DisabledMetricMaker;
|
||||
import com.google.gerrit.metrics.MetricMaker;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.config.GerritServerConfig;
|
||||
import com.google.gerrit.server.config.SitePath;
|
||||
import com.google.gerrit.server.config.SitePaths;
|
||||
import com.google.gerrit.server.config.TrackingFooters;
|
||||
import com.google.gerrit.server.config.TrackingFootersProvider;
|
||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||
import com.google.gerrit.server.schema.NotesMigrationSchemaFactory;
|
||||
import com.google.gerrit.server.schema.ReviewDbFactory;
|
||||
import com.google.gerrit.server.schema.DatabaseModule;
|
||||
import com.google.gerrit.server.schema.ReviewDbSchemaModule;
|
||||
import com.google.gerrit.testing.InMemoryDatabase;
|
||||
import com.google.gerrit.server.schema.SchemaCreator;
|
||||
import com.google.gerrit.testing.InMemoryRepositoryManager;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.gwtorm.server.OrmRuntimeException;
|
||||
import com.google.gwtorm.server.SchemaFactory;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.ProvisionException;
|
||||
import com.google.inject.TypeLiteral;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
import org.eclipse.jgit.lib.Config;
|
||||
|
||||
class InMemoryTestingDatabaseModule extends LifecycleModule {
|
||||
@@ -74,13 +70,8 @@ class InMemoryTestingDatabaseModule extends LifecycleModule {
|
||||
|
||||
bind(MetricMaker.class).to(DisabledMetricMaker.class);
|
||||
|
||||
TypeLiteral<SchemaFactory<ReviewDb>> schemaFactory =
|
||||
new TypeLiteral<SchemaFactory<ReviewDb>>() {};
|
||||
bind(schemaFactory).to(NotesMigrationSchemaFactory.class);
|
||||
bind(Key.get(schemaFactory, ReviewDbFactory.class)).to(InMemoryDatabase.class);
|
||||
bind(InMemoryDatabase.class).in(SINGLETON);
|
||||
|
||||
listener().to(CreateDatabase.class);
|
||||
install(new DatabaseModule());
|
||||
listener().to(CreateSchema.class);
|
||||
|
||||
bind(SitePaths.class);
|
||||
bind(TrackingFooters.class).toProvider(TrackingFootersProvider.class).in(SINGLETON);
|
||||
@@ -90,19 +81,19 @@ class InMemoryTestingDatabaseModule extends LifecycleModule {
|
||||
install(new SshdModule());
|
||||
}
|
||||
|
||||
static class CreateDatabase implements LifecycleListener {
|
||||
private final InMemoryDatabase mem;
|
||||
static class CreateSchema implements LifecycleListener {
|
||||
private final SchemaCreator schemaCreator;
|
||||
|
||||
@Inject
|
||||
CreateDatabase(InMemoryDatabase mem) {
|
||||
this.mem = mem;
|
||||
CreateSchema(SchemaCreator schemaCreator) {
|
||||
this.schemaCreator = schemaCreator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
try {
|
||||
mem.create();
|
||||
} catch (OrmException e) {
|
||||
schemaCreator.ensureCreated();
|
||||
} catch (OrmException | IOException | ConfigInvalidException e) {
|
||||
throw new OrmRuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
// Copyright (C) 2009 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.testing;
|
||||
|
||||
import com.google.gerrit.pgm.init.index.elasticsearch.ElasticIndexModuleOnInit;
|
||||
import com.google.gerrit.pgm.init.index.lucene.LuceneIndexModuleOnInit;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.config.AllProjectsName;
|
||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||
import com.google.gerrit.server.index.IndexModule;
|
||||
import com.google.gerrit.server.schema.SchemaCreator;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.gwtorm.server.SchemaFactory;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.TypeLiteral;
|
||||
import java.io.IOException;
|
||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
import org.eclipse.jgit.errors.RepositoryNotFoundException;
|
||||
|
||||
/** Husk of an in-memory ReviewDb implementation. */
|
||||
// TODO(dborowitz): Inline callers to get their own darn schemaCreator.
|
||||
public class InMemoryDatabase implements SchemaFactory<ReviewDb> {
|
||||
private final GitRepositoryManager repoManager;
|
||||
private final AllProjectsName allProjectsName;
|
||||
private final SchemaCreator schemaCreator;
|
||||
private final SchemaFactory<ReviewDb> schemaFactory;
|
||||
|
||||
@Inject
|
||||
InMemoryDatabase(Injector injector) {
|
||||
Injector childInjector =
|
||||
injector.createChildInjector(
|
||||
new AbstractModule() {
|
||||
@Override
|
||||
protected void configure() {
|
||||
switch (IndexModule.getIndexType(injector)) {
|
||||
case LUCENE:
|
||||
install(new LuceneIndexModuleOnInit());
|
||||
break;
|
||||
case ELASTICSEARCH:
|
||||
install(new ElasticIndexModuleOnInit());
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("unsupported index.type");
|
||||
}
|
||||
}
|
||||
});
|
||||
this.repoManager = childInjector.getInstance(GitRepositoryManager.class);
|
||||
this.allProjectsName = childInjector.getInstance(AllProjectsName.class);
|
||||
this.schemaCreator = childInjector.getInstance(SchemaCreator.class);
|
||||
this.schemaFactory =
|
||||
childInjector.getInstance(Key.get(new TypeLiteral<SchemaFactory<ReviewDb>>() {}));
|
||||
}
|
||||
|
||||
InMemoryDatabase(
|
||||
GitRepositoryManager repoManager,
|
||||
AllProjectsName allProjectsName,
|
||||
SchemaCreator schemaCreator,
|
||||
SchemaFactory<ReviewDb> schemaFactory) {
|
||||
this.repoManager = repoManager;
|
||||
this.allProjectsName = allProjectsName;
|
||||
this.schemaCreator = schemaCreator;
|
||||
this.schemaFactory = schemaFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReviewDb open() throws OrmException {
|
||||
return schemaFactory.open();
|
||||
}
|
||||
|
||||
/** Ensure the database schema has been created and initialized. */
|
||||
public InMemoryDatabase create() throws OrmException {
|
||||
try {
|
||||
try {
|
||||
repoManager.openRepository(allProjectsName).close();
|
||||
} catch (RepositoryNotFoundException e) {
|
||||
schemaCreator.create();
|
||||
}
|
||||
} catch (IOException | ConfigInvalidException e) {
|
||||
throw new OrmException("Cannot create in-memory database", e);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -28,7 +28,6 @@ import com.google.gerrit.index.SchemaDefinitions;
|
||||
import com.google.gerrit.index.project.ProjectSchemaDefinitions;
|
||||
import com.google.gerrit.metrics.DisabledMetricMaker;
|
||||
import com.google.gerrit.metrics.MetricMaker;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.FanOutExecutor;
|
||||
import com.google.gerrit.server.GerritPersonIdent;
|
||||
import com.google.gerrit.server.GerritPersonIdentProvider;
|
||||
@@ -78,26 +77,22 @@ import com.google.gerrit.server.permissions.DefaultPermissionBackendModule;
|
||||
import com.google.gerrit.server.plugins.ServerInformationImpl;
|
||||
import com.google.gerrit.server.project.DefaultProjectNameLockManager;
|
||||
import com.google.gerrit.server.restapi.RestApiModule;
|
||||
import com.google.gerrit.server.schema.DatabaseModule;
|
||||
import com.google.gerrit.server.schema.InMemoryAccountPatchReviewStore;
|
||||
import com.google.gerrit.server.schema.NotesMigrationSchemaFactory;
|
||||
import com.google.gerrit.server.schema.ReviewDbFactory;
|
||||
import com.google.gerrit.server.schema.SchemaCreator;
|
||||
import com.google.gerrit.server.schema.SchemaCreatorImpl;
|
||||
import com.google.gerrit.server.securestore.DefaultSecureStore;
|
||||
import com.google.gerrit.server.securestore.SecureStore;
|
||||
import com.google.gerrit.server.ssh.NoSshKeyCache;
|
||||
import com.google.gerrit.server.submit.LocalMergeSuperSetComputation;
|
||||
import com.google.gwtorm.server.SchemaFactory;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.Module;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.Provides;
|
||||
import com.google.inject.ProvisionException;
|
||||
import com.google.inject.Singleton;
|
||||
import com.google.inject.TypeLiteral;
|
||||
import com.google.inject.servlet.RequestScoped;
|
||||
import com.google.inject.util.Providers;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
@@ -192,11 +187,7 @@ public class InMemoryModule extends FactoryModule {
|
||||
.toInstance(MoreExecutors.newDirectExecutorService());
|
||||
bind(SecureStore.class).to(DefaultSecureStore.class);
|
||||
|
||||
TypeLiteral<SchemaFactory<ReviewDb>> schemaFactory =
|
||||
new TypeLiteral<SchemaFactory<ReviewDb>>() {};
|
||||
bind(schemaFactory).to(NotesMigrationSchemaFactory.class);
|
||||
bind(Key.get(schemaFactory, ReviewDbFactory.class)).to(InMemoryDatabase.class);
|
||||
|
||||
install(new DatabaseModule());
|
||||
install(new InMemorySchemaModule());
|
||||
install(NoSshKeyCache.module());
|
||||
install(new GerritInstanceNameModule());
|
||||
@@ -306,16 +297,6 @@ public class InMemoryModule extends FactoryModule {
|
||||
return queues.createQueue(2, "FanOut");
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
InMemoryDatabase getInMemoryDatabase(
|
||||
GitRepositoryManager repoManager,
|
||||
AllProjectsName allProjectsName,
|
||||
SchemaCreator schemaCreator,
|
||||
SchemaFactory<ReviewDb> schemaFactory) {
|
||||
return new InMemoryDatabase(repoManager, allProjectsName, schemaCreator, schemaFactory);
|
||||
}
|
||||
|
||||
private Module luceneIndexModule() {
|
||||
return indexModule("com.google.gerrit.lucene.LuceneIndexModule");
|
||||
}
|
||||
|
||||
@@ -32,7 +32,6 @@ import com.google.gerrit.reviewdb.client.Account;
|
||||
import com.google.gerrit.reviewdb.client.Change;
|
||||
import com.google.gerrit.reviewdb.client.LabelId;
|
||||
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.IdentifiedUser;
|
||||
import com.google.gerrit.server.account.AccountManager;
|
||||
@@ -49,7 +48,6 @@ import com.google.gerrit.server.util.RequestContext;
|
||||
import com.google.gerrit.server.util.ThreadLocalRequestContext;
|
||||
import com.google.gerrit.server.util.time.TimeUtil;
|
||||
import com.google.gerrit.testing.GerritBaseTests;
|
||||
import com.google.gerrit.testing.InMemoryDatabase;
|
||||
import com.google.gerrit.testing.InMemoryModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Inject;
|
||||
@@ -66,7 +64,6 @@ public class LabelNormalizerTest extends GerritBaseTests {
|
||||
@Inject private AllProjectsName allProjects;
|
||||
@Inject private GitRepositoryManager repoManager;
|
||||
@Inject private IdentifiedUser.GenericFactory userFactory;
|
||||
@Inject private InMemoryDatabase schemaFactory;
|
||||
@Inject private LabelNormalizer norm;
|
||||
@Inject private MetaDataUpdate.User metaDataUpdateFactory;
|
||||
@Inject private ProjectCache projectCache;
|
||||
@@ -77,7 +74,6 @@ public class LabelNormalizerTest extends GerritBaseTests {
|
||||
@Inject private GerritApi gApi;
|
||||
|
||||
private LifecycleManager lifecycle;
|
||||
private ReviewDb db;
|
||||
private Account.Id userId;
|
||||
private IdentifiedUser user;
|
||||
private Change change;
|
||||
@@ -137,9 +133,6 @@ public class LabelNormalizerTest extends GerritBaseTests {
|
||||
lifecycle.stop();
|
||||
}
|
||||
requestContext.setContext(null);
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -26,7 +26,6 @@ import com.google.gerrit.server.config.AllProjectsName;
|
||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||
import com.google.gerrit.server.project.ProjectConfig;
|
||||
import com.google.gerrit.testing.GerritBaseTests;
|
||||
import com.google.gerrit.testing.InMemoryDatabase;
|
||||
import com.google.gerrit.testing.InMemoryModule;
|
||||
import com.google.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
@@ -42,17 +41,17 @@ public class SchemaCreatorImplTest extends GerritBaseTests {
|
||||
|
||||
@Inject private GitRepositoryManager repoManager;
|
||||
|
||||
@Inject private InMemoryDatabase inMemoryDatabase;
|
||||
@Inject private SchemaCreator schemaCreator;
|
||||
|
||||
@Inject private ProjectConfig.Factory projectConfigFactory;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
new InMemoryModule().inject(this);
|
||||
schemaCreator.create();
|
||||
}
|
||||
|
||||
private LabelTypes getLabelTypes() throws Exception {
|
||||
inMemoryDatabase.create();
|
||||
ProjectConfig c = projectConfigFactory.create(allProjects);
|
||||
try (Repository repo = repoManager.openRepository(allProjects)) {
|
||||
c.load(repo);
|
||||
|
||||
Reference in New Issue
Block a user