Throw StorageException instead of IOException from Index
Change-Id: I6b2c4442afbdbb678b5a8f1bc00f83b99f759734
diff --git a/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java b/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
index b678211..86f1083 100644
--- a/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
+++ b/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
@@ -167,23 +167,23 @@
}
@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 @@
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 @@
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 @@
return sortArray;
}
- protected String getURI(String type, String request) throws UnsupportedEncodingException {
- String encodedIndexName = URLEncoder.encode(indexName, UTF_8.toString());
- if (SEARCH.equals(request) && client.adapter().omitTypeFromSearch()) {
- return encodedIndexName + "/" + request;
+ 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);
}
- String encodedType = URLEncoder.encode(type, UTF_8.toString());
- return encodedIndexName + "/" + encodedType + "/" + request;
}
- 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 @@
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 @@
for (Map.Entry<String, String> entry : params.entrySet()) {
request.addParameter(entry.getKey(), entry.getValue());
}
- return client.get().performRequest(request);
+ try {
+ return client.get().performRequest(request);
+ } catch (IOException e) {
+ throw new StorageException(e);
+ }
}
protected class ElasticQuerySource implements DataSource<V> {
diff --git a/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java b/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java
index d0b70ae..c25aa90 100644
--- a/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java
+++ b/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java
@@ -20,6 +20,7 @@
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.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 @@
}
@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 @@
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));
diff --git a/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java b/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java
index bcbc630..5782399 100644
--- a/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java
+++ b/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java
@@ -33,6 +33,7 @@
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.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 @@
}
@Override
- public void replace(ChangeData cd) throws IOException {
+ public void replace(ChangeData cd) {
String deleteIndex;
String insertIndex;
@@ -130,7 +130,7 @@
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));
}
diff --git a/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java b/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java
index e74f208..ecda1ee 100644
--- a/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java
+++ b/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java
@@ -18,6 +18,7 @@
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.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 @@
}
@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 @@
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));
diff --git a/java/com/google/gerrit/elasticsearch/ElasticProjectIndex.java b/java/com/google/gerrit/elasticsearch/ElasticProjectIndex.java
index 8510559..daf3702 100644
--- a/java/com/google/gerrit/elasticsearch/ElasticProjectIndex.java
+++ b/java/com/google/gerrit/elasticsearch/ElasticProjectIndex.java
@@ -18,6 +18,7 @@
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.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 @@
}
@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 @@
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));