[ 
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)

Reply via email to