My favorites | Sign in
Project Home Downloads Wiki Issues Source
New issue   Search
for
  Advanced search   Search tips   Subscriptions
Issue 3547: its-jira plugin: Issue check won't work if Gerrit has been started up while Jira is not up and running yet
6 people starred this issue and may be notified of changes. Back to list
Status:  New
Owner:  ----


Sign in to add a comment
 
Reported by Jussi.Po...@gmail.com, Sep 2, 2015
*****************************************************************
*****                                                       *****
***** !!!! THIS BUG TRACKER IS FOR GERRIT CODE REVIEW !!!!  *****
*****                                                       *****
***** DO NOT SUBMIT BUGS FOR CHROME, ANDROID, CYANOGENMOD,  *****
***** INTERNAL ISSUES WITH YOUR COMPANY'S GERRIT SETUP, ETC.*****
*****                                                       *****
*****   THOSE ISSUES BELONG IN DIFFERENT ISSUE TRACKERS     *****
*****                                                       *****
*****************************************************************

Affected Version:
Gerrit 2.11 & its-jira plugin 2.11

What steps will reproduce the problem?
1. Shutdown Jira
2. Startup Gerrit with its-jira plugin configured
3. Startup Jira
4. Push a commit with valid Jira issue ID to Gerrit code review

What is the expected output? What do you see instead?
Expected: The commit is pushed successfully

What I see:
remote: Failed to check whether or not issue XYZ-42 exists
remote: java.lang.NullPointerException
To ssh://user@mygerrit.com:29418/test
 ! [remote rejected] HEAD -> refs/for/master (Failed to check whether or not issue XYZ-42 exists)
error: failed to push some refs to 'ssh://user@mygerrit.com:29418/test'


Please provide any additional information below.
It seems that if Jira isn't up when its-jira plugin is loaded and establishes the initial connection during Gerrit startup the issue check won't work even if Jira would be back up at some point. Only Gerrit restart (while JIra is up and running for sure) will fix the situation. So if for example Jira and Gerrit are automatically stopped and started for backup purposes this could be an issue. It would be good if establishing the connection would work even if Jira connection fails during the Gerrit startup.


Log from Gerrit startup when Jira isn't running:

[2015-09-02 10:57:13,047] INFO  com.googlesource.gerrit.plugins.hooks.jira.JiraModule : JIRA is configured as ITS
[2015-09-02 10:57:14,955] ERROR com.googlesource.gerrit.plugins.hooks.jira.JiraItsFacade : I was unable to login
AxisFault
 faultCode: {http://xml.apache.org/axis/}HTTP
 faultSubcode:
 faultString: (503)Service Unavailable
 faultActor:
 faultNode:
 faultDetail:
	{}:return code:  503

	{http://xml.apache.org/axis/}HttpErrorCode:503

(503)Service Unavailable
	at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:744)
	at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
	at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
	at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
	at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at com.atlassian.jira.rpc.soap.client.JirasoapserviceV2SoapBindingStub.login(JirasoapserviceV2SoapBindingStub.java:3790)
	at com.googlesource.gerrit.plugins.hooks.jira.JiraClient.login(JiraClient.java:47)
	at com.googlesource.gerrit.plugins.hooks.jira.JiraItsFacade.login(JiraItsFacade.java:174)
	at com.googlesource.gerrit.plugins.hooks.jira.JiraItsFacade.login(JiraItsFacade.java:169)
	at com.googlesource.gerrit.plugins.hooks.jira.JiraItsFacade.client(JiraItsFacade.java:200)
	at com.googlesource.gerrit.plugins.hooks.jira.JiraItsFacade.<init>(JiraItsFacade.java:61)
	at com.googlesource.gerrit.plugins.hooks.jira.JiraModule.configure(JiraModule.java:50)
	at com.google.inject.AbstractModule.configure(AbstractModule.java:62)
	at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:253)
	at com.google.inject.spi.Elements.getElements(Elements.java:108)
	at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:135)
	at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
	at com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:225)
	at com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:232)
	at com.google.gerrit.server.plugins.ServerPlugin.startPlugin(ServerPlugin.java:187)
	at com.google.gerrit.server.plugins.ServerPlugin.start(ServerPlugin.java:170)
	at com.google.gerrit.server.plugins.PluginLoader.runPlugin(PluginLoader.java:461)
	at com.google.gerrit.server.plugins.PluginLoader.rescan(PluginLoader.java:390)
	at com.google.gerrit.server.plugins.PluginLoader.start(PluginLoader.java:295)
	at com.google.gerrit.lifecycle.LifecycleManager.start(LifecycleManager.java:74)
	at com.google.gerrit.pgm.Daemon.start(Daemon.java:293)
	at com.google.gerrit.pgm.Daemon.run(Daemon.java:205)
	at com.google.gerrit.pgm.util.AbstractProgram.main(AbstractProgram.java:64)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at com.google.gerrit.launcher.GerritLauncher.invokeProgram(GerritLauncher.java:166)
	at com.google.gerrit.launcher.GerritLauncher.mainImpl(GerritLauncher.java:93)
	at com.google.gerrit.launcher.GerritLauncher.main(GerritLauncher.java:50)
	at Main.main(Main.java:25)




