Uploaded image for project: 'AMQ Broker'
  1. AMQ Broker
  2. ENTMQBR-6559

Failed ClassCast in MQTTUtil .logMessage() with TRACE logging enabled

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • AMQ 7.10.0.GA
    • AMQ 7.10.0.GA
    • None
    • None
    • False
    • None
    • False
    • Hide

      1. Enable trace logging for MQTT
      2. Connect an MQTTv3.1 client to the broker and produce messages.
      3. Examine the log for stack traces like:

      2022-04-16 10:34:30,562 ERROR [org.apache.activemq.artemis.core.protocol.mqtt] AMQ834002: Error processing control packet: MqttPublishMessage[fixedHeader=MqttFixedHeader[messageType=PUBLISH, isDup=false, qosLevel=EXACTLY_ONCE, isRetain=false, remainingLength=1041], variableHeader=MqttPublishVariableHeader[topicName=TEST.Q.18, packetId=1], payload=PooledSlicedByteBuf(ridx: 0, widx: 1028, cap: 1028/1028, unwrapped: PooledUnsafeDirectByteBuf(ridx: 1044, widx: 1044, cap: 2048))]: java.lang.ClassCastException: class io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader cannot be cast to class io.netty.handler.codec.mqtt.MqttPubReplyMessageVariableHeader (io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader and io.netty.handler.codec.mqtt.MqttPubReplyMessageVariableHeader are in unnamed module of loader java.net.URLClassLoader @7e32c033)
              at org.apache.activemq.artemis.core.protocol.mqtt.MQTTUtil.logMessage(MQTTUtil.java:337) [artemis-mqtt-protocol-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.sendToClient(MQTTProtocolHandler.java:411) [artemis-mqtt-protocol-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.sendPublishProtocolControlMessage(MQTTProtocolHandler.java:362) [artemis-mqtt-protocol-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.sendPubRec(MQTTProtocolHandler.java:340) [artemis-mqtt-protocol-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.protocol.mqtt.MQTTPublishManager.sendMessageAck(MQTTPublishManager.java:278) [artemis-mqtt-protocol-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.protocol.mqtt.MQTTPublishManager$1.done(MQTTPublishManager.java:339) [artemis-mqtt-protocol-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.persistence.impl.journal.OperationContextImpl.executeOnCompletion(OperationContextImpl.java:195) [artemis-server-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.persistence.impl.journal.OperationContextImpl.executeOnCompletion(OperationContextImpl.java:141) [artemis-server-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.persistence.impl.journal.AbstractJournalStorageManager.afterCompleteOperations(AbstractJournalStorageManager.java:333) [artemis-server-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.protocol.mqtt.MQTTPublishManager.createMessageAck(MQTTPublishManager.java:336) [artemis-mqtt-protocol-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.protocol.mqtt.MQTTPublishManager.sendToQueue(MQTTPublishManager.java:268) [artemis-mqtt-protocol-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.handlePublish(MQTTProtocolHandler.java:324) [artemis-mqtt-protocol-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.act(MQTTProtocolHandler.java:156) [artemis-mqtt-protocol-2.21.0.jar:2.21.0]
              at org.apache.activemq.artemis.utils.actors.Actor.doTask(Actor.java:33) [artemis-commons-2.21.0.jar:]
              at org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:65) [artemis-commons-2.21.0.jar:]
              at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [java.base:]
              at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [java.base:]
              at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) [artemis-commons-2.21.0.jar:]
      
      Show
      1. Enable trace logging for MQTT 2. Connect an MQTTv3.1 client to the broker and produce messages. 3. Examine the log for stack traces like: 2022-04-16 10:34:30,562 ERROR [org.apache.activemq.artemis.core.protocol.mqtt] AMQ834002: Error processing control packet: MqttPublishMessage[fixedHeader=MqttFixedHeader[messageType=PUBLISH, isDup= false , qosLevel=EXACTLY_ONCE, isRetain= false , remainingLength=1041], variableHeader=MqttPublishVariableHeader[topicName=TEST.Q.18, packetId=1], payload=PooledSlicedByteBuf(ridx: 0, widx: 1028, cap: 1028/1028, unwrapped: PooledUnsafeDirectByteBuf(ridx: 1044, widx: 1044, cap: 2048))]: java.lang.ClassCastException: class io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader cannot be cast to class io.netty.handler.codec.mqtt.MqttPubReplyMessageVariableHeader (io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader and io.netty.handler.codec.mqtt.MqttPubReplyMessageVariableHeader are in unnamed module of loader java.net.URLClassLoader @7e32c033) at org.apache.activemq.artemis.core.protocol.mqtt.MQTTUtil.logMessage(MQTTUtil.java:337) [artemis-mqtt-protocol-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.sendToClient(MQTTProtocolHandler.java:411) [artemis-mqtt-protocol-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.sendPublishProtocolControlMessage(MQTTProtocolHandler.java:362) [artemis-mqtt-protocol-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.sendPubRec(MQTTProtocolHandler.java:340) [artemis-mqtt-protocol-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.protocol.mqtt.MQTTPublishManager.sendMessageAck(MQTTPublishManager.java:278) [artemis-mqtt-protocol-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.protocol.mqtt.MQTTPublishManager$1.done(MQTTPublishManager.java:339) [artemis-mqtt-protocol-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.persistence.impl.journal.OperationContextImpl.executeOnCompletion(OperationContextImpl.java:195) [artemis-server-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.persistence.impl.journal.OperationContextImpl.executeOnCompletion(OperationContextImpl.java:141) [artemis-server-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.persistence.impl.journal.AbstractJournalStorageManager.afterCompleteOperations(AbstractJournalStorageManager.java:333) [artemis-server-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.protocol.mqtt.MQTTPublishManager.createMessageAck(MQTTPublishManager.java:336) [artemis-mqtt-protocol-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.protocol.mqtt.MQTTPublishManager.sendToQueue(MQTTPublishManager.java:268) [artemis-mqtt-protocol-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.handlePublish(MQTTProtocolHandler.java:324) [artemis-mqtt-protocol-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.act(MQTTProtocolHandler.java:156) [artemis-mqtt-protocol-2.21.0.jar:2.21.0] at org.apache.activemq.artemis.utils.actors.Actor.doTask(Actor.java:33) [artemis-commons-2.21.0.jar:] at org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:65) [artemis-commons-2.21.0.jar:] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [java.base:] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [java.base:] at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) [artemis-commons-2.21.0.jar:]

    Description

      MQTTUtil.logMessage(MQTTSessionState, MQTTMessage) fails to check the protocol version before attempting to log header properties. As a result, some class cast attempts fail as classes like MqttPubReplyMessageVariableHeader are only applicable to MQTTv5.

      Attachments

        Activity

          People

            rhn-support-jbertram Justin Bertram
            rhn-support-dhawkins Duane Hawkins
            Dominik Lenosi Dominik Lenosi
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: