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

Keith Wall commented on QPID-3978:
----------------------------------

Rob,  I gave this feature a manual test and ran into a problem.   I'm testing 
with a test client that creates a consumer, calls start/receiveNoWait to start 
the message flow, then publishes a message with short TTL, then receive the 
message.   I put a breakpoint on the last receive, and let the Broker TTL the 
message.  When I let the client proceed, I see the following stack and the 
connection is closed.

{noformat}

014-08-14 23:27:46,122 ERROR [IoReceiver - /127.0.0.1:61837] 
(util.ServerScopedRuntimeException) - Unable to find message with id 5 on queue 
myqueue with id 30580495-7043-49ef-9b86-71bd85cead6b
2014-08-14 23:27:46,123 ERROR [IoReceiver - /127.0.0.1:61837] 
(v0_8.AMQProtocolEngine) - Unexpected exception while processing frame.  
Closing connection.
org.apache.qpid.server.store.StoreException: Unable to find message with id 5 
on queue myqueue with id 30580495-7043-49ef-9b86-71bd85cead6b
        at 
org.apache.qpid.server.store.AbstractJDBCMessageStore.dequeueMessage(AbstractJDBCMessageStore.java:647)
        at 
org.apache.qpid.server.store.AbstractJDBCMessageStore.access$600(AbstractJDBCMessageStore.java:49)
        at 
org.apache.qpid.server.store.AbstractJDBCMessageStore$JDBCTransaction.dequeueMessage(AbstractJDBCMessageStore.java:1225)
        at 
org.apache.qpid.server.txn.AsyncAutoCommitTransaction.dequeue(AsyncAutoCommitTransaction.java:177)
        at 
org.apache.qpid.server.protocol.v0_8.AMQChannel.acknowledgeMessage(AMQChannel.java:985)
        at 
org.apache.qpid.server.protocol.v0_8.handler.BasicAckMethodHandler.methodReceived(BasicAckMethodHandler.java:65)
        at 
org.apache.qpid.server.protocol.v0_8.handler.ServerMethodDispatcherImpl.dispatchBasicAck(ServerMethodDispatcherImpl.java:133)
        at 
org.apache.qpid.framing.amqp_0_9.BasicAckBodyImpl.execute(BasicAckBodyImpl.java:113)
        at 
org.apache.qpid.server.protocol.v0_8.state.AMQStateManager$1.run(AMQStateManager.java:122)
        at 
org.apache.qpid.server.protocol.v0_8.state.AMQStateManager$1.run(AMQStateManager.java:118)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at 
org.apache.qpid.server.protocol.v0_8.state.AMQStateManager.methodReceived(AMQStateManager.java:117)
        at 
org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.methodFrameReceived(AMQProtocolEngine.java:617)
        at 
org.apache.qpid.framing.AMQMethodBodyImpl.handle(AMQMethodBodyImpl.java:99)
        at 
org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.frameReceived(AMQProtocolEngine.java:470)
        at 
org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.dataBlockReceived(AMQProtocolEngine.java:405)
        at 
org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.access$1100(AMQProtocolEngine.java:89)
        at 
org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine$2.run(AMQProtocolEngine.java:309)
        at 
org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine$2.run(AMQProtocolEngine.java:281)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:356)
        at 
org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.received(AMQProtocolEngine.java:280)
        at 
org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.received(AMQProtocolEngine.java:89)
        at 
org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:133)
        at 
org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:49)
        at 
org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:161)
        at java.lang.Thread.run(Thread.java:745)

{noformat}

> Broker should remove messages with expired TTL even if they are prefetched by 
> the client
> ----------------------------------------------------------------------------------------
>
>                 Key: QPID-3978
>                 URL: https://issues.apache.org/jira/browse/QPID-3978
>             Project: Qpid
>          Issue Type: New Feature
>          Components: Java Broker
>    Affects Versions: 0.10, 0.12, 0.14
>            Reporter: Alex Rudyy
>            Assignee: Rob Godfrey
>             Fix For: 0.31
>
>
> Broker should remove messages with expired TTL even if they are prefetched by 
> the client.
> If client application prefetches the messages and hangs, the messages with 
> expired TTL are remained on broker till client is closed or killed.
> The prefetched messages with expired TTL can cause a lot of confusions to the 
> end users. It would be better to remove them on the broker after  TTL is 
> expired without waiting for acknowledgment/releasing them from a client.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

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

Reply via email to