Keith Wall created QPID-7982:
--------------------------------

             Summary: [Java Broker] MariaDB backed JDBC virtualhost truncates 
message content at 64K leading to Broker abnormal shutdown
                 Key: QPID-7982
                 URL: https://issues.apache.org/jira/browse/QPID-7982
             Project: Qpid
          Issue Type: Bug
          Components: Java Broker
            Reporter: Keith Wall


When using the Qpid Broker-J with a JDBC backed virtualhost using MariaDB, the 
database silently truncates message content at 64KB.  This means if the Broker 
needs to recover a message from disk (i.e. after a restart or after message 
content has been flowed to disk), it will fail to retrieve the expected number 
of message bytes and will fail as it tries to deliver the message to the 
consumer.  The failure also manifests if the message is viewed from Management. 
 

{noformat}
########################################################################
#
# Unhandled Exception java.lang.IllegalArgumentException: offset: 0, length: 
262152, remaining: 65535 in Thread IO-/127.0.0.1:56942
#
# Exiting
#
########################################################################
java.lang.IllegalArgumentException: offset: 0, length: 262152, remaining: 65535
        at 
org.apache.qpid.server.bytebuffer.QpidByteBuffer.view(QpidByteBuffer.java:1003)
        at 
org.apache.qpid.server.store.jdbc.AbstractJDBCMessageStore$StoredJDBCMessage.getContent(AbstractJDBCMessageStore.java:1443)
        at 
org.apache.qpid.server.message.AbstractServerMessageImpl.getContent(AbstractServerMessageImpl.java:191)
        at 
org.apache.qpid.server.protocol.v1_0.Message_1_0.getContent(Message_1_0.java:215)
        at 
org.apache.qpid.server.message.AbstractServerMessageImpl.getContent(AbstractServerMessageImpl.java:181)
        at 
org.apache.qpid.server.protocol.v1_0.ConsumerTarget_1_0.doSend(ConsumerTarget_1_0.java:154)
        at 
org.apache.qpid.server.consumer.AbstractConsumerTarget.send(AbstractConsumerTarget.java:227)
        at 
org.apache.qpid.server.consumer.AbstractConsumerTarget.sendNextMessage(AbstractConsumerTarget.java:280)
        at 
org.apache.qpid.server.consumer.AbstractConsumerTarget.processPending(AbstractConsumerTarget.java:162)
        at 
org.apache.qpid.server.session.AbstractAMQPSession.processPending(AbstractAMQPSession.java:394)
        at 
org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl$ProcessPendingIterator.lambda$next$2(AMQPConnection_1_0Impl.java:1814)
        at 
org.apache.qpid.server.transport.NonBlockingConnection.processPending(NonBlockingConnection.java:356)
        at 
org.apache.qpid.server.transport.NonBlockingConnection.doWork(NonBlockingConnection.java:264)
        at 
org.apache.qpid.server.transport.NetworkConnectionScheduler.processConnection(NetworkConnectionScheduler.java:134)
        at 
org.apache.qpid.server.transport.SelectorThread$ConnectionProcessor.processConnection(SelectorThread.java:563)
        at 
org.apache.qpid.server.transport.SelectorThread$SelectionTask.performSelect(SelectorThread.java:354)
        at 
org.apache.qpid.server.transport.SelectorThread$SelectionTask.run(SelectorThread.java:97)
        at 
org.apache.qpid.server.transport.SelectorThread.run(SelectorThread.java:521)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at 
org.apache.qpid.server.bytebuffer.QpidByteBuffer.lambda$null$0(QpidByteBuffer.java:1396)
        at java.lang.Thread.run(Thread.java:748)
{noformat}

Inspecting the db you see:

{noformat}
MariaDB [qpid]> select octet_length(content) from QPID_MESSAGE_CONTENT
    -> ;
+-----------------------+
| octet_length(content) |
+-----------------------+
|                 65535 |
+-----------------------+
1 row in set (0.01 sec)
{noformat}




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to