Reputation: 745
I have just setup gerrit 2.12.4 on a turnkey revision control 14.1 and when I try the Register New Email feature I receive a 500 Internal Error. I receive the following error message in the error_log and don't know how to interpret it.
Here is the config:
[gerrit]
basePath = /srv/repos/git/gerrit2/
canonicalWebUrl = http://revision-control:7900/
[database]
type = mysql
hostname = localhost
database = reviewdb
username = gerrit2
[index]
type = LUCENE
[auth]
type = OPENID
[receive]
enableSignedPush = false
[sendemail]
enable = true
smtpServer = smtp.office365.com
smtpServerPort = 587
smtpUser = [email protected]
smtpEncryption = ssl
sslVerify = false
[container]
user = gerrit2
javaHome = /usr/lib/jvm/java-7-openjdk-amd64/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = http://*:7900/
[cache]
directory = cache
I suspect the process fails way before the smtp authentication. I have checked the java path and it seems to be in order.
I have also given full permission to gerrit2 on both the java folder and the gerrit folder.
Any help would be greatly appreciated.
[2016-09-07 20:55:23,439] [main] INFO org.eclipse.jetty.server.ServerConnector : Started ServerConnector@4a9829f1{HTTP/1.1}{0.0.0.0:7900}
[2016-09-07 20:55:23,440] [main] INFO org.eclipse.jetty.server.Server : Started @20499ms
[2016-09-07 20:55:23,442] [main] INFO com.google.gerrit.pgm.Daemon : Gerrit Code Review 2.12.4 ready
[2016-09-07 20:56:54,864] [HTTP-50] WARN org.eclipse.jetty.servlet.ServletHandler : Error for /accounts/self/emails/[email protected]
java.lang.ExceptionInInitializerError
at com.google.gerrit.server.mail.OutgoingEmail.add(OutgoingEmail.java:384)
at com.google.gerrit.server.mail.RegisterNewEmailSender.init(RegisterNewEmailSender.java:49)
at com.google.gerrit.server.mail.OutgoingEmail.send(OutgoingEmail.java:92)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:134)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:101)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:42)
at com.google.gerrit.httpd.restapi.RestApiServlet.service(RestApiServlet.java:328)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:277)
at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:182)
at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
at com.google.gerrit.httpd.GetUserFilter.doFilter(GetUserFilter.java:82)
at com.google.gwtexpui.server.CacheControlFilter.doFilter(CacheControlFilter.java:73)
at com.google.gerrit.httpd.RunAsFilter.doFilter(RunAsFilter.java:117)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy$1.doFilter(AllRequestFilter.java:136)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy.doFilter(AllRequestFilter.java:105)
at com.google.gerrit.httpd.RequestContextFilter.doFilter(RequestContextFilter.java:75)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:119)
at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:133)
at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:130)
at com.google.inject.servlet.GuiceFilter$Context.call(GuiceFilter.java:203)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:130)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:499)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Can only invoke this method before calling getInstance
at org.apache.commons.validator.routines.DomainValidator.updateTLDOverride(DomainValidator.java:1680)
at com.google.gerrit.server.mail.OutgoingEmailValidator.<clinit>(OutgoingEmailValidator.java:24)
... 41 more
[2016-09-07 20:56:54,866] [HTTP-50] ERROR com.google.gerrit.pgm.http.jetty.HiddenErrorHandler : Error in PUT /accounts/self/emails/[email protected]
java.lang.ExceptionInInitializerError
at com.google.gerrit.server.mail.OutgoingEmail.add(OutgoingEmail.java:384)
at com.google.gerrit.server.mail.RegisterNewEmailSender.init(RegisterNewEmailSender.java:49)
at com.google.gerrit.server.mail.OutgoingEmail.send(OutgoingEmail.java:92)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:134)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:101)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:42)
at com.google.gerrit.httpd.restapi.RestApiServlet.service(RestApiServlet.java:328)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:277)
at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:182)
at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
at com.google.gerrit.httpd.GetUserFilter.doFilter(GetUserFilter.java:82)
at com.google.gwtexpui.server.CacheControlFilter.doFilter(CacheControlFilter.java:73)
at com.google.gerrit.httpd.RunAsFilter.doFilter(RunAsFilter.java:117)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy$1.doFilter(AllRequestFilter.java:136)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy.doFilter(AllRequestFilter.java:105)
at com.google.gerrit.httpd.RequestContextFilter.doFilter(RequestContextFilter.java:75)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:119)
at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:133)
at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:130)
at com.google.inject.servlet.GuiceFilter$Context.call(GuiceFilter.java:203)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:130)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:499)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Can only invoke this method before calling getInstance
at org.apache.commons.validator.routines.DomainValidator.updateTLDOverride(DomainValidator.java:1680)
at com.google.gerrit.server.mail.OutgoingEmailValidator.<clinit>(OutgoingEmailValidator.java:24)
... 41 more
Upvotes: 2
Views: 2642
Reputation: 745
It seems it was a bug in the 2.12.4 gerrit build. I received some help from the gerrit forum.
Issue and fix:
Fix usage of OutgoingEmailValidator to make sure TLD override works
The call to DomainValidator.updateTLDOverride may only be done before
the call to EmailValidator.getInstance otherwise it throws an exception.
Putting the DomainValidator.updateTLDOverride call inside a static
block doesn't seem to be safe enough. Protect it with an atomic boolean
instead.
The bug was fixed and is awaiting merge in future builds.
Upvotes: 3