[
https://issues.apache.org/jira/browse/NIFI-7034?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17018953#comment-17018953
]
Joe Witt commented on NIFI-7034:
--------------------------------
Joe Witt 10:34 AM
on it
10:34
@Juan Pablo Gardella...this will fail to merge
10:34
didn't you change the public access for the jms class in the other PR?
10:35
@Juan Pablo Gardella please rebase to master and update that patch for 4001
new messages
Juan Pablo Gardella 10:36 AM
ok, let me try.
10:36
yes.
Joe Witt 10:37 AM
this will also result in an NPE in the case where the worker is null
10:37
if (worker == null || !worker.isValid()){
10:37
...then
10:37
worker.shutdown();
Juan Pablo Gardella 10:38 AM
yes, fixed let me try rebase.
> Connection leak with JMSConsumer and JMSPublisher
> -------------------------------------------------
>
> Key: NIFI-7034
> URL: https://issues.apache.org/jira/browse/NIFI-7034
> Project: Apache NiFi
> Issue Type: Bug
> Components: Extensions
> Affects Versions: 1.10.0
> Environment: Discovered against ActiveMQ.
> Reporter: Gardella Juan Pablo
> Assignee: Gardella Juan Pablo
> Priority: Critical
> Fix For: 1.11.0
>
> Original Estimate: 2h
> Time Spent: 10m
> Remaining Estimate: 1h 50m
>
> JMS connections are not closed in case of a failure. Discovered against
> ActiveMQ, but it applies to other JMS servers.
> The problem happens when an exception is raised and the worker is marked as
> invalid. The current code discards the worker before closing it properly.
> Below the details.
> h3. Details
> Any exception happening to a ConsumerJMS or PublisherJMS marks the worker as
> invalid. After that, the worker is discarded (the worker object reference is
> never cleaned). Below the snipped code of the issue:
> {code:java|title=AbstractJMSProcessor}
> } finally {
> //in case of exception during worker's connection (consumer or
> publisher),
> //an appropriate service is responsible to invalidate the worker.
> //if worker is not valid anymore, don't put it back into a pool,
> try to rebuild it first, or discard.
> //this will be helpful in a situation, when JNDI has changed, or
> JMS server is not available
> //and reconnection is required.
> if (worker == null || !worker.isValid()){
> getLogger().debug("Worker is invalid. Will try re-create...
> ");
> final JMSConnectionFactoryProviderDefinition cfProvider =
> context.getProperty(CF_SERVICE).asControllerService(JMSConnectionFactoryProviderDefinition.class);
> try {
> // Safe to cast. Method
> #buildTargetResource(ProcessContext context) sets only
> CachingConnectionFactory
> CachingConnectionFactory currentCF =
> (CachingConnectionFactory)worker.jmsTemplate.getConnectionFactory();
>
> cfProvider.resetConnectionFactory(currentCF.getTargetConnectionFactory());
> worker = buildTargetResource(context);
> }catch(Exception e) {
> getLogger().error("Failed to rebuild: " + cfProvider);
> worker = null;
> }
> }
> {code}
> Before discard the worker, it should be cleaned all resources associated with
> it. The proper solution is to call {{worker.shutdown()}} and then discard it.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)