[
https://issues.apache.org/jira/browse/PROTON-645?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Justin Ross updated PROTON-645:
-------------------------------
Fix Version/s: Future
> Implement session flow control independently of transport.capacity
> ------------------------------------------------------------------
>
> Key: PROTON-645
> URL: https://issues.apache.org/jira/browse/PROTON-645
> Project: Qpid Proton
> Issue Type: Improvement
> Components: proton-j
> Reporter: clebert suconic
> Fix For: Future
>
>
> When integrating with any asynchronous IO we are obligated to implement flow
> control based on the capacity of the Transport.
> Things get especially harder because when you pop bytes in a asynchronous
> method for after completion:
> e.g. on Netty:
> channel.writeAndFlush(bytes).addListener(new ChannelFutureListener()
> {
> @Override
> public void operationComplete(ChannelFuture future) throws Exception
> {
> transport.pop(bufferSize);
> /// perform process, and dispatch!
> performDispatchEtc();
> if (transport.capacity() > 0)
> {
> channel.read();
> }
> }
> });
> this makes things specially harder as we are eventually losing events or
> bytes. We could make things work with some hacks (like having recursive loops
> on the methods for writing and reading)...
> Making Proton-J to work with asynchronous pop is definitely a black art.
> Instead of working around with recursive workarounds we should provide an
> easier path. such as plugging SessionFlowController where we could activate /
> deactivate producers on a server, or use Semaphores on a client where a
> client could block until things are properly released.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]