[ 
https://issues.apache.org/jira/browse/ARTEMIS-2206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16724163#comment-16724163
 ] 

ASF GitHub Bot commented on ARTEMIS-2206:
-----------------------------------------

Github user onlyMIT commented on a diff in the pull request:

    https://github.com/apache/activemq-artemis/pull/2466#discussion_r242582946
  
    --- Diff: 
artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTSubscriptionManager.java
 ---
    @@ -194,12 +191,13 @@ private synchronized void removeSubscription(String 
address) throws Exception {
           SimpleString internalQueueName = 
getQueueNameForTopic(internalAddress);
           session.getSessionState().removeSubscription(address);
     
    -
    -      ServerConsumer consumer = consumers.get(address);
    +      Set<Consumer> queueConsumers = 
session.getServer().queueConsumersQuery(internalQueueName);
    --- End diff --
    
    In the ‘queueConsumersQuery’ method, use 'queueName' to query 'Binding' and 
get a queue through ‘Binding’. I think I am getting all the consumers in the 
specified queue, not all consumers at the same address.You can check the 
details of the 'queueConsumersQuery' method.
    In the ‘ActiveMQServerImpl.destroyQueue’ method, the number of consumers on 
a queue is also obtained in this way.Originally I wanted to put the shutdown 
consumer code here, and later found that there were multiple calls to the 
‘ActiveMQServerImpl.destroyQueue’ method, and I abandoned the idea of putting 
the consumer code off here.


> The MQTT consumer reconnection caused the queue to not be cleared and throw a 
> NullPointerException exception
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: ARTEMIS-2206
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-2206
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: MQTT
>    Affects Versions: 2.6.3
>         Environment: # Use 10,000 (9 thousand senders, 1 thousand consumers) 
> MQTT connection on one server to test Artemis, set the 'cleanSession' 
> property to true;
>  # MQTT client: paho 1.2.0;
>  # Server: CPU Cores:32, Mem:64G, SSD:250G, HDD:1T
>            Reporter: Shiping Liang
>            Priority: Major
>         Attachments: image-2018-12-18-18-28-59-540.png
>
>
> *Issue 1*
> Artemis broker has the following exception log:
> {{[Thread-0 
> (ActiveMQ-remoting-threads-ActiveMQServerImpl::serverUUID=fb358579-feb3-11e8-bc7c-141877a7fd13-1409545055)]
>  17:27:59,035 WARN [org.apache.activemq.artemis.utils.actors.OrderedExecutor] 
> null: java.lang.NullPointerException at 
> org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolManager.isClientConnected(MQTTProtocolManager.java:182)
>  [:] at 
> org.apache.activemq.artemis.core.protocol.mqtt.MQTTConnectionManager.disconnect(MQTTConnectionManager.java:150)
>  [:] at 
> org.apache.activemq.artemis.core.protocol.mqtt.MQTTFailureListener.connectionFailed(MQTTFailureListener.java:37)
>  [:] at 
> org.apache.activemq.artemis.core.protocol.mqtt.MQTTConnection.fail(MQTTConnection.java:147)
>  [:] at 
> org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl.issueFailure(RemotingServiceImpl.java:561)
>  [:] at 
> org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl.connectionDestroyed(RemotingServiceImpl.java:542)
>  [:] at 
> org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptor$Listener.connectionDestroyed(NettyAcceptor.java:858)
>  [:] at 
> org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.lambda$channelInactive$0(ActiveMQChannelHandler.java:83)
>  [:] at 
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42)
>  [:] at 
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31)
>  [:] at 
> org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:66)
>  [:] at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>  [rt.jar:1.8.0_101] at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>  [rt.jar:1.8.0_101] at 
> org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
>  [:]}}
> *Issue 2*
> After closing all client connections, 64 queues were not cleaned up。



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to