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

    https://github.com/apache/activemq-artemis/pull/2491#discussion_r246095670
  
    --- Diff: 
artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTSession.java
 ---
    @@ -117,14 +118,11 @@ boolean getStopped() {
        }
     
        boolean isClean() {
    -      return isClean;
    +      return clean;
        }
     
    -   void setIsClean(boolean isClean) throws Exception {
    -      this.isClean = isClean;
    -      if (isClean) {
    -         clean();
    -      }
    +   void setClean(boolean clean) throws Exception {
    +      this.clean = clean;
    --- End diff --
    
    @jbertram in the getSessionState method.Only clear state,not call 
'clean()' method. In fact, the queue is not cleaned up.
    I use the code for the ‘paho’ test. The first consumer 
"cleanSession=false", using a different clientID to open a producer to send a 
message. Close the producer and consumer, use the same clientID and 
cleanSession = true" to open the second consumer and find that the consumer 
will consume the legacy message in the queue。So I suspect that there is a 
problem with the test code.
    I am always looking for why my test results will consume the legacy 
messages in the queue, and your test results will not。
    After seeing your information, I re-reviewed the code and found that the 
test code did not have any problems. What is causing my doubts is that because 
of your change, when cleanSession=true, only the MQTTSessionState is cleaned 
up, the queue still exists, and the legacy messages in the queue are consumed 
when resubscribing.
     Can close [#2493 ](https://github.com/apache/activemq-artemis/pull/2493) . 
I think you need to review your change。 


---

Reply via email to