+1, if there's a global flow control trigger, we could go with the approach of stop accepting messages until the individual publishers are being flow controlled.
On Fri, Jun 5, 2015 at 3:03 PM, Asitha Nanayakkara <[email protected]> wrote: > Hi Pamod, > > In Andes core, we can have a listener to inform global flow control. > Similar to FlowControlListner. With that when the global flow control limit > is reached we can invoke this listener interface. In the protocol level > implementation of this global flow control listener interface, we can > either iterate or directly flow control all publishers depending on the > protocol capability. WDYT? > > Thanks, > Asitha > > On Fri, Jun 5, 2015 at 2:45 PM, Pamod Sylvester <[email protected]> wrote: > >> 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 >> > > > > -- > *Asitha Nanayakkara* > Software Engineer > WSO2, Inc. http://wso2.com/ > Mob: + 94 77 85 30 682 > > -- *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
