Do not get HttpServletRequest in SSH and SendMail threads
When asking for the canonical web url in a SSH or SendMail
thread it isn't useful to request the HttpServletRequest and
cause Guice exceptions: it is way better to just give up and
accept the default behaviour in Gerrit.
Also, when the HttpServletRequest cannot be obtained
the Guice exception to manage is ProvisionException.
Change-Id: Ife5f71285a91c95b161aeb2ce4684ba2261d1aa6
diff --git a/src/main/java/com/gerritforge/gerrit/modules/virtualhost/VirtualHostHttpCanonicalWebUrlProvider.java b/src/main/java/com/gerritforge/gerrit/modules/virtualhost/VirtualHostHttpCanonicalWebUrlProvider.java
index 77e5995..96477c6 100644
--- a/src/main/java/com/gerritforge/gerrit/modules/virtualhost/VirtualHostHttpCanonicalWebUrlProvider.java
+++ b/src/main/java/com/gerritforge/gerrit/modules/virtualhost/VirtualHostHttpCanonicalWebUrlProvider.java
@@ -19,8 +19,8 @@
import com.google.gerrit.httpd.HttpCanonicalWebUrlProvider;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.inject.Inject;
-import com.google.inject.OutOfScopeException;
import com.google.inject.Provider;
+import com.google.inject.ProvisionException;
import com.google.inject.Singleton;
import java.net.URI;
import java.util.Optional;
@@ -70,12 +70,21 @@
@Nullable
private static String extractServerNameWhenInScope(Provider<HttpServletRequest> provider) {
- try {
- return provider.get().getServerName();
- } catch (OutOfScopeException e) {
- logger.atWarning().withCause(e).log(
- "Unable to determine the virtual-host servername: current thread is out of an HTTP request scope or outside a call stack coming from a GuiceServlet filter");
+ String currentThreadName = Thread.currentThread().getName();
+ // SSH threads and associated delegate (e.g. ReceiveCommits-*-for-SSH) and SendMail would
+ // never have an incoming HTTP servlet request context, therefore avoid to invoke Guice as
+ // it would surely result in a ProvisionException
+ if (currentThreadName.contains("SSH") || currentThreadName.contains("SendEmail")) {
return null;
}
+
+ try {
+ return provider.get().getServerName();
+ } catch (ProvisionException e) {
+ logger.atWarning().withCause(e).log(
+ "Unable to determine the virtual-host servername: current thread is out of an HTTP request scope or outside a call stack coming from a GuiceServlet filter");
+ }
+
+ return null;
}
}