Log when trying to push a commit after Gerrit has started and Jira is now already up and running:

[2015-09-02 11:03:25,399] WARN  com.googlesource.gerrit.plugins.hooks.validation.ItsValidateComment : Failed to check whether or not issue XYZ-42 exists
AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode:
 faultString: java.lang.NullPointerException
 faultActor:
 faultNode:
 faultDetail:
	{}faultData:null
	{http://xml.apache.org/axis/}hostname:jira-staging

java.lang.NullPointerException
	at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
	at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
	at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
	at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
	at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
	at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
	at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
	at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
	at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at com.atlassian.jira.rpc.soap.client.JirasoapserviceV2SoapBindingStub.getIssue(JirasoapserviceV2SoapBindingStub.java:3998)
	at com.googlesource.gerrit.plugins.hooks.jira.JiraClient.getIssue(JiraClient.java:56)
	at com.googlesource.gerrit.plugins.hooks.jira.JiraItsFacade$4.call(JiraItsFacade.java:151)
	at com.googlesource.gerrit.plugins.hooks.jira.JiraItsFacade$4.call(JiraItsFacade.java:148)
	at com.googlesource.gerrit.plugins.hooks.jira.JiraItsFacade.execute(JiraItsFacade.java:211)
	at com.googlesource.gerrit.plugins.hooks.jira.JiraItsFacade.exists(JiraItsFacade.java:148)
	at com.googlesource.gerrit.plugins.hooks.validation.ItsValidateComment.validCommit(ItsValidateComment.java:77)
	at com.googlesource.gerrit.plugins.hooks.validation.ItsValidateComment.onCommitReceived(ItsValidateComment.java:158)
	at com.google.gerrit.server.git.validators.CommitValidators$PluginCommitValidationListener.onCommitReceived(CommitValidators.java:364)
	at com.google.gerrit.server.git.validators.CommitValidators.validateForReceiveCommits(CommitValidators.java:119)
	at com.google.gerrit.server.git.ReceiveCommits.validCommit(ReceiveCommits.java:2422)
	at com.google.gerrit.server.git.ReceiveCommits.selectNewAndReplacedChangesFromMagicBranch(ReceiveCommits.java:1504)
	at com.google.gerrit.server.git.ReceiveCommits.processCommands(ReceiveCommits.java:564)
	at com.google.gerrit.server.git.AsyncReceiveCommits$Worker.run(AsyncReceiveCommits.java:89)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at com.google.gerrit.server.util.RequestScopePropagator$5.call(RequestScopePropagator.java:222)
	at com.google.gerrit.server.util.RequestScopePropagator$4.call(RequestScopePropagator.java:201)
	at com.google.gerrit.server.util.ThreadLocalRequestScopePropagator$1.call(ThreadLocalRequestScopePropagator.java:55)
	at com.google.gerrit.server.util.RequestScopePropagator$1.call(RequestScopePropagator.java:98)
	at com.google.gerrit.server.util.RequestScopePropagator$2.run(RequestScopePropagator.java:131)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:379)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

Sep 5, 2015
#1 i.d.rath...@gmail.com
Fully agreed. its-jira should automatically reconnect.
Patches welcome!

(While it is certainly not a fix ... but restarting only the
its-jira plugin should do the trick too, and is way faster than
restarting whole gerrit.)

Sep 8, 2015
#2 miroslav...@merck.com
its-annoying, patches really welcome!
Sign in to add a comment

Powered by Google Project Hosting