Hi All,

Flow control is activated when the distruptor buffer is full, database
encounters an error etc. When its being applied, currently it iterates
through the list of publisher channels, notifying the publishers
individually to flow control.

in the FlowControlManager its illustrated through the following code
segment.

    private synchronized void blockListenersOnBufferBasedFlowControl() {
        if (!globalBufferBasedFlowControlEnabled) {
            globalBufferBasedFlowControlEnabled = true;

            for (AndesChannel channel : channels) {
                channel.notifyGlobalBufferBasedFlowControlActivation();
            }

            scheduledBufferBasedFlowControlTimeoutFuture =
executor.schedule(flowControlTimeoutTask, 1, TimeUnit.MINUTES);
            log.info("Global buffer based flow control enabled.");
        }
    }


Since its being iterated and flow controlled individually there could be a
slight latency when applying flow control to the last publisher in the
list. (Until flow control is applied the publisher/s would continue to send
messages)

The question is, lets say there're > 10000 of publishers which need to be
flow controlled at a given time. Will there be a possibility for the broker
to go OOM due to the above mentioned reason. i.e flow control is applied
due to buffer nearly became full ?

If that's the case, what would be the best way to deal with it ?

One suggestion would be to at a glance, stop the server from accepting
messages totally.( i.e in Netty server we could do it by adding a child
option to set auto read 'false' in the ServerBootstrap). until the whole
publisher list is iterated and flow control is applied and then retain
accepting connections.

Thanks,
Pamod

-- 
*Pamod Sylvester *

*WSO2 Inc.; http://wso2.com <http://wso2.com>*
cell: +94 77 7779495
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to