Hi All,

Following are the details on streaming support of carbon transport.
Basically we can looking to streaming support in request path and response
path separately.

Request Path (Streaming is working)

[image: requestpath.png]

According to above diagram

   -

   We have blocking queue in the carbon message which keeps the content .
   when headers are received through Netty worker thread it will create
   CarbonMessage with a blocking queue and publish carbon message to engine
   level thread.
   -

   Reference for blocking queue is cached in the connection and when
   content is received it will be filled to that queue from Netty worker
   thread.
   -

   Meanwhile engine level threads can consume content through queue(While
   IO worker is filling ) and can directly send to file system or use sender
   for send messages to external  service.
   -

   According to that streaming should work in Request path in Integration
   Server or MSF4J without any problem.


Response Path (Streaming working scenario)

[image: responsepathworking.png]


In Response path basic difference we have is we are handling responses
through callbacks.


   -

   Similar to  Request path architecture  Sender side IO thread  creates a
   CM when response headers are received and publish to engine level thread .
   -

   Engine level thread calls carbonCallback.done() and waits on queue for
   content.
   -

   Meanwhile IO thread writes the content to the Queue .
   -

   So writing to Queue and reading from queue happens parallel and
   streaming should work properly.
   -

   So streaming is working fine with Integration Server for this kind of
   scenarios.



Response Path (Streaming not working scenario)

[image: responsepathnotworking.png]

This scenario is basically, if we have a Echo mediator or assume MSF4J has
a service which is  reading a file as chunks and writes back to client .


   -

   Basic difference with the previous one  is in this approach reading a
   file chunk  or stream and writing that file chunk or stream to Queue is
   happened  within the same engine level thread as well as with reading from
   queue and writing to Listener side Netty worker threads.(Same thread
   produce and consume causes for deadlock)
   -

   In the previous example reading from stream and filling the queue was
   happened  through Sender side IO thread and consuming the queue and writing
   to Listener side  IO thread was happened through engine level thread. (Two
   different threads produce and consume)
   -

   Streaming is not working in this kind of scenarios because we cannot
   write to queue and keep polling the queue within single thread.


We can figure out following solutions and what will be the most suitable
one.



   -

   Introduce another thread for run the callback logic instead of running
   through calling thread.

                This will solve the above streaming problem but when it
comes to  general message flow this will add another level of thread which
will actually does not need.

   -

   Introduce another method in ResponseCallback which will support
   streaming which does not queuing contents.  it will directly call IO
   threads and write contents to IO when chunks are received. This can be used
   only within single thread scenario(File reading and writing ).
   -

   Introduce another thread for read File stream or call Callback from
   another thread other than to reading thread  from MSF4J level.Then it will
   be equivalent to how we used it in Integration Server with the use of
   Sender.

ThankYou

IsuruR

On Tue, May 3, 2016 at 12:09 PM, Kasun Indrasiri <[email protected]> wrote:

> Had a chat with Ranawaka on this.. seems like we do have couple of ways to
> handle this. He will share the details.
>
> On Mon, May 2, 2016 at 6:13 AM, Afkham Azeez <[email protected]> wrote:
>
>> The problem is, we can't do the next MSF4J release because we can't lose
>> a feature in a release. This is a blocker for us. We have plans to release
>> in the next 2 weeks.
>>
>> On Mon, May 2, 2016 at 4:56 PM, Isuru Ranawaka <[email protected]> wrote:
>>
>>> Hi Azeez,
>>>
>>> Currently streaming works if we used both sender side and listener side
>>> only . But since MSF4J is using only listener side if we did not spawn
>>> separate thread from engine level for writing response  it will not work
>>> because request reading and writing happens through same thread. But with
>>> the next release we will fix that. currently we are finalizing on removing
>>> engine level thread model from transport.
>>>
>>>
>>> thanks
>>> IsuruR
>>>
>>> On Mon, May 2, 2016 at 3:50 PM, Afkham Azeez <[email protected]> wrote:
>>>
>>>> Is this working after moving to the new transport framework?
>>>>
>>>> --
>>>> *Afkham Azeez*
>>>> Director of Architecture; WSO2, Inc.; http://wso2.com
>>>> Member; Apache Software Foundation; http://www.apache.org/
>>>> * <http://www.apache.org/>*
>>>> *email: **[email protected]* <[email protected]>
>>>> * cell: +94 77 3320919 <%2B94%2077%203320919>blog: *
>>>> *http://blog.afkham.org* <http://blog.afkham.org>
>>>> *twitter: **http://twitter.com/afkham_azeez*
>>>> <http://twitter.com/afkham_azeez>
>>>> *linked-in: **http://lk.linkedin.com/in/afkhamazeez
>>>> <http://lk.linkedin.com/in/afkhamazeez>*
>>>>
>>>> *Lean . Enterprise . Middleware*
>>>>
>>>> _______________________________________________
>>>> Dev mailing list
>>>> [email protected]
>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>
>>>>
>>>
>>>
>>> --
>>> Best Regards
>>> Isuru Ranawaka
>>> M: +94714629880
>>> Blog : http://isurur.blogspot.com/
>>>
>>
>>
>>
>> --
>> *Afkham Azeez*
>> Director of Architecture; WSO2, Inc.; http://wso2.com
>> Member; Apache Software Foundation; http://www.apache.org/
>> * <http://www.apache.org/>*
>> *email: **[email protected]* <[email protected]>
>> * cell: +94 77 3320919 <%2B94%2077%203320919>blog: *
>> *http://blog.afkham.org* <http://blog.afkham.org>
>> *twitter: **http://twitter.com/afkham_azeez*
>> <http://twitter.com/afkham_azeez>
>> *linked-in: **http://lk.linkedin.com/in/afkhamazeez
>> <http://lk.linkedin.com/in/afkhamazeez>*
>>
>> *Lean . Enterprise . Middleware*
>>
>> _______________________________________________
>> Dev mailing list
>> [email protected]
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
>
> --
> Kasun Indrasiri
> Software Architect
> WSO2, Inc.; http://wso2.com
> lean.enterprise.middleware
>
> cell: +94 77 556 5206
> Blog : http://kasunpanorama.blogspot.com/
>



-- 
Best Regards
Isuru Ranawaka
M: +94714629880
Blog : http://isurur.blogspot.com/
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to