[
https://issues.apache.org/activemq/browse/AMQ-1992?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=47608#action_47608
]
Dean Thompson commented on AMQ-1992:
------------------------------------
We ran into a different problem, but came across information that may shed
light on the present problem.
We at mSpoke had a problem (with version 5.2.0, using topics and durable
subscriptions) where all producers would lock up when we used producer flow
control. What's strange is that the producers were *not* explicitly waiting in
ActiveMQMessageProducer in the call to producerWindow.waitForSpace(). Instead,
the producers were blocked waiting for acks. But the problem went away when we
disabled producer flow control.
As I traced through the ActiveMQ code to try to understand what might be
happening, I found myself with two concerns:
(1) Possibly pertinent to Josip Gracin's observation above (11/3/08), I am
concerned that the calculation of available flow-control-window is based on
totalling the message sizes as measured by the producer and subtracting the
message sizes as measured by the consumer (or at least by whatever ends up
producing the ack). But the code in
org.apache.activemq.command.Message#getSize() is a bit complex; how sure are we
that the same size will be reported across marshalling/unmarshalling operations
and in different contexts?
(2) In trying to understand how enabling producer flow-control might have left
the producer waiting forever for an ack that never came, I see fairly complex
code in org.apache.activemq.broker.region.Topic#send that schedules a deferred
ack when the topic is full. I believe our consumers are functioning correctly
(and indeed our whole system works once we disable producer flow-control), so I
don't see how any topic remained full forever -- yet, our producers wound up
waiting for acks forever. So I am suspicious that the acks deferred by
messagesWaitingForSpace.add(new Runnable() {...} may, under some
circumstances, never get sent.
> flow control doesn't work after first restart (if producer works in
> transacted mode with persistent messages)
> -------------------------------------------------------------------------------------------------------------
>
> Key: AMQ-1992
> URL: https://issues.apache.org/activemq/browse/AMQ-1992
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker
> Affects Versions: 5.1.0, 5.2.0
> Environment: Intel MAC OSX Java (build 1.5.0_16-b06-284)
> Reporter: Viktor Matic
>
> To reproduce BUG follow instructions:
> 1. Unpack fresh AMQ (versions 5.1.0, 5.2.0, 5.3.0-SNAPSHOT)
> 2. Edit $AMQ_HOME/examples/ProducerTool.java turn on transacted mode and
> persisting messages.
> (I have modified source code directly because I couldn't change this
> parameters through build.xml. Change is simple.)
> Patch:
> 78,79d77
> < transacted = true;
> <
> 88,89d85
> < persistent = true;
> <
> 3. Start AMQ $AMQ_HOME/bin/activemq
> 4. Start producer $AMQ_HOME/examples/ant producer -DmessageSize=200000
> 5. Producer will block (on commit method) after approximately 27 messages
> (which is OK for selected message size and default max queues size 5Mb)
> 6. Stop producer and AMQ in any order (CTRL-C in terminal)
> 7. Start AMQ $AMQ_HOME/bin/activemq
> 8. Start producer $AMQ_HOME/examples/ant producer -DmessageSize=200000
> Producer will continue to queue messages infinitely.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.