Merge "If indexing fails include the entity ID into the exception message"
diff --git a/java/com/google/gerrit/server/index/account/AccountIndexerImpl.java b/java/com/google/gerrit/server/index/account/AccountIndexerImpl.java
index defaeea..025a1f9 100644
--- a/java/com/google/gerrit/server/index/account/AccountIndexerImpl.java
+++ b/java/com/google/gerrit/server/index/account/AccountIndexerImpl.java
@@ -103,6 +103,12 @@
.indexVersion(i.getSchema().getVersion())
.build())) {
i.replace(accountState.get());
+ } catch (RuntimeException e) {
+ throw new StorageException(
+ String.format(
+ "Failed to replace account %d in index version %d",
+ id.get(), i.getSchema().getVersion()),
+ e);
}
} else {
try (TraceTimer traceTimer =
@@ -113,6 +119,12 @@
.indexVersion(i.getSchema().getVersion())
.build())) {
i.delete(id);
+ } catch (RuntimeException e) {
+ throw new StorageException(
+ String.format(
+ "Failed to delete account %d from index version %d",
+ id.get(), i.getSchema().getVersion()),
+ e);
}
}
}
diff --git a/java/com/google/gerrit/server/index/change/ChangeIndexer.java b/java/com/google/gerrit/server/index/change/ChangeIndexer.java
index 5211a07..e0f6bec 100644
--- a/java/com/google/gerrit/server/index/change/ChangeIndexer.java
+++ b/java/com/google/gerrit/server/index/change/ChangeIndexer.java
@@ -24,6 +24,7 @@
import com.google.gerrit.common.Nullable;
import com.google.gerrit.entities.Change;
import com.google.gerrit.entities.Project;
+import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.extensions.events.ChangeIndexedListener;
import com.google.gerrit.index.Index;
import com.google.gerrit.server.config.GerritServerConfig;
@@ -208,6 +209,12 @@
.indexVersion(i.getSchema().getVersion())
.build())) {
i.replace(cd);
+ } catch (RuntimeException e) {
+ throw new StorageException(
+ String.format(
+ "Failed to replace change %d in index version %d (current patch set = %d)",
+ cd.getId().get(), i.getSchema().getVersion(), cd.currentPatchSet().number()),
+ e);
}
}
fireChangeIndexedEvent(cd.project().get(), cd.getId().get());
@@ -417,6 +424,12 @@
.indexVersion(i.getSchema().getVersion())
.build())) {
i.delete(id);
+ } catch (RuntimeException e) {
+ throw new StorageException(
+ String.format(
+ "Failed to delete change %d from index version %d",
+ id.get(), i.getSchema().getVersion()),
+ e);
}
}
fireChangeDeletedFromIndexEvent(id.get());
diff --git a/java/com/google/gerrit/server/index/group/GroupIndexerImpl.java b/java/com/google/gerrit/server/index/group/GroupIndexerImpl.java
index 8859daec..e9897e8 100644
--- a/java/com/google/gerrit/server/index/group/GroupIndexerImpl.java
+++ b/java/com/google/gerrit/server/index/group/GroupIndexerImpl.java
@@ -102,6 +102,12 @@
.indexVersion(i.getSchema().getVersion())
.build())) {
i.replace(internalGroup.get());
+ } catch (RuntimeException e) {
+ throw new StorageException(
+ String.format(
+ "Failed to replace group %s in index version %d",
+ uuid.get(), i.getSchema().getVersion()),
+ e);
}
} else {
try (TraceTimer traceTimer =
@@ -112,6 +118,12 @@
.indexVersion(i.getSchema().getVersion())
.build())) {
i.delete(uuid);
+ } catch (RuntimeException e) {
+ throw new StorageException(
+ String.format(
+ "Failed to delete group %s from index version %d",
+ uuid.get(), i.getSchema().getVersion()),
+ e);
}
}
}
diff --git a/java/com/google/gerrit/server/index/project/ProjectIndexerImpl.java b/java/com/google/gerrit/server/index/project/ProjectIndexerImpl.java
index 24f7073..22517ad 100644
--- a/java/com/google/gerrit/server/index/project/ProjectIndexerImpl.java
+++ b/java/com/google/gerrit/server/index/project/ProjectIndexerImpl.java
@@ -18,6 +18,7 @@
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.common.Nullable;
import com.google.gerrit.entities.Project;
+import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.extensions.events.ProjectIndexedListener;
import com.google.gerrit.index.project.ProjectData;
import com.google.gerrit.index.project.ProjectIndex;
@@ -89,6 +90,12 @@
.indexVersion(i.getSchema().getVersion())
.build())) {
i.replace(projectData);
+ } catch (RuntimeException e) {
+ throw new StorageException(
+ String.format(
+ "Failed to replace project %s in index version %d",
+ nameKey.get(), i.getSchema().getVersion()),
+ e);
}
}
fireProjectIndexedEvent(nameKey.get());
@@ -103,6 +110,12 @@
.indexVersion(i.getSchema().getVersion())
.build())) {
i.delete(nameKey);
+ } catch (RuntimeException e) {
+ throw new StorageException(
+ String.format(
+ "Failed to delete project %s from index version %d",
+ nameKey.get(), i.getSchema().getVersion()),
+ e);
}
}
}
diff --git a/javatests/com/google/gerrit/acceptance/api/project/ProjectIndexerIT.java b/javatests/com/google/gerrit/acceptance/api/project/ProjectIndexerIT.java
index 023f43e..dad09f9 100644
--- a/javatests/com/google/gerrit/acceptance/api/project/ProjectIndexerIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/project/ProjectIndexerIT.java
@@ -23,6 +23,7 @@
import com.google.gerrit.acceptance.AbstractDaemonTest;
import com.google.gerrit.acceptance.testsuite.project.ProjectOperations;
import com.google.gerrit.entities.Project;
+import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.index.IndexConfig;
import com.google.gerrit.index.QueryOptions;
import com.google.gerrit.index.RefState;
@@ -119,15 +120,17 @@
private void updateProjectConfigWithoutIndexUpdate(
Project.NameKey project, Consumer<ProjectConfig> update) throws Exception {
- assertThrows(
- UnsupportedOperationException.class,
- () -> {
- try (AutoCloseable ignored = disableProjectIndex()) {
- try (ProjectConfigUpdate u = updateProject(project)) {
- update.accept(u.getConfig());
- u.save();
- }
- }
- });
+ StorageException storageException =
+ assertThrows(
+ StorageException.class,
+ () -> {
+ try (AutoCloseable ignored = disableProjectIndex()) {
+ try (ProjectConfigUpdate u = updateProject(project)) {
+ update.accept(u.getConfig());
+ u.save();
+ }
+ }
+ });
+ assertThat(storageException.getCause()).isInstanceOf(UnsupportedOperationException.class);
}
}