Remove gerrit-index folder
Most of the index abstraction classes were already in gerrit-server except 3 classes that were recently added in gerrit-index. Change-Id: Id7360ff70bef377c27c9cad9a591a63e72728a61
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
// Copyright (C) 2016 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.common.primitives.Ints;
|
||||
import com.google.gerrit.server.config.SitePaths;
|
||||
import com.google.gerrit.server.index.change.ChangeSchemaDefinitions;
|
||||
|
||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
import org.eclipse.jgit.storage.file.FileBasedConfig;
|
||||
import org.eclipse.jgit.util.FS;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class GerritIndexStatus {
|
||||
private static final String SECTION = "index";
|
||||
private static final String KEY_READY = "ready";
|
||||
|
||||
private final FileBasedConfig cfg;
|
||||
|
||||
public GerritIndexStatus(SitePaths sitePaths)
|
||||
throws ConfigInvalidException, IOException {
|
||||
cfg = new FileBasedConfig(
|
||||
sitePaths.index_dir.resolve("gerrit_index.config").toFile(),
|
||||
FS.detect());
|
||||
cfg.load();
|
||||
convertLegacyConfig();
|
||||
}
|
||||
|
||||
public void setReady(String indexName, int version, boolean ready) {
|
||||
cfg.setBoolean(SECTION, indexDirName(indexName, version), KEY_READY, ready);
|
||||
}
|
||||
|
||||
public boolean getReady(String indexName, int version) {
|
||||
return cfg.getBoolean(SECTION, indexDirName(indexName, version), KEY_READY,
|
||||
false);
|
||||
}
|
||||
|
||||
public void save() throws IOException {
|
||||
cfg.save();
|
||||
}
|
||||
|
||||
private void convertLegacyConfig() throws IOException {
|
||||
boolean dirty = false;
|
||||
// Convert legacy [index "25"] to modern [index "changes_0025"].
|
||||
for (String subsection : cfg.getSubsections(SECTION)) {
|
||||
Integer v = Ints.tryParse(subsection);
|
||||
if (v != null) {
|
||||
String ready = cfg.getString(SECTION, subsection, KEY_READY);
|
||||
if (ready != null) {
|
||||
dirty = false;
|
||||
cfg.unset(SECTION, subsection, KEY_READY);
|
||||
cfg.setString(SECTION, indexDirName(ChangeSchemaDefinitions.NAME, v),
|
||||
KEY_READY, ready);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dirty) {
|
||||
cfg.save();
|
||||
}
|
||||
}
|
||||
|
||||
private static String indexDirName(String indexName, int version) {
|
||||
return String.format("%s_%04d", indexName, version);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
// Copyright (C) 2013 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 static com.google.gerrit.server.index.change.ChangeField.CHANGE;
|
||||
import static com.google.gerrit.server.index.change.ChangeField.LEGACY_ID;
|
||||
import static com.google.gerrit.server.index.change.ChangeField.PROJECT;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.gerrit.server.config.SitePaths;
|
||||
|
||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public final class IndexUtils {
|
||||
public static final Map<String, String> CUSTOM_CHAR_MAPPING =
|
||||
ImmutableMap.of("_", " ", ".", " ");
|
||||
|
||||
public static void setReady(SitePaths sitePaths, String name, int version,
|
||||
boolean ready) throws IOException {
|
||||
try {
|
||||
GerritIndexStatus cfg = new GerritIndexStatus(sitePaths);
|
||||
cfg.setReady(name, version, ready);
|
||||
cfg.save();
|
||||
} catch (ConfigInvalidException e) {
|
||||
throw new IOException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static Set<String> fields(QueryOptions opts) {
|
||||
// Ensure we request enough fields to construct a ChangeData. We need both
|
||||
// change ID and project, which can either come via the Change field or
|
||||
// separate fields.
|
||||
Set<String> fs = opts.fields();
|
||||
if (fs.contains(CHANGE.getName())) {
|
||||
// A Change is always sufficient.
|
||||
return fs;
|
||||
}
|
||||
if (fs.contains(PROJECT.getName()) && fs.contains(LEGACY_ID.getName())) {
|
||||
return fs;
|
||||
}
|
||||
return Sets.union(fs,
|
||||
ImmutableSet.of(LEGACY_ID.getName(), PROJECT.getName()));
|
||||
}
|
||||
|
||||
private IndexUtils() {
|
||||
// hide default constructor
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
// Copyright (C) 2013 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.common.collect.ImmutableSet;
|
||||
import com.google.gerrit.extensions.events.LifecycleListener;
|
||||
import com.google.gerrit.lifecycle.LifecycleModule;
|
||||
import com.google.gerrit.server.config.GerritServerConfig;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.ProvisionException;
|
||||
import com.google.inject.Singleton;
|
||||
import com.google.inject.TypeLiteral;
|
||||
import com.google.inject.name.Named;
|
||||
import com.google.inject.name.Names;
|
||||
|
||||
import org.eclipse.jgit.lib.Config;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@Singleton
|
||||
public class SingleVersionModule extends LifecycleModule {
|
||||
static final String SINGLE_VERSIONS = "IndexModule/SingleVersions";
|
||||
|
||||
private final Map<String, Integer> singleVersions;
|
||||
|
||||
public SingleVersionModule(Map<String, Integer> singleVersions) {
|
||||
this.singleVersions = singleVersions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configure() {
|
||||
listener().to(SingleVersionListener.class);
|
||||
bind(new TypeLiteral<Map<String, Integer>>() {})
|
||||
.annotatedWith(Names.named(SINGLE_VERSIONS))
|
||||
.toInstance(singleVersions);
|
||||
}
|
||||
|
||||
@Singleton
|
||||
static class SingleVersionListener implements LifecycleListener {
|
||||
private final Set<String> disabled;
|
||||
private final Collection<IndexDefinition<?, ?, ?>> defs;
|
||||
private final Map<String, Integer> singleVersions;
|
||||
|
||||
@Inject
|
||||
SingleVersionListener(
|
||||
@GerritServerConfig Config cfg,
|
||||
Collection<IndexDefinition<?, ?, ?>> defs,
|
||||
@Named(SINGLE_VERSIONS) Map<String, Integer> singleVersions) {
|
||||
this.defs = defs;
|
||||
this.singleVersions = singleVersions;
|
||||
|
||||
disabled = ImmutableSet.copyOf(
|
||||
cfg.getStringList("index", null, "testDisable"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
for (IndexDefinition<?, ?, ?> def : defs) {
|
||||
start(def);
|
||||
}
|
||||
}
|
||||
|
||||
private <K, V, I extends Index<K, V>> void start(
|
||||
IndexDefinition<K, V, I> def) {
|
||||
if (disabled.contains(def.getName())) {
|
||||
return;
|
||||
}
|
||||
Schema<V> schema;
|
||||
Integer v = singleVersions.get(def.getName());
|
||||
if (v == null) {
|
||||
schema = def.getLatest();
|
||||
} else {
|
||||
schema = def.getSchemas().get(v);
|
||||
if (schema == null) {
|
||||
throw new ProvisionException(String.format(
|
||||
"Unrecognized %s schema version: %s", def.getName(), v));
|
||||
}
|
||||
}
|
||||
I index = def.getIndexFactory().create(schema);
|
||||
def.getIndexCollection().setSearchIndex(index);
|
||||
def.getIndexCollection().addWriteIndex(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
// Do nothing; indexes are closed by IndexCollection.
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user