Fix exception handling when reading value from REST response
To fail with ISE a REST endpoint can either throw an exception or return
Response.InternalServerError (since change Ie58b4ace6). If
Response.InternalServerError is returned as response and the client
tries to read its value this fails with an UnsupportedOperationException
and the original cause for the ISE is lost. Fix this by throwing the
original cause from Response.InternalServerError#value(). Doing this
requires to handle exceptions when the Response#value() method is
called, but this seems to be manageable. The alternative would be to
revert change Ie58b4ace6.
The current situation is especially bad for analysing test failures that
are caused by ISEs because in this case the test fails with the
UnsupportedOperationException that is thrown by
Response.InternalServerError#value(), but we need to know the original
cause.
Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I89c0c68bf25a550b9b9be577f42f73c7752f3036
diff --git a/java/com/google/gerrit/extensions/restapi/Response.java b/java/com/google/gerrit/extensions/restapi/Response.java
index f5b9145..5504cfd 100644
--- a/java/com/google/gerrit/extensions/restapi/Response.java
+++ b/java/com/google/gerrit/extensions/restapi/Response.java
@@ -74,7 +74,7 @@
}
@SuppressWarnings({"unchecked", "rawtypes"})
- public static <T> T unwrap(T obj) {
+ public static <T> T unwrap(T obj) throws Exception {
while (obj instanceof Response) {
obj = (T) ((Response) obj).value();
}
@@ -96,7 +96,7 @@
public abstract int statusCode();
- public abstract T value();
+ public abstract T value() throws Exception;
public abstract CacheControl caching();
@@ -306,8 +306,8 @@
}
@Override
- public T value() {
- throw new UnsupportedOperationException();
+ public T value() throws Exception {
+ throw cause();
}
@Override
diff --git a/java/com/google/gerrit/gpg/BUILD b/java/com/google/gerrit/gpg/BUILD
index d45a86d..f17dd80 100644
--- a/java/com/google/gerrit/gpg/BUILD
+++ b/java/com/google/gerrit/gpg/BUILD
@@ -12,6 +12,7 @@
"//java/com/google/gerrit/git",
"//java/com/google/gerrit/reviewdb:server",
"//java/com/google/gerrit/server",
+ "//java/com/google/gerrit/server/api",
"//lib:guava",
"//lib/bouncycastle:bcpg-neverlink",
"//lib/bouncycastle:bcprov-neverlink",
diff --git a/java/com/google/gerrit/gpg/api/GpgApiAdapterImpl.java b/java/com/google/gerrit/gpg/api/GpgApiAdapterImpl.java
index 62f1d18..652afea 100644
--- a/java/com/google/gerrit/gpg/api/GpgApiAdapterImpl.java
+++ b/java/com/google/gerrit/gpg/api/GpgApiAdapterImpl.java
@@ -14,6 +14,8 @@
package com.google.gerrit.gpg.api;
+import static com.google.gerrit.server.api.ApiUtil.asRestApiException;
+
import com.google.gerrit.extensions.api.accounts.GpgKeyApi;
import com.google.gerrit.extensions.api.accounts.GpgKeysInput;
import com.google.gerrit.extensions.common.GpgKeyInfo;
@@ -68,6 +70,8 @@
return gpgKeys.get().list().apply(account).value();
} catch (PGPException | IOException e) {
throw new GpgException(e);
+ } catch (Exception e) {
+ throw asRestApiException("Cannot list GPG keys", e);
}
}
@@ -82,6 +86,8 @@
return postGpgKeys.get().apply(account, in).value();
} catch (PGPException | IOException | ConfigInvalidException e) {
throw new GpgException(e);
+ } catch (Exception e) {
+ throw asRestApiException("Cannot put GPG keys", e);
}
}
diff --git a/java/com/google/gerrit/gpg/api/GpgKeyApiImpl.java b/java/com/google/gerrit/gpg/api/GpgKeyApiImpl.java
index 311e00a..0ff12e8 100644
--- a/java/com/google/gerrit/gpg/api/GpgKeyApiImpl.java
+++ b/java/com/google/gerrit/gpg/api/GpgKeyApiImpl.java
@@ -14,6 +14,8 @@
package com.google.gerrit.gpg.api;
+import static com.google.gerrit.server.api.ApiUtil.asRestApiException;
+
import com.google.gerrit.extensions.api.accounts.GpgKeyApi;
import com.google.gerrit.extensions.common.GpgKeyInfo;
import com.google.gerrit.extensions.common.Input;
@@ -47,8 +49,8 @@
public GpgKeyInfo get() throws RestApiException {
try {
return get.apply(rsrc).value();
- } catch (IOException e) {
- throw new RestApiException("Cannot get GPG key", e);
+ } catch (Exception e) {
+ throw asRestApiException("Cannot get GPG key", e);
}
}
@@ -57,7 +59,7 @@
try {
delete.apply(rsrc, new Input());
} catch (PGPException | IOException | ConfigInvalidException e) {
- throw new RestApiException("Cannot delete GPG key", e);
+ throw asRestApiException("Cannot delete GPG key", e);
}
}
}
diff --git a/java/com/google/gerrit/server/api/accounts/AccountApiImpl.java b/java/com/google/gerrit/server/api/accounts/AccountApiImpl.java
index 1d86e50..7fa9767 100644
--- a/java/com/google/gerrit/server/api/accounts/AccountApiImpl.java
+++ b/java/com/google/gerrit/server/api/accounts/AccountApiImpl.java
@@ -248,8 +248,12 @@
@Override
public boolean getActive() throws RestApiException {
- Response<String> result = getActive.apply(account);
- return result.statusCode() == SC_OK && result.value().equals("ok");
+ try {
+ Response<String> result = getActive.apply(account);
+ return result.statusCode() == SC_OK && result.value().equals("ok");
+ } catch (Exception e) {
+ throw asRestApiException("Cannot get active", e);
+ }
}
@Override
diff --git a/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java b/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java
index b852c4d..a04be30 100644
--- a/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java
+++ b/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java
@@ -401,7 +401,11 @@
@Override
public String topic() throws RestApiException {
- return getTopic.apply(change).value();
+ try {
+ return getTopic.apply(change).value();
+ } catch (Exception e) {
+ throw asRestApiException("Cannot get topic", e);
+ }
}
@Override
diff --git a/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java b/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java
index f1bd690..85758c1 100644
--- a/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java
+++ b/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java
@@ -624,7 +624,11 @@
@Override
public String description() throws RestApiException {
- return getDescription.apply(revision).value();
+ try {
+ return getDescription.apply(revision).value();
+ } catch (Exception e) {
+ throw asRestApiException("Cannot get description", e);
+ }
}
@Override
diff --git a/java/com/google/gerrit/server/api/config/ServerImpl.java b/java/com/google/gerrit/server/api/config/ServerImpl.java
index 4ca842b..ab40ec8 100644
--- a/java/com/google/gerrit/server/api/config/ServerImpl.java
+++ b/java/com/google/gerrit/server/api/config/ServerImpl.java
@@ -156,7 +156,11 @@
}
@Override
- public List<TopMenu.MenuEntry> topMenus() {
- return listTopMenus.apply(new ConfigResource()).value();
+ public List<TopMenu.MenuEntry> topMenus() throws RestApiException {
+ try {
+ return listTopMenus.apply(new ConfigResource()).value();
+ } catch (Exception e) {
+ throw asRestApiException("Cannot get top menus", e);
+ }
}
}
diff --git a/java/com/google/gerrit/server/api/groups/GroupApiImpl.java b/java/com/google/gerrit/server/api/groups/GroupApiImpl.java
index 5e58d49..bb04ab4 100644
--- a/java/com/google/gerrit/server/api/groups/GroupApiImpl.java
+++ b/java/com/google/gerrit/server/api/groups/GroupApiImpl.java
@@ -136,7 +136,11 @@
@Override
public String name() throws RestApiException {
- return getName.apply(rsrc).value();
+ try {
+ return getName.apply(rsrc).value();
+ } catch (Exception e) {
+ throw asRestApiException("Cannot get group name", e);
+ }
}
@Override
@@ -172,7 +176,11 @@
@Override
public String description() throws RestApiException {
- return getDescription.apply(rsrc).value();
+ try {
+ return getDescription.apply(rsrc).value();
+ } catch (Exception e) {
+ throw asRestApiException("Cannot get group description", e);
+ }
}
@Override
@@ -188,7 +196,11 @@
@Override
public GroupOptionsInfo options() throws RestApiException {
- return getOptions.apply(rsrc).value();
+ try {
+ return getOptions.apply(rsrc).value();
+ } catch (Exception e) {
+ throw asRestApiException("Cannot get group options", e);
+ }
}
@Override
diff --git a/java/com/google/gerrit/server/api/plugins/PluginApiImpl.java b/java/com/google/gerrit/server/api/plugins/PluginApiImpl.java
index 95912e4..3932177 100644
--- a/java/com/google/gerrit/server/api/plugins/PluginApiImpl.java
+++ b/java/com/google/gerrit/server/api/plugins/PluginApiImpl.java
@@ -14,6 +14,8 @@
package com.google.gerrit.server.api.plugins;
+import static com.google.gerrit.server.api.ApiUtil.asRestApiException;
+
import com.google.gerrit.extensions.api.plugins.PluginApi;
import com.google.gerrit.extensions.common.Input;
import com.google.gerrit.extensions.common.PluginInfo;
@@ -53,7 +55,11 @@
@Override
public PluginInfo get() throws RestApiException {
- return getStatus.apply(resource).value();
+ try {
+ return getStatus.apply(resource).value();
+ } catch (Exception e) {
+ throw asRestApiException("Cannot get status", e);
+ }
}
@Override
diff --git a/java/com/google/gerrit/server/api/plugins/PluginsImpl.java b/java/com/google/gerrit/server/api/plugins/PluginsImpl.java
index e45b3e6..c275093 100644
--- a/java/com/google/gerrit/server/api/plugins/PluginsImpl.java
+++ b/java/com/google/gerrit/server/api/plugins/PluginsImpl.java
@@ -14,6 +14,8 @@
package com.google.gerrit.server.api.plugins;
+import static com.google.gerrit.server.api.ApiUtil.asRestApiException;
+
import com.google.gerrit.extensions.api.plugins.InstallPluginInput;
import com.google.gerrit.extensions.api.plugins.PluginApi;
import com.google.gerrit.extensions.api.plugins.Plugins;
@@ -27,7 +29,6 @@
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
-import java.io.IOException;
import java.util.SortedMap;
@Singleton
@@ -59,7 +60,11 @@
return new ListRequest() {
@Override
public SortedMap<String, PluginInfo> getAsMap() throws RestApiException {
- return listProvider.get().request(this).apply(TopLevelResource.INSTANCE).value();
+ try {
+ return listProvider.get().request(this).apply(TopLevelResource.INSTANCE).value();
+ } catch (Exception e) {
+ throw asRestApiException("Cannot list plugins", e);
+ }
}
};
}
@@ -87,8 +92,8 @@
Response<PluginInfo> created =
installProvider.get().setName(name).apply(TopLevelResource.INSTANCE, input);
return pluginApi.create(plugins.parse(created.value().id));
- } catch (IOException e) {
- throw new RestApiException("could not install plugin", e);
+ } catch (Exception e) {
+ throw asRestApiException("Cannot install plugin", e);
}
}
}
diff --git a/java/com/google/gerrit/server/api/projects/BranchApiImpl.java b/java/com/google/gerrit/server/api/projects/BranchApiImpl.java
index 7def99e..c7cca6f 100644
--- a/java/com/google/gerrit/server/api/projects/BranchApiImpl.java
+++ b/java/com/google/gerrit/server/api/projects/BranchApiImpl.java
@@ -119,8 +119,8 @@
public List<ReflogEntryInfo> reflog() throws RestApiException {
try {
return getReflog.apply(resource()).value();
- } catch (IOException | PermissionBackendException e) {
- throw new RestApiException("Cannot retrieve reflog", e);
+ } catch (Exception e) {
+ throw asRestApiException("Cannot retrieve reflog", e);
}
}
diff --git a/java/com/google/gerrit/server/api/projects/ChildProjectApiImpl.java b/java/com/google/gerrit/server/api/projects/ChildProjectApiImpl.java
index 22bb076..1f950bd 100644
--- a/java/com/google/gerrit/server/api/projects/ChildProjectApiImpl.java
+++ b/java/com/google/gerrit/server/api/projects/ChildProjectApiImpl.java
@@ -14,6 +14,8 @@
package com.google.gerrit.server.api.projects;
+import static com.google.gerrit.server.api.ApiUtil.asRestApiException;
+
import com.google.gerrit.extensions.api.projects.ChildProjectApi;
import com.google.gerrit.extensions.common.ProjectInfo;
import com.google.gerrit.extensions.restapi.RestApiException;
@@ -43,7 +45,11 @@
@Override
public ProjectInfo get(boolean recursive) throws RestApiException {
- getChildProject.setRecursive(recursive);
- return getChildProject.apply(rsrc).value();
+ try {
+ getChildProject.setRecursive(recursive);
+ return getChildProject.apply(rsrc).value();
+ } catch (Exception e) {
+ throw asRestApiException("Cannot child project", e);
+ }
}
}
diff --git a/java/com/google/gerrit/server/api/projects/DashboardApiImpl.java b/java/com/google/gerrit/server/api/projects/DashboardApiImpl.java
index 786ab95..61736f6 100644
--- a/java/com/google/gerrit/server/api/projects/DashboardApiImpl.java
+++ b/java/com/google/gerrit/server/api/projects/DashboardApiImpl.java
@@ -68,7 +68,7 @@
public DashboardInfo get(boolean inherited) throws RestApiException {
try {
return get.get().setInherited(inherited).apply(resource()).value();
- } catch (IOException | PermissionBackendException | ConfigInvalidException e) {
+ } catch (Exception e) {
throw asRestApiException("Cannot read dashboard", e);
}
}
diff --git a/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java b/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java
index 207f4bc..dc968f6 100644
--- a/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java
+++ b/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java
@@ -368,7 +368,11 @@
@Override
public String description() throws RestApiException {
- return getDescription.apply(checkExists()).value();
+ try {
+ return getDescription.apply(checkExists()).value();
+ } catch (Exception e) {
+ throw asRestApiException("Cannot get description", e);
+ }
}
@Override
@@ -427,7 +431,11 @@
@Override
public ConfigInfo config() throws RestApiException {
- return getConfig.apply(checkExists()).value();
+ try {
+ return getConfig.apply(checkExists()).value();
+ } catch (Exception e) {
+ throw asRestApiException("Cannot get config", e);
+ }
}
@Override
diff --git a/java/com/google/gerrit/server/restapi/access/ListAccess.java b/java/com/google/gerrit/server/restapi/access/ListAccess.java
index 437f04c..740a0a4 100644
--- a/java/com/google/gerrit/server/restapi/access/ListAccess.java
+++ b/java/com/google/gerrit/server/restapi/access/ListAccess.java
@@ -15,16 +15,12 @@
package com.google.gerrit.server.restapi.access;
import com.google.gerrit.extensions.api.access.ProjectAccessInfo;
-import com.google.gerrit.extensions.restapi.ResourceConflictException;
-import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestReadView;
import com.google.gerrit.extensions.restapi.TopLevelResource;
import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.restapi.project.GetAccess;
import com.google.inject.Inject;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -49,8 +45,7 @@
@Override
public Response<Map<String, ProjectAccessInfo>> apply(TopLevelResource resource)
- throws ResourceNotFoundException, ResourceConflictException, IOException,
- PermissionBackendException {
+ throws Exception {
Map<String, ProjectAccessInfo> access = new TreeMap<>();
for (String p : projects) {
access.put(p, getAccess.apply(Project.nameKey(p)));
diff --git a/java/com/google/gerrit/server/restapi/account/Stars.java b/java/com/google/gerrit/server/restapi/account/Stars.java
index bbbfa27..cdaa99d 100644
--- a/java/com/google/gerrit/server/restapi/account/Stars.java
+++ b/java/com/google/gerrit/server/restapi/account/Stars.java
@@ -98,8 +98,7 @@
@Override
@SuppressWarnings("unchecked")
- public Response<List<ChangeInfo>> apply(AccountResource rsrc)
- throws BadRequestException, AuthException, PermissionBackendException {
+ public Response<List<ChangeInfo>> apply(AccountResource rsrc) throws Exception {
if (!self.get().hasSameAccountId(rsrc.getUser())) {
throw new AuthException("not allowed to list stars of another account");
}
diff --git a/java/com/google/gerrit/server/restapi/change/ChangeMessages.java b/java/com/google/gerrit/server/restapi/change/ChangeMessages.java
index 595d570..fae9180 100644
--- a/java/com/google/gerrit/server/restapi/change/ChangeMessages.java
+++ b/java/com/google/gerrit/server/restapi/change/ChangeMessages.java
@@ -22,7 +22,6 @@
import com.google.gerrit.extensions.restapi.RestView;
import com.google.gerrit.server.change.ChangeMessageResource;
import com.google.gerrit.server.change.ChangeResource;
-import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.util.List;
@@ -50,8 +49,7 @@
}
@Override
- public ChangeMessageResource parse(ChangeResource parent, IdString id)
- throws ResourceNotFoundException, PermissionBackendException {
+ public ChangeMessageResource parse(ChangeResource parent, IdString id) throws Exception {
String uuid = id.get();
List<ChangeMessageInfo> changeMessages = listChangeMessages.apply(parent).value();
diff --git a/java/com/google/gerrit/server/restapi/change/Rebase.java b/java/com/google/gerrit/server/restapi/change/Rebase.java
index bd3742b..1eccab1 100644
--- a/java/com/google/gerrit/server/restapi/change/Rebase.java
+++ b/java/com/google/gerrit/server/restapi/change/Rebase.java
@@ -275,7 +275,7 @@
@Override
protected Response<ChangeInfo> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, RebaseInput input)
- throws UpdateException, RestApiException, IOException, PermissionBackendException {
+ throws Exception {
PatchSet ps = psUtil.current(rsrc.getNotes());
if (ps == null) {
throw new ResourceConflictException("current revision is missing");
diff --git a/java/com/google/gerrit/server/restapi/change/Submit.java b/java/com/google/gerrit/server/restapi/change/Submit.java
index b62e475..9216eec 100644
--- a/java/com/google/gerrit/server/restapi/change/Submit.java
+++ b/java/com/google/gerrit/server/restapi/change/Submit.java
@@ -454,9 +454,7 @@
}
@Override
- public Response<ChangeInfo> apply(ChangeResource rsrc, SubmitInput input)
- throws RestApiException, RepositoryNotFoundException, IOException,
- PermissionBackendException, UpdateException, ConfigInvalidException {
+ public Response<ChangeInfo> apply(ChangeResource rsrc, SubmitInput input) throws Exception {
PatchSet ps = psUtil.current(rsrc.getNotes());
if (ps == null) {
throw new ResourceConflictException("current revision is missing");
diff --git a/java/com/google/gerrit/server/restapi/group/AddMembers.java b/java/com/google/gerrit/server/restapi/group/AddMembers.java
index 1ab1f38..6efca52 100644
--- a/java/com/google/gerrit/server/restapi/group/AddMembers.java
+++ b/java/com/google/gerrit/server/restapi/group/AddMembers.java
@@ -24,7 +24,6 @@
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.DefaultInput;
import com.google.gerrit.extensions.restapi.IdString;
-import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestCollectionCreateView;
@@ -223,8 +222,7 @@
@Override
public Response<AccountInfo> apply(GroupResource resource, IdString id, Input input)
- throws AuthException, MethodNotAllowedException, ResourceNotFoundException, IOException,
- ConfigInvalidException, PermissionBackendException {
+ throws Exception {
AddMembers.Input in = new AddMembers.Input();
in._oneMember = id.get();
try {
diff --git a/java/com/google/gerrit/server/restapi/group/AddSubgroups.java b/java/com/google/gerrit/server/restapi/group/AddSubgroups.java
index 3a3b9f4..3a07ae0 100644
--- a/java/com/google/gerrit/server/restapi/group/AddSubgroups.java
+++ b/java/com/google/gerrit/server/restapi/group/AddSubgroups.java
@@ -24,7 +24,6 @@
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.DefaultInput;
import com.google.gerrit.extensions.restapi.IdString;
-import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestCollectionCreateView;
@@ -144,8 +143,7 @@
@Override
public Response<GroupInfo> apply(GroupResource resource, IdString id, Input input)
- throws AuthException, MethodNotAllowedException, ResourceNotFoundException, IOException,
- ConfigInvalidException, PermissionBackendException {
+ throws Exception {
AddSubgroups.Input in = new AddSubgroups.Input();
in.groups = ImmutableList.of(id.get());
try {
diff --git a/java/com/google/gerrit/server/restapi/group/ListGroups.java b/java/com/google/gerrit/server/restapi/group/ListGroups.java
index 37ea55c..8132457 100644
--- a/java/com/google/gerrit/server/restapi/group/ListGroups.java
+++ b/java/com/google/gerrit/server/restapi/group/ListGroups.java
@@ -248,8 +248,7 @@
}
@Override
- public Response<SortedMap<String, GroupInfo>> apply(TopLevelResource resource)
- throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException {
+ public Response<SortedMap<String, GroupInfo>> apply(TopLevelResource resource) throws Exception {
SortedMap<String, GroupInfo> output = new TreeMap<>();
for (GroupInfo info : get()) {
output.put(MoreObjects.firstNonNull(info.name, "Group " + Url.decode(info.id)), info);
@@ -258,8 +257,7 @@
return Response.ok(output);
}
- public List<GroupInfo> get()
- throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException {
+ public List<GroupInfo> get() throws Exception {
if (!Strings.isNullOrEmpty(suggest)) {
return suggestGroups();
}
diff --git a/java/com/google/gerrit/server/restapi/project/CreateDashboard.java b/java/com/google/gerrit/server/restapi/project/CreateDashboard.java
index 9904b1f..314df73 100644
--- a/java/com/google/gerrit/server/restapi/project/CreateDashboard.java
+++ b/java/com/google/gerrit/server/restapi/project/CreateDashboard.java
@@ -19,15 +19,12 @@
import com.google.gerrit.extensions.restapi.IdString;
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
import com.google.gerrit.extensions.restapi.Response;
-import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestCollectionCreateView;
-import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.project.DashboardResource;
import com.google.gerrit.server.project.ProjectResource;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
-import java.io.IOException;
import org.kohsuke.args4j.Option;
@Singleton
@@ -45,7 +42,7 @@
@Override
public Response<DashboardInfo> apply(ProjectResource parent, IdString id, SetDashboardInput input)
- throws RestApiException, IOException, PermissionBackendException {
+ throws Exception {
parent.getProjectState().checkStatePermitsWrite();
if (!DashboardsCollection.isDefaultDashboard(id)) {
throw new ResourceNotFoundException(id);
diff --git a/java/com/google/gerrit/server/restapi/project/DeleteDashboard.java b/java/com/google/gerrit/server/restapi/project/DeleteDashboard.java
index 2702d58..9d9e5f5 100644
--- a/java/com/google/gerrit/server/restapi/project/DeleteDashboard.java
+++ b/java/com/google/gerrit/server/restapi/project/DeleteDashboard.java
@@ -18,14 +18,11 @@
import com.google.gerrit.extensions.api.projects.SetDashboardInput;
import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
import com.google.gerrit.extensions.restapi.Response;
-import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
-import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.project.DashboardResource;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
-import java.io.IOException;
@Singleton
public class DeleteDashboard implements RestModifyView<DashboardResource, SetDashboardInput> {
@@ -38,7 +35,7 @@
@Override
public Response<DashboardInfo> apply(DashboardResource resource, SetDashboardInput input)
- throws RestApiException, IOException, PermissionBackendException {
+ throws Exception {
if (resource.isProjectDefault()) {
SetDashboardInput in = new SetDashboardInput();
in.commitMessage = input != null ? input.commitMessage : null;
diff --git a/java/com/google/gerrit/server/restapi/project/GetAccess.java b/java/com/google/gerrit/server/restapi/project/GetAccess.java
index 51374ab..31f1254 100644
--- a/java/com/google/gerrit/server/restapi/project/GetAccess.java
+++ b/java/com/google/gerrit/server/restapi/project/GetAccess.java
@@ -117,9 +117,7 @@
this.projectConfigFactory = projectConfigFactory;
}
- public ProjectAccessInfo apply(Project.NameKey nameKey)
- throws ResourceNotFoundException, ResourceConflictException, IOException,
- PermissionBackendException {
+ public ProjectAccessInfo apply(Project.NameKey nameKey) throws Exception {
ProjectState state = projectCache.checkedGet(nameKey);
if (state == null) {
throw new ResourceNotFoundException(nameKey.get());
diff --git a/java/com/google/gerrit/server/restapi/project/Index.java b/java/com/google/gerrit/server/restapi/project/Index.java
index bc4f668..b83946d1 100644
--- a/java/com/google/gerrit/server/restapi/project/Index.java
+++ b/java/com/google/gerrit/server/restapi/project/Index.java
@@ -22,17 +22,14 @@
import com.google.gerrit.extensions.api.projects.IndexProjectInput;
import com.google.gerrit.extensions.common.ProjectInfo;
import com.google.gerrit.extensions.restapi.Response;
-import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.index.project.ProjectIndexer;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.index.IndexExecutor;
-import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.project.ProjectResource;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
-import java.io.IOException;
import java.util.concurrent.Future;
@RequiresCapability(GlobalCapability.MAINTAIN_SERVER)
@@ -53,8 +50,7 @@
}
@Override
- public Response.Accepted apply(ProjectResource rsrc, IndexProjectInput input)
- throws IOException, PermissionBackendException, RestApiException {
+ public Response.Accepted apply(ProjectResource rsrc, IndexProjectInput input) throws Exception {
String response = "Project " + rsrc.getName() + " submitted for reindexing";
reindex(rsrc.getNameKey(), input.async);
diff --git a/java/com/google/gerrit/server/restapi/project/SetAccess.java b/java/com/google/gerrit/server/restapi/project/SetAccess.java
index c6919d4..7ddbe6c 100644
--- a/java/com/google/gerrit/server/restapi/project/SetAccess.java
+++ b/java/com/google/gerrit/server/restapi/project/SetAccess.java
@@ -20,13 +20,10 @@
import com.google.gerrit.exceptions.InvalidNameException;
import com.google.gerrit.extensions.api.access.ProjectAccessInfo;
import com.google.gerrit.extensions.api.access.ProjectAccessInput;
-import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
-import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestModifyView;
-import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CreateGroupPermissionSyncer;
import com.google.gerrit.server.IdentifiedUser;
@@ -34,7 +31,6 @@
import com.google.gerrit.server.git.meta.MetaDataUpdate;
import com.google.gerrit.server.permissions.GlobalPermission;
import com.google.gerrit.server.permissions.PermissionBackend;
-import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.permissions.RefPermission;
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectConfig;
@@ -42,7 +38,6 @@
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
-import java.io.IOException;
import java.util.List;
import org.eclipse.jgit.errors.ConfigInvalidException;
@@ -82,8 +77,7 @@
@Override
public Response<ProjectAccessInfo> apply(ProjectResource rsrc, ProjectAccessInput input)
- throws ResourceNotFoundException, ResourceConflictException, IOException, AuthException,
- BadRequestException, UnprocessableEntityException, PermissionBackendException {
+ throws Exception {
MetaDataUpdate.User metaDataUpdateUser = metaDataUpdateFactory.get();
ProjectConfig config;
diff --git a/java/com/google/gerrit/server/restapi/project/SetDashboard.java b/java/com/google/gerrit/server/restapi/project/SetDashboard.java
index 2804b7c..e8e0c0d 100644
--- a/java/com/google/gerrit/server/restapi/project/SetDashboard.java
+++ b/java/com/google/gerrit/server/restapi/project/SetDashboard.java
@@ -18,14 +18,11 @@
import com.google.gerrit.extensions.api.projects.SetDashboardInput;
import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
import com.google.gerrit.extensions.restapi.Response;
-import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
-import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.project.DashboardResource;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
-import java.io.IOException;
@Singleton
public class SetDashboard implements RestModifyView<DashboardResource, SetDashboardInput> {
@@ -38,7 +35,7 @@
@Override
public Response<DashboardInfo> apply(DashboardResource resource, SetDashboardInput input)
- throws RestApiException, IOException, PermissionBackendException {
+ throws Exception {
if (resource.isProjectDefault()) {
return defaultSetter.get().apply(resource, input);
}
diff --git a/java/com/google/gerrit/server/restapi/project/SetDefaultDashboard.java b/java/com/google/gerrit/server/restapi/project/SetDefaultDashboard.java
index 1ea3efd..3ec3be5 100644
--- a/java/com/google/gerrit/server/restapi/project/SetDefaultDashboard.java
+++ b/java/com/google/gerrit/server/restapi/project/SetDefaultDashboard.java
@@ -23,12 +23,10 @@
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
import com.google.gerrit.extensions.restapi.Response;
-import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.git.meta.MetaDataUpdate;
import com.google.gerrit.server.permissions.PermissionBackend;
-import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.permissions.ProjectPermission;
import com.google.gerrit.server.project.DashboardResource;
import com.google.gerrit.server.project.ProjectCache;
@@ -36,7 +34,6 @@
import com.google.gerrit.server.project.ProjectResource;
import com.google.inject.Inject;
import com.google.inject.Provider;
-import java.io.IOException;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.errors.RepositoryNotFoundException;
import org.kohsuke.args4j.Option;
@@ -70,7 +67,7 @@
@Override
public Response<DashboardInfo> apply(DashboardResource rsrc, SetDashboardInput input)
- throws RestApiException, IOException, PermissionBackendException {
+ throws Exception {
if (input == null) {
input = new SetDashboardInput(); // Delete would set input to null.
}
diff --git a/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java b/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java
index 913365b..2edafb9 100644
--- a/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java
+++ b/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java
@@ -114,11 +114,12 @@
}
} catch (RestApiException e) {
throw die(e);
+ } catch (Exception e) {
+ throw new Failure(1, "unavailable", e);
}
}
- private GroupResource createGroup()
- throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException {
+ private GroupResource createGroup() throws Exception {
GroupInput input = new GroupInput();
input.description = groupDescription;
input.visibleToAll = visibleToAll;
diff --git a/java/com/google/gerrit/sshd/commands/FlushCaches.java b/java/com/google/gerrit/sshd/commands/FlushCaches.java
index 98562b0..0c9bbb5 100644
--- a/java/com/google/gerrit/sshd/commands/FlushCaches.java
+++ b/java/com/google/gerrit/sshd/commands/FlushCaches.java
@@ -23,7 +23,6 @@
import com.google.gerrit.extensions.annotations.RequiresAnyCapability;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.server.config.ConfigResource;
-import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.restapi.config.ListCaches;
import com.google.gerrit.server.restapi.config.ListCaches.OutputFormat;
import com.google.gerrit.server.restapi.config.PostCaches;
@@ -81,13 +80,13 @@
}
} catch (RestApiException e) {
throw die(e.getMessage());
- } catch (PermissionBackendException e) {
+ } catch (Exception e) {
throw new Failure(1, "unavailable", e);
}
}
@SuppressWarnings("unchecked")
- private void doList() {
+ private void doList() throws Exception {
for (String name :
(List<String>)
listCaches.setFormat(OutputFormat.LIST).apply(new ConfigResource()).value()) {
diff --git a/java/com/google/gerrit/sshd/commands/SetAccountCommand.java b/java/com/google/gerrit/sshd/commands/SetAccountCommand.java
index 7509ac9..23f9a24 100644
--- a/java/com/google/gerrit/sshd/commands/SetAccountCommand.java
+++ b/java/com/google/gerrit/sshd/commands/SetAccountCommand.java
@@ -211,8 +211,7 @@
}
}
- private void setAccount()
- throws IOException, UnloggedFailure, ConfigInvalidException, PermissionBackendException {
+ private void setAccount() throws Failure {
user = genericUserFactory.create(id);
rsrc = new AccountResource(user.asIdentifiedUser());
try {
@@ -267,6 +266,8 @@
}
} catch (RestApiException e) {
throw die(e.getMessage());
+ } catch (Exception e) {
+ throw new Failure(1, "unavailable", e);
}
}
@@ -279,9 +280,7 @@
}
}
- private void deleteSshKeys(List<String> sshKeys)
- throws RestApiException, RepositoryNotFoundException, IOException, ConfigInvalidException,
- PermissionBackendException {
+ private void deleteSshKeys(List<String> sshKeys) throws Exception {
List<SshKeyInfo> infos = getSshKeys.apply(rsrc).value();
if (sshKeys.contains("ALL")) {
for (SshKeyInfo i : infos) {
@@ -318,8 +317,7 @@
}
}
- private void deleteEmail(String email)
- throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException {
+ private void deleteEmail(String email) throws Exception {
if (email.equals("ALL")) {
List<EmailInfo> emails = getEmails.apply(rsrc).value();
for (EmailInfo e : emails) {
@@ -330,8 +328,7 @@
}
}
- private void putPreferred(String email)
- throws RestApiException, IOException, PermissionBackendException, ConfigInvalidException {
+ private void putPreferred(String email) throws Exception {
for (EmailInfo e : getEmails.apply(rsrc).value()) {
if (e.email.equals(email)) {
putPreferred.apply(new AccountResource.Email(user.asIdentifiedUser(), email), null);
diff --git a/java/com/google/gerrit/sshd/commands/SetParentCommand.java b/java/com/google/gerrit/sshd/commands/SetParentCommand.java
index 449d419..c689321 100644
--- a/java/com/google/gerrit/sshd/commands/SetParentCommand.java
+++ b/java/com/google/gerrit/sshd/commands/SetParentCommand.java
@@ -16,14 +16,12 @@
import static java.util.stream.Collectors.toList;
-import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.extensions.api.projects.ParentInput;
import com.google.gerrit.extensions.common.ProjectInfo;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
-import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.permissions.PermissionBackendException;
@@ -112,7 +110,7 @@
childProjects.addAll(getChildrenForReparenting(oldParent));
} catch (PermissionBackendException e) {
throw new Failure(1, "permissions unavailable", e);
- } catch (StorageException | RestApiException e) {
+ } catch (Exception e) {
throw new Failure(1, "failure in request", e);
}
}
@@ -148,8 +146,7 @@
* list of child projects does not contain projects that were specified to be excluded from
* reparenting.
*/
- private List<Project.NameKey> getChildrenForReparenting(ProjectState parent)
- throws PermissionBackendException, RestApiException {
+ private List<Project.NameKey> getChildrenForReparenting(ProjectState parent) throws Exception {
final List<Project.NameKey> childProjects = new ArrayList<>();
final List<Project.NameKey> excluded = new ArrayList<>(excludedChildren.size());
for (ProjectState excludedChild : excludedChildren) {
diff --git a/java/com/google/gerrit/sshd/commands/ShowCaches.java b/java/com/google/gerrit/sshd/commands/ShowCaches.java
index 3c617b0..cee06e1 100644
--- a/java/com/google/gerrit/sshd/commands/ShowCaches.java
+++ b/java/com/google/gerrit/sshd/commands/ShowCaches.java
@@ -110,7 +110,7 @@
}
@Override
- protected void run() throws UnloggedFailure {
+ protected void run() throws Failure {
nw = columns - 50;
Date now = new Date();
stdout.format(
@@ -161,38 +161,42 @@
}
stdout.print("+---------------------+---------+---------+\n");
- Collection<CacheInfo> caches = getCaches();
- printMemoryCoreCaches(caches);
- printMemoryPluginCaches(caches);
- printDiskCaches(caches);
- stdout.print('\n');
-
- boolean showJvm;
try {
- permissionBackend.user(self).check(GlobalPermission.MAINTAIN_SERVER);
- showJvm = true;
- } catch (AuthException | PermissionBackendException e) {
- // Silently ignore and do not display detailed JVM information.
- showJvm = false;
- }
- if (showJvm) {
- sshSummary();
+ Collection<CacheInfo> caches = getCaches();
+ printMemoryCoreCaches(caches);
+ printMemoryPluginCaches(caches);
+ printDiskCaches(caches);
+ stdout.print('\n');
- SummaryInfo summary =
- getSummary.setGc(gc).setJvm(showJVM).apply(new ConfigResource()).value();
- taskSummary(summary.taskSummary);
- memSummary(summary.memSummary);
- threadSummary(summary.threadSummary);
-
- if (showJVM && summary.jvmSummary != null) {
- jvmSummary(summary.jvmSummary);
+ boolean showJvm;
+ try {
+ permissionBackend.user(self).check(GlobalPermission.MAINTAIN_SERVER);
+ showJvm = true;
+ } catch (AuthException | PermissionBackendException e) {
+ // Silently ignore and do not display detailed JVM information.
+ showJvm = false;
}
+ if (showJvm) {
+ sshSummary();
+
+ SummaryInfo summary =
+ getSummary.setGc(gc).setJvm(showJVM).apply(new ConfigResource()).value();
+ taskSummary(summary.taskSummary);
+ memSummary(summary.memSummary);
+ threadSummary(summary.threadSummary);
+
+ if (showJVM && summary.jvmSummary != null) {
+ jvmSummary(summary.jvmSummary);
+ }
+ }
+ } catch (Exception e) {
+ throw new Failure(1, "unavailable", e);
}
stdout.flush();
}
- private Collection<CacheInfo> getCaches() {
+ private Collection<CacheInfo> getCaches() throws Exception {
@SuppressWarnings("unchecked")
Map<String, CacheInfo> caches =
(Map<String, CacheInfo>) listCaches.apply(new ConfigResource()).value();
diff --git a/java/com/google/gerrit/sshd/commands/ShowQueue.java b/java/com/google/gerrit/sshd/commands/ShowQueue.java
index 57562a7..a6ed629 100644
--- a/java/com/google/gerrit/sshd/commands/ShowQueue.java
+++ b/java/com/google/gerrit/sshd/commands/ShowQueue.java
@@ -99,6 +99,8 @@
throw die(e);
} catch (PermissionBackendException e) {
throw new Failure(1, "permission backend unavailable", e);
+ } catch (Exception e) {
+ throw new Failure(1, "unavailable", e);
}
boolean viewAll = permissionBackend.user(currentUser).testOrFalse(GlobalPermission.VIEW_QUEUE);