Throw StorageException instead of IOException from Index

Change-Id: I6b2c4442afbdbb678b5a8f1bc00f83b99f759734
This commit is contained in:
Dave Borowitz
2019-01-15 19:38:14 -08:00
parent 40814dd46d
commit eac1ded2f8
18 changed files with 104 additions and 118 deletions

View File

@@ -22,7 +22,6 @@ import com.google.gerrit.index.query.QueryParseException;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.index.change.ChangeIndex;
import com.google.gerrit.server.query.change.ChangeData;
import java.io.IOException;
import java.util.Optional;
/**
@@ -53,17 +52,17 @@ public class DisabledChangeIndex implements ChangeIndex {
}
@Override
public void replace(ChangeData obj) throws IOException {
public void replace(ChangeData obj) {
throw new UnsupportedOperationException("ChangeIndex is disabled");
}
@Override
public void delete(Change.Id key) throws IOException {
public void delete(Change.Id key) {
throw new UnsupportedOperationException("ChangeIndex is disabled");
}
@Override
public void deleteAll() throws IOException {
public void deleteAll() {
throw new UnsupportedOperationException("ChangeIndex is disabled");
}
@@ -74,12 +73,12 @@ public class DisabledChangeIndex implements ChangeIndex {
}
@Override
public void markReady(boolean ready) throws IOException {
public void markReady(boolean ready) {
throw new UnsupportedOperationException("ChangeIndex is disabled");
}
@Override
public Optional<ChangeData> get(Change.Id key, QueryOptions opts) throws IOException {
public Optional<ChangeData> get(Change.Id key, QueryOptions opts) {
throw new UnsupportedOperationException("ChangeIndex is disabled");
}
}

View File

@@ -22,7 +22,6 @@ import com.google.gerrit.index.query.QueryParseException;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.index.change.ChangeIndex;
import com.google.gerrit.server.query.change.ChangeData;
import java.io.IOException;
class ReadOnlyChangeIndex implements ChangeIndex {
private final ChangeIndex index;
@@ -46,17 +45,17 @@ class ReadOnlyChangeIndex implements ChangeIndex {
}
@Override
public void replace(ChangeData obj) throws IOException {
public void replace(ChangeData obj) {
// do nothing
}
@Override
public void delete(Change.Id key) throws IOException {
public void delete(Change.Id key) {
// do nothing
}
@Override
public void deleteAll() throws IOException {
public void deleteAll() {
// do nothing
}
@@ -67,7 +66,7 @@ class ReadOnlyChangeIndex implements ChangeIndex {
}
@Override
public void markReady(boolean ready) throws IOException {
public void markReady(boolean ready) {
// do nothing
}
}

View File

@@ -167,23 +167,23 @@ abstract class AbstractElasticIndex<K, V> implements Index<K, V> {
}
@Override
public void markReady(boolean ready) throws IOException {
public void markReady(boolean ready) {
IndexUtils.setReady(sitePaths, indexNameRaw, schema.getVersion(), ready);
}
@Override
public void delete(K id) throws IOException {
public void delete(K id) {
String uri = getURI(type, BULK);
Response response = postRequest(uri, getDeleteActions(id), getRefreshParam());
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
throw new IOException(
throw new StorageException(
String.format("Failed to delete %s from index %s: %s", id, indexName, statusCode));
}
}
@Override
public void deleteAll() throws IOException {
public void deleteAll() {
// Delete the index, if it exists.
String endpoint = indexName + client.adapter().indicesExistParam();
Response response = performRequest("HEAD", endpoint);
@@ -192,7 +192,7 @@ abstract class AbstractElasticIndex<K, V> implements Index<K, V> {
response = performRequest("DELETE", indexName);
statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
throw new IOException(
throw new StorageException(
String.format("Failed to delete index %s: %s", indexName, statusCode));
}
}
@@ -205,7 +205,7 @@ abstract class AbstractElasticIndex<K, V> implements Index<K, V> {
statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
String error = String.format("Failed to create index %s: %s", indexName, statusCode);
throw new IOException(error);
throw new StorageException(error);
}
}
@@ -307,21 +307,24 @@ abstract class AbstractElasticIndex<K, V> implements Index<K, V> {
return sortArray;
}
protected String getURI(String type, String request) throws UnsupportedEncodingException {
protected String getURI(String type, String request) {
try {
String encodedIndexName = URLEncoder.encode(indexName, UTF_8.toString());
if (SEARCH.equals(request) && client.adapter().omitTypeFromSearch()) {
return encodedIndexName + "/" + request;
}
String encodedType = URLEncoder.encode(type, UTF_8.toString());
return encodedIndexName + "/" + encodedType + "/" + request;
} catch (UnsupportedEncodingException e) {
throw new StorageException(e);
}
}
protected Response postRequest(String uri, Object payload) throws IOException {
protected Response postRequest(String uri, Object payload) {
return performRequest("POST", uri, payload);
}
protected Response postRequest(String uri, Object payload, Map<String, String> params)
throws IOException {
protected Response postRequest(String uri, Object payload, Map<String, String> params) {
return performRequest("POST", uri, payload, params);
}
@@ -329,18 +332,16 @@ abstract class AbstractElasticIndex<K, V> implements Index<K, V> {
return target.substring(0, target.length() - 1) + "," + addition.substring(1);
}
private Response performRequest(String method, String uri) throws IOException {
private Response performRequest(String method, String uri) {
return performRequest(method, uri, null);
}
private Response performRequest(String method, String uri, @Nullable Object payload)
throws IOException {
private Response performRequest(String method, String uri, @Nullable Object payload) {
return performRequest(method, uri, payload, Collections.emptyMap());
}
private Response performRequest(
String method, String uri, @Nullable Object payload, Map<String, String> params)
throws IOException {
String method, String uri, @Nullable Object payload, Map<String, String> params) {
Request request = new Request(method, uri.startsWith("/") ? uri : "/" + uri);
if (payload != null) {
String payloadStr = payload instanceof String ? (String) payload : payload.toString();
@@ -349,7 +350,11 @@ abstract class AbstractElasticIndex<K, V> implements Index<K, V> {
for (Map.Entry<String, String> entry : params.entrySet()) {
request.addParameter(entry.getKey(), entry.getValue());
}
try {
return client.get().performRequest(request);
} catch (IOException e) {
throw new StorageException(e);
}
}
protected class ElasticQuerySource implements DataSource<V> {

View File

@@ -20,6 +20,7 @@ import com.google.gerrit.elasticsearch.ElasticMapping.MappingProperties;
import com.google.gerrit.elasticsearch.bulk.BulkRequest;
import com.google.gerrit.elasticsearch.bulk.IndexRequest;
import com.google.gerrit.elasticsearch.bulk.UpdateRequest;
import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.index.QueryOptions;
import com.google.gerrit.index.Schema;
import com.google.gerrit.index.query.DataSource;
@@ -38,7 +39,6 @@ import com.google.gson.JsonObject;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
import java.util.Set;
import org.apache.http.HttpStatus;
import org.elasticsearch.client.Response;
@@ -73,7 +73,7 @@ public class ElasticAccountIndex extends AbstractElasticIndex<Account.Id, Accoun
}
@Override
public void replace(AccountState as) throws IOException {
public void replace(AccountState as) {
BulkRequest bulk =
new IndexRequest(getId(as), indexName, type, client.adapter())
.add(new UpdateRequest<>(schema, as));
@@ -82,7 +82,7 @@ public class ElasticAccountIndex extends AbstractElasticIndex<Account.Id, Accoun
Response response = postRequest(uri, bulk, getRefreshParam());
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
throw new IOException(
throw new StorageException(
String.format(
"Failed to replace account %s in index %s: %s",
as.getAccount().getId(), indexName, statusCode));

View File

@@ -33,6 +33,7 @@ import com.google.gerrit.elasticsearch.bulk.BulkRequest;
import com.google.gerrit.elasticsearch.bulk.DeleteRequest;
import com.google.gerrit.elasticsearch.bulk.IndexRequest;
import com.google.gerrit.elasticsearch.bulk.UpdateRequest;
import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.index.QueryOptions;
import com.google.gerrit.index.Schema;
import com.google.gerrit.index.query.DataSource;
@@ -59,7 +60,6 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -106,7 +106,7 @@ class ElasticChangeIndex extends AbstractElasticIndex<Change.Id, ChangeData>
}
@Override
public void replace(ChangeData cd) throws IOException {
public void replace(ChangeData cd) {
String deleteIndex;
String insertIndex;
@@ -130,7 +130,7 @@ class ElasticChangeIndex extends AbstractElasticIndex<Change.Id, ChangeData>
Response response = postRequest(uri, bulk, getRefreshParam());
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
throw new IOException(
throw new StorageException(
String.format(
"Failed to replace change %s in index %s: %s", cd.getId(), indexName, statusCode));
}

View File

@@ -18,6 +18,7 @@ import com.google.gerrit.elasticsearch.ElasticMapping.MappingProperties;
import com.google.gerrit.elasticsearch.bulk.BulkRequest;
import com.google.gerrit.elasticsearch.bulk.IndexRequest;
import com.google.gerrit.elasticsearch.bulk.UpdateRequest;
import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.index.QueryOptions;
import com.google.gerrit.index.Schema;
import com.google.gerrit.index.query.DataSource;
@@ -36,7 +37,6 @@ import com.google.gson.JsonObject;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
import java.util.Set;
import org.apache.http.HttpStatus;
import org.elasticsearch.client.Response;
@@ -71,7 +71,7 @@ public class ElasticGroupIndex extends AbstractElasticIndex<AccountGroup.UUID, I
}
@Override
public void replace(InternalGroup group) throws IOException {
public void replace(InternalGroup group) {
BulkRequest bulk =
new IndexRequest(getId(group), indexName, type, client.adapter())
.add(new UpdateRequest<>(schema, group));
@@ -80,7 +80,7 @@ public class ElasticGroupIndex extends AbstractElasticIndex<AccountGroup.UUID, I
Response response = postRequest(uri, bulk, getRefreshParam());
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
throw new IOException(
throw new StorageException(
String.format(
"Failed to replace group %s in index %s: %s",
group.getGroupUUID().get(), indexName, statusCode));

View File

@@ -18,6 +18,7 @@ import com.google.gerrit.elasticsearch.ElasticMapping.MappingProperties;
import com.google.gerrit.elasticsearch.bulk.BulkRequest;
import com.google.gerrit.elasticsearch.bulk.IndexRequest;
import com.google.gerrit.elasticsearch.bulk.UpdateRequest;
import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.index.QueryOptions;
import com.google.gerrit.index.Schema;
import com.google.gerrit.index.project.ProjectData;
@@ -36,7 +37,6 @@ import com.google.gson.JsonObject;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
import java.util.Set;
import org.apache.http.HttpStatus;
import org.elasticsearch.client.Response;
@@ -71,7 +71,7 @@ public class ElasticProjectIndex extends AbstractElasticIndex<Project.NameKey, P
}
@Override
public void replace(ProjectData projectState) throws IOException {
public void replace(ProjectData projectState) {
BulkRequest bulk =
new IndexRequest(projectState.getProject().getName(), indexName, type, client.adapter())
.add(new UpdateRequest<>(schema, projectState));
@@ -80,7 +80,7 @@ public class ElasticProjectIndex extends AbstractElasticIndex<Project.NameKey, P
Response response = postRequest(uri, bulk, getRefreshParam());
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
throw new IOException(
throw new StorageException(
String.format(
"Failed to replace project %s in index %s: %s",
projectState.getProject().getName(), indexName, statusCode));

View File

@@ -21,7 +21,6 @@ import com.google.gerrit.index.query.FieldBundle;
import com.google.gerrit.index.query.IndexPredicate;
import com.google.gerrit.index.query.Predicate;
import com.google.gerrit.index.query.QueryParseException;
import java.io.IOException;
import java.util.Optional;
/**
@@ -48,24 +47,18 @@ public interface Index<K, V> {
* searchers, but should be visible within a reasonable amount of time.
*
* @param obj document object
* @throws IOException
*/
void replace(V obj) throws IOException;
void replace(V obj);
/**
* Delete a document from the index by key.
*
* @param key document key
* @throws IOException
*/
void delete(K key) throws IOException;
void delete(K key);
/**
* Delete all documents from the index.
*
* @throws IOException
*/
void deleteAll() throws IOException;
/** Delete all documents from the index. */
void deleteAll();
/**
* Convert the given operator predicate into a source searching the index and returning only the
@@ -91,20 +84,17 @@ public interface Index<K, V> {
* @param opts query options. Options that do not make sense in the context of a single document,
* such as start, will be ignored.
* @return a single document if present.
* @throws IOException
*/
default Optional<V> get(K key, QueryOptions opts) throws IOException {
default Optional<V> get(K key, QueryOptions opts) {
opts = opts.withStart(0).withLimit(2);
ImmutableList<V> results;
try {
results = getSource(keyPredicate(key), opts).read().toList();
} catch (QueryParseException e) {
throw new IOException("Unexpected QueryParseException during get()", e);
} catch (StorageException e) {
throw new IOException(e);
throw new StorageException("Unexpected QueryParseException during get()", e);
}
if (results.size() > 1) {
throw new IOException("Multiple results found in index for key " + key + ": " + results);
throw new StorageException("Multiple results found in index for key " + key + ": " + results);
}
return results.stream().findFirst();
}
@@ -116,20 +106,17 @@ public interface Index<K, V> {
* @param opts query options. Options that do not make sense in the context of a single document,
* such as start, will be ignored.
* @return an abstraction of a raw index document to retrieve fields from.
* @throws IOException
*/
default Optional<FieldBundle> getRaw(K key, QueryOptions opts) throws IOException {
default Optional<FieldBundle> getRaw(K key, QueryOptions opts) {
opts = opts.withStart(0).withLimit(2);
ImmutableList<FieldBundle> results;
try {
results = getSource(keyPredicate(key), opts).readRaw().toList();
} catch (QueryParseException e) {
throw new IOException("Unexpected QueryParseException during get()", e);
} catch (StorageException e) {
throw new IOException(e);
throw new StorageException("Unexpected QueryParseException during get()", e);
}
if (results.size() > 1) {
throw new IOException("Multiple results found in index for key " + key + ": " + results);
throw new StorageException("Multiple results found in index for key " + key + ": " + results);
}
return results.stream().findFirst();
}
@@ -146,7 +133,6 @@ public interface Index<K, V> {
* Mark whether this index is up-to-date and ready to serve reads.
*
* @param ready whether the index is ready
* @throws IOException
*/
void markReady(boolean ready) throws IOException;
void markReady(boolean ready);
}

View File

@@ -22,7 +22,6 @@ import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.exceptions.StorageException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -179,7 +178,7 @@ public class Schema<T> {
Object v;
try {
v = f.get(obj);
} catch (StorageException e) {
} catch (RuntimeException e) {
logger.atSevere().withCause(e).log(
"error getting field %s of %s", f.getName(), obj);
return null;

View File

@@ -213,7 +213,7 @@ public abstract class AbstractLuceneIndex<K, V> implements Index<K, V> {
}
@Override
public void markReady(boolean ready) throws IOException {
public void markReady(boolean ready) {
IndexUtils.setReady(sitePaths, name, schema.getVersion(), ready);
}
@@ -287,8 +287,12 @@ public abstract class AbstractLuceneIndex<K, V> implements Index<K, V> {
}
@Override
public void deleteAll() throws IOException {
public void deleteAll() {
try {
writer.deleteAll();
} catch (IOException e) {
throw new StorageException(e);
}
}
public IndexWriter getWriter() {

View File

@@ -71,12 +71,12 @@ public class ChangeSubIndex extends AbstractLuceneIndex<Change.Id, ChangeData>
}
@Override
public void replace(ChangeData obj) throws IOException {
public void replace(ChangeData obj) {
throw new UnsupportedOperationException("don't use ChangeSubIndex directly");
}
@Override
public void delete(Change.Id key) throws IOException {
public void delete(Change.Id key) {
throw new UnsupportedOperationException("don't use ChangeSubIndex directly");
}

View File

@@ -19,6 +19,7 @@ import static com.google.gerrit.server.index.account.AccountField.FULL_NAME;
import static com.google.gerrit.server.index.account.AccountField.ID;
import static com.google.gerrit.server.index.account.AccountField.PREFERRED_EMAIL_EXACT;
import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.index.FieldDef;
import com.google.gerrit.index.QueryOptions;
import com.google.gerrit.index.Schema;
@@ -120,20 +121,20 @@ public class LuceneAccountIndex extends AbstractLuceneIndex<Account.Id, AccountS
}
@Override
public void replace(AccountState as) throws IOException {
public void replace(AccountState as) {
try {
replace(idTerm(as), toDocument(as)).get();
} catch (ExecutionException | InterruptedException e) {
throw new IOException(e);
throw new StorageException(e);
}
}
@Override
public void delete(Account.Id key) throws IOException {
public void delete(Account.Id key) {
try {
delete(idTerm(key)).get();
} catch (ExecutionException | InterruptedException e) {
throw new IOException(e);
throw new StorageException(e);
}
}

View File

@@ -200,7 +200,7 @@ public class LuceneChangeIndex implements ChangeIndex {
}
@Override
public void replace(ChangeData cd) throws IOException {
public void replace(ChangeData cd) {
Term id = LuceneChangeIndex.idTerm(cd);
// toDocument is essentially static and doesn't depend on the specific
// sub-index, so just pick one.
@@ -211,23 +211,23 @@ public class LuceneChangeIndex implements ChangeIndex {
} else {
Futures.allAsList(openIndex.delete(id), closedIndex.replace(id, doc)).get();
}
} catch (StorageException | ExecutionException | InterruptedException e) {
throw new IOException(e);
} catch (ExecutionException | InterruptedException e) {
throw new StorageException(e);
}
}
@Override
public void delete(Change.Id id) throws IOException {
public void delete(Change.Id id) {
Term idTerm = LuceneChangeIndex.idTerm(id);
try {
Futures.allAsList(openIndex.delete(idTerm), closedIndex.delete(idTerm)).get();
} catch (ExecutionException | InterruptedException e) {
throw new IOException(e);
throw new StorageException(e);
}
}
@Override
public void deleteAll() throws IOException {
public void deleteAll() {
openIndex.deleteAll();
closedIndex.deleteAll();
}
@@ -247,7 +247,7 @@ public class LuceneChangeIndex implements ChangeIndex {
}
@Override
public void markReady(boolean ready) throws IOException {
public void markReady(boolean ready) {
// Arbitrary done on open index, as ready bit is set
// per index and not sub index
openIndex.markReady(ready);

View File

@@ -17,6 +17,7 @@ package com.google.gerrit.lucene;
import static com.google.common.collect.Iterables.getOnlyElement;
import static com.google.gerrit.server.index.group.GroupField.UUID;
import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.index.FieldDef;
import com.google.gerrit.index.QueryOptions;
import com.google.gerrit.index.Schema;
@@ -110,20 +111,20 @@ public class LuceneGroupIndex extends AbstractLuceneIndex<AccountGroup.UUID, Int
}
@Override
public void replace(InternalGroup group) throws IOException {
public void replace(InternalGroup group) {
try {
replace(idTerm(group), toDocument(group)).get();
} catch (ExecutionException | InterruptedException e) {
throw new IOException(e);
throw new StorageException(e);
}
}
@Override
public void delete(AccountGroup.UUID key) throws IOException {
public void delete(AccountGroup.UUID key) {
try {
delete(idTerm(key)).get();
} catch (ExecutionException | InterruptedException e) {
throw new IOException(e);
throw new StorageException(e);
}
}

View File

@@ -17,6 +17,7 @@ package com.google.gerrit.lucene;
import static com.google.common.collect.Iterables.getOnlyElement;
import static com.google.gerrit.index.project.ProjectField.NAME;
import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.index.FieldDef;
import com.google.gerrit.index.QueryOptions;
import com.google.gerrit.index.Schema;
@@ -110,20 +111,20 @@ public class LuceneProjectIndex extends AbstractLuceneIndex<Project.NameKey, Pro
}
@Override
public void replace(ProjectData projectState) throws IOException {
public void replace(ProjectData projectState) {
try {
replace(idTerm(projectState), toDocument(projectState)).get();
} catch (ExecutionException | InterruptedException e) {
throw new IOException(e);
throw new StorageException(e);
}
}
@Override
public void delete(Project.NameKey nameKey) throws IOException {
public void delete(Project.NameKey nameKey) {
try {
delete(idTerm(nameKey)).get();
} catch (ExecutionException | InterruptedException e) {
throw new IOException(e);
throw new StorageException(e);
}
}

View File

@@ -22,6 +22,7 @@ import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.index.QueryOptions;
import com.google.gerrit.index.project.ProjectField;
import com.google.gerrit.server.CurrentUser;
@@ -49,23 +50,22 @@ public final class IndexUtils {
}
};
public static void setReady(SitePaths sitePaths, String name, int version, boolean ready)
throws IOException {
public static void setReady(SitePaths sitePaths, String name, int version, boolean ready) {
try {
GerritIndexStatus cfg = new GerritIndexStatus(sitePaths);
cfg.setReady(name, version, ready);
cfg.save();
} catch (ConfigInvalidException e) {
throw new IOException(e);
} catch (ConfigInvalidException | IOException e) {
throw new StorageException(e);
}
}
public static boolean getReady(SitePaths sitePaths, String name, int version) throws IOException {
public static boolean getReady(SitePaths sitePaths, String name, int version) {
try {
GerritIndexStatus cfg = new GerritIndexStatus(sitePaths);
return cfg.getReady(name, version);
} catch (ConfigInvalidException e) {
throw new IOException(e);
} catch (ConfigInvalidException | IOException e) {
throw new StorageException(e);
}
}

View File

@@ -120,11 +120,7 @@ public class OnlineReindexer<K, V, I extends Index<K, V>> {
public void activateIndex() {
indexes.setSearchIndex(index);
logger.atInfo().log("Using %s schema version %s", name, version(index));
try {
index.markReady(true);
} catch (IOException e) {
logger.atWarning().log("Error activating new %s schema version %s", name, version(index));
}
List<I> toRemove = Lists.newArrayListWithExpectedSize(1);
for (I i : indexes.getWriteIndexes()) {
@@ -133,12 +129,8 @@ public class OnlineReindexer<K, V, I extends Index<K, V>> {
}
}
for (I i : toRemove) {
try {
i.markReady(false);
indexes.removeWriteIndex(version(i));
} catch (IOException e) {
logger.atWarning().log("Error deactivating old %s schema version %s", name, version(i));
}
}
}
}

View File

@@ -20,7 +20,6 @@ import com.google.gerrit.index.query.Predicate;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.query.change.ChangeDataSource;
import java.io.IOException;
public class DummyChangeIndex implements ChangeIndex {
@Override
@@ -32,13 +31,13 @@ public class DummyChangeIndex implements ChangeIndex {
public void close() {}
@Override
public void replace(ChangeData cd) throws IOException {}
public void replace(ChangeData cd) {}
@Override
public void delete(Change.Id id) throws IOException {}
public void delete(Change.Id id) {}
@Override
public void deleteAll() throws IOException {}
public void deleteAll() {}
@Override
public ChangeDataSource getSource(Predicate<ChangeData> p, QueryOptions opts) {
@@ -46,7 +45,7 @@ public class DummyChangeIndex implements ChangeIndex {
}
@Override
public void markReady(boolean ready) throws IOException {}
public void markReady(boolean ready) {}
public int getMaxLimit() {
return Integer.MAX_VALUE;