[Qpid Broker-J] Messages are rejected if reject queue is empty

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[Qpid Broker-J] Messages are rejected if reject queue is empty

Vavricka
Hi,



we encountered issue with reject queue. Reject queue calculates wrong size
of incoming message. Incoming message size also increases when sending
further messages. Each rejected message increases calculated incoming
message size.



Steps to reproduce:

1] Create topic exchange

2] Create standard queue with reject policy (count: 2, size: 1024000)

3] Create binding between exchange and queue

4] Create and connect consumer which will indefinitely consume all messages
from queue

5] Send thousand of 512kB messages to exchange



Sender sends all messages, but receiver will not receive all messages.



After that queue is in some wrong state and you cannot send messages to
queue even if queue is empty. All messages are rejected because of size
even if size of incoming message is less then queue maximum size (sent
messages had 100 bytes payload).



Client shows exceptions like:



javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
current=[count: 1, size: 20684070], max=[count: 2, size: 1024000]
[condition = amqp:resource-limit-exceeded]

javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
current=[count: 1, size: 20684762], max=[count: 2, size: 1024000]
[condition = amqp:resource-limit-exceeded]

javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
current=[count: 1, size: 20686146], max=[count: 2, size: 1024000]
[condition = amqp:resource-limit-exceeded]

javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
current=[count: 1, size: 20686838], max=[count: 2, size: 1024000]
[condition = amqp:resource-limit-exceeded]

javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
current=[count: 1, size: 20687530], max=[count: 2, size: 1024000]
[condition = amqp:resource-limit-exceeded]

javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
current=[count: 1, size: 20688222], max=[count: 2, size: 1024000]
[condition = amqp:resource-limit-exceeded]

javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
current=[count: 1, size: 20688914], max=[count: 2, size: 1024000]
[condition = amqp:resource-limit-exceeded]

javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
current=[count: 1, size: 20689606], max=[count: 2, size: 1024000]
[condition = amqp:resource-limit-exceeded]



Regards,
Tomas
Reply | Threaded
Open this post in threaded view
|

Re: [Qpid Broker-J] Messages are rejected if reject queue is empty

Oleksandr Rudyy
Hi Tomas,
Thanks for reporting this issue.
It is caused by a defect in reject overflow policy with evaluation of size
of the messages being enqueued.
I raised a defect JIRA QPID-8341 [1] and committed a fix [2] which should
resolve the problem. I merged the fix into 7.1.x branch for its inclusion
into 7.1.5 release.

Kind Regards,
Alex

[1] https://issues.apache.org/jira/browse/QPID-8341
[2] https://gitbox.apache.org/repos/asf?p=qpid-broker-j.git;h=d946bec
[3] https://gitbox.apache.org/repos/asf?p=qpid-broker-j.git;h=4dd26dd


On Fri, 12 Jul 2019 at 08:08, .. ... <[hidden email]> wrote:

> Hi,
>
>
>
> we encountered issue with reject queue. Reject queue calculates wrong size
> of incoming message. Incoming message size also increases when sending
> further messages. Each rejected message increases calculated incoming
> message size.
>
>
>
> Steps to reproduce:
>
> 1] Create topic exchange
>
> 2] Create standard queue with reject policy (count: 2, size: 1024000)
>
> 3] Create binding between exchange and queue
>
> 4] Create and connect consumer which will indefinitely consume all messages
> from queue
>
> 5] Send thousand of 512kB messages to exchange
>
>
>
> Sender sends all messages, but receiver will not receive all messages.
>
>
>
> After that queue is in some wrong state and you cannot send messages to
> queue even if queue is empty. All messages are rejected because of size
> even if size of incoming message is less then queue maximum size (sent
> messages had 100 bytes payload).
>
>
>
> Client shows exceptions like:
>
>
>
> javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
> current=[count: 1, size: 20684070], max=[count: 2, size: 1024000]
> [condition = amqp:resource-limit-exceeded]
>
> javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
> current=[count: 1, size: 20684762], max=[count: 2, size: 1024000]
> [condition = amqp:resource-limit-exceeded]
>
> javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
> current=[count: 1, size: 20686146], max=[count: 2, size: 1024000]
> [condition = amqp:resource-limit-exceeded]
>
> javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
> current=[count: 1, size: 20686838], max=[count: 2, size: 1024000]
> [condition = amqp:resource-limit-exceeded]
>
> javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
> current=[count: 1, size: 20687530], max=[count: 2, size: 1024000]
> [condition = amqp:resource-limit-exceeded]
>
> javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
> current=[count: 1, size: 20688222], max=[count: 2, size: 1024000]
> [condition = amqp:resource-limit-exceeded]
>
> javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
> current=[count: 1, size: 20688914], max=[count: 2, size: 1024000]
> [condition = amqp:resource-limit-exceeded]
>
> javax.jms.ResourceAllocationException: Maximum depth exceeded on 'queue' :
> current=[count: 1, size: 20689606], max=[count: 2, size: 1024000]
> [condition = amqp:resource-limit-exceeded]
>
>
>
> Regards,
> Tomas
>