From c9effe97ee0ab86b8854464f1ec7bed3c01ca871 Mon Sep 17 00:00:00 2001 From: Patrick Hiesel Date: Mon, 12 Nov 2018 18:29:21 +0100 Subject: [PATCH] Reindex all projects when initializing the site Bug: Issue 9661 Change-Id: Ic7a82abfab19a3ec05f93a26e2f7cddfe21dacf0 --- .../project/ProjectSchemaDefinitions.java | 4 +- java/com/google/gerrit/pgm/BUILD | 1 + java/com/google/gerrit/pgm/Init.java | 28 +++++++++- .../com/google/gerrit/acceptance/pgm/BUILD | 2 + .../google/gerrit/acceptance/pgm/InitIT.java | 51 +++++++++++++++++++ 5 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 javatests/com/google/gerrit/acceptance/pgm/InitIT.java diff --git a/java/com/google/gerrit/index/project/ProjectSchemaDefinitions.java b/java/com/google/gerrit/index/project/ProjectSchemaDefinitions.java index 6229041067..cefc13c475 100644 --- a/java/com/google/gerrit/index/project/ProjectSchemaDefinitions.java +++ b/java/com/google/gerrit/index/project/ProjectSchemaDefinitions.java @@ -38,7 +38,9 @@ public class ProjectSchemaDefinitions extends SchemaDefinitions { public static final ProjectSchemaDefinitions INSTANCE = new ProjectSchemaDefinitions(); + public static final String NAME = "projects"; + private ProjectSchemaDefinitions() { - super("projects", ProjectData.class); + super(NAME, ProjectData.class); } } diff --git a/java/com/google/gerrit/pgm/BUILD b/java/com/google/gerrit/pgm/BUILD index b34aec0329..0bebad4af5 100644 --- a/java/com/google/gerrit/pgm/BUILD +++ b/java/com/google/gerrit/pgm/BUILD @@ -24,6 +24,7 @@ java_library( "//java/com/google/gerrit/httpd/auth/oauth", "//java/com/google/gerrit/httpd/auth/openid", "//java/com/google/gerrit/index", + "//java/com/google/gerrit/index/project", "//java/com/google/gerrit/launcher", "//java/com/google/gerrit/lifecycle", "//java/com/google/gerrit/lucene", diff --git a/java/com/google/gerrit/pgm/Init.java b/java/com/google/gerrit/pgm/Init.java index a93e64cc4a..1739de9901 100644 --- a/java/com/google/gerrit/pgm/Init.java +++ b/java/com/google/gerrit/pgm/Init.java @@ -14,11 +14,15 @@ package com.google.gerrit.pgm; +import static java.util.stream.Collectors.joining; + import com.google.common.base.Joiner; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; import com.google.gerrit.common.IoUtil; import com.google.gerrit.common.PageLinks; import com.google.gerrit.common.PluginData; +import com.google.gerrit.index.project.ProjectSchemaDefinitions; import com.google.gerrit.pgm.init.BaseInit; import com.google.gerrit.pgm.init.Browser; import com.google.gerrit.pgm.init.InitPlugins; @@ -55,6 +59,9 @@ public class Init extends BaseInit { @Option(name = "--no-auto-start", usage = "Don't automatically start daemon after init") private boolean noAutoStart; + @Option(name = "--no-reindex", usage = "Don't automatically reindex any entities") + private boolean noReindex; + @Option(name = "--skip-plugins", usage = "Don't install plugins") private boolean skipPlugins; @@ -137,6 +144,7 @@ public class Init extends BaseInit { }); modules.add(new GerritServerConfigModule()); Guice.createInjector(modules).injectMembers(this); + reindexProjects(); start(run); } @@ -194,7 +202,6 @@ public class Init extends BaseInit { if (run.flags.autoStart) { if (HostPlatform.isWin32()) { System.err.println("Automatic startup not supported on Win32."); - } else { startDaemon(run); if (!run.ui.isBatch()) { @@ -249,6 +256,25 @@ public class Init extends BaseInit { } } + private void reindexProjects() throws Exception { + if (noReindex) { + return; + } + // Reindex all projects, so that we bootstrap the project index for new installations + List reindexArgs = + ImmutableList.of( + "--site-path", + getSitePath().toString(), + "--threads", + Integer.toString(1), + "--index", + ProjectSchemaDefinitions.NAME); + getConsoleUI().message("Init complete, reindexing projects with:"); + getConsoleUI().message(" reindex " + reindexArgs.stream().collect(joining(" "))); + Reindex reindexPgm = new Reindex(); + reindexPgm.main(reindexArgs.stream().toArray(String[]::new)); + } + private static boolean nullOrEmpty(List list) { return list == null || list.isEmpty(); } diff --git a/javatests/com/google/gerrit/acceptance/pgm/BUILD b/javatests/com/google/gerrit/acceptance/pgm/BUILD index a91b81582b..e0d2f86da5 100644 --- a/javatests/com/google/gerrit/acceptance/pgm/BUILD +++ b/javatests/com/google/gerrit/acceptance/pgm/BUILD @@ -13,6 +13,8 @@ acceptance_tests( vm_args = ["-Xmx512m"], deps = [ ":util", + "//java/com/google/gerrit/index", + "//java/com/google/gerrit/index/project", "//java/com/google/gerrit/server/schema", ], ) diff --git a/javatests/com/google/gerrit/acceptance/pgm/InitIT.java b/javatests/com/google/gerrit/acceptance/pgm/InitIT.java new file mode 100644 index 0000000000..a573e35b11 --- /dev/null +++ b/javatests/com/google/gerrit/acceptance/pgm/InitIT.java @@ -0,0 +1,51 @@ +// 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.acceptance.pgm; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.collect.ImmutableSet; +import com.google.gerrit.acceptance.NoHttpd; +import com.google.gerrit.acceptance.StandaloneSiteTest; +import com.google.gerrit.index.IndexConfig; +import com.google.gerrit.index.QueryOptions; +import com.google.gerrit.index.project.ProjectData; +import com.google.gerrit.index.project.ProjectIndexCollection; +import com.google.gerrit.reviewdb.client.Project; +import com.google.gerrit.server.config.AllProjectsName; +import com.google.gerrit.server.config.AllUsersName; +import java.util.Optional; +import org.junit.Test; + +@NoHttpd +public class InitIT extends StandaloneSiteTest { + + @Test + public void indexesAllProjectsAndAllUsers() throws Exception { + runGerrit("init", "-d", sitePaths.site_path.toString(), "--show-stack-trace"); + try (ServerContext ctx = startServer()) { + ProjectIndexCollection projectIndex = + ctx.getInjector().getInstance(ProjectIndexCollection.class); + Project.NameKey allProjects = ctx.getInjector().getInstance(AllProjectsName.class); + Project.NameKey allUsers = ctx.getInjector().getInstance(AllUsersName.class); + QueryOptions opts = + QueryOptions.create(IndexConfig.createDefault(), 0, 1, ImmutableSet.of("name")); + Optional allProjectsData = projectIndex.getSearchIndex().get(allProjects, opts); + assertThat(allProjectsData.isPresent()).isTrue(); + Optional allUsersData = projectIndex.getSearchIndex().get(allUsers, opts); + assertThat(allUsersData.isPresent()).isTrue(); + } + } +}