Description
For testing,
message producer is set to non-persisted mode, with the connection producer window size to 1MB. (the broker enables the producer flow control and set the memory limit to ~10MB with vm only storage)
I notice that when i don't have any message consumer, the broker notify me that the memory limit is reached, that the producer will be throttled (as i would expect), however the producer never blocks on a send, as if the window size has no effect.
while digging into ActiveMQProducerKernel.cpp,
I notice the private member memoryUsage (auto_ptr) is never initialized. and there's a TODO in the code ?
ActiveMQProducerKernel::ActiveMQProducerKernel( [...] // TODO - Check for need of MemoryUsage if there's a producer Windows size // and the Protocol version is greater than 3. }
I tried initializing the memoryUsage, and producer seem to block as expected on a send, when the limit is reached.
ActiveMQProducerKernel::ActiveMQProducerKernel( [...] // TODO - Check for need of MemoryUsage if there's a producer Windows size // and the Protocol version is greater than 3. if (session->getConnection()->getProducerWindowSize()) { this->memoryUsage.reset( new MemoryUsage(session->getConnection()->getProducerWindowSize()) ); } }
I'm not sure what is the proper fix,