On 06/10/2015 10:18 AM, Kritikos, Alex wrote:
> Hi Alan,
>
> thanks for your response. We also use an engine per connection however there 
> are different read and write threads interacting with it and the issues only 
> occur under load.
> I guess we should try to create a repro case.
>
> Thanks,
>
> Alex Kritikos
> Software AG
> On 10 Jun 2015, at 16:50, aconway <acon...@redhat.com> wrote:

To my knowledge there is not expectation the Proton-J is any more thread
safe than Proton-C.  In both the new QPid JMS client and in the ActiveMQ
broker that uses Proton-J we serialize access to the engine for that
reason.  

>> On Wed, 2015-06-10 at 09:34 +0000, Kritikos, Alex wrote:
>>> [Resending as it ended up in the wrong thread]
>>>
>>> Hi all,
>>>
>>> is the proton-j engine meant to be thread safe?
>> The C engine is definitely NOT meant to be thread safe. Unless you have
>> found an explicit written declaration that the java engine is supposed
>> to be AND a bunch of code to back that up I wouldn't rely on it.
>>
>> The way we use proton in the C++ broker and in the upcoming Go binding
>> is to create an engine per connection and serialize the action on each
>> connection. In principle you can read and write from the OS connection
>> concurrently but it's debatable how much you gain, you are likely just
>> moving OS buffers into app buffers which is not a big win.
>>
>> The inbound and outbound protocol state *for a single connection* is
>> pretty closely tied together. Proton is probably taking the right
>> approach by assuming both are handled in a single concurrency context.
>>
>> The engine state for separate connections is *completely independent*
>> so it's safe to run engines for separate connections in separte
>> contexts.
>>
>> The recent reactor extensions to proton are interesting but not thread
>> friendly. They force the protocol handling for multiple connections
>> into a single thread context, which is great for single threaded apps
>> but IMO the wrong way to go for concurrent apps.
>>
>> The go binding uses channels to pump data from connection read/write
>> goroutines to a proton engine event loop goroutine per connection. The
>> C++ broker predates the reactor and does it's own polling with
>> read/write activity on an FD handled dispatched sequentially to worker
>> threads so the proton engine for a connection is never used
>> concurrently.
>>
>> There may be something interesting we can do at the proton layer to
>> help with this pattern or it may be better to leave concurrency above
>> the binding to be handled by the languages own concurrency tools, I am
>> not sure yet.
>>
>>
>>> We have been experiencing some sporadic issues where under load, the
>>> engine sends callbacks to registered handlers with null as the event.
>>> We do not have a standalone repro case yet but just wondered what
>>> other people’s experience is as well as what are the recommendations
>>> around thread safety.
>>>
>>> Thanks,
>>>
>>> Alex Kritikos
>>> Software AG
>>> This communication contains information which is confidential and may
>>> also be privileged. It is for the exclusive use of the intended
>>> recipient(s). If you are not the intended recipient(s), please note
>>> that any distribution, copying, or use of this communication or the
>>> information in it, is strictly prohibited. If you have received this
>>> communication in error please notify us by e-mail and then delete the
>>> e-mail and any copies of it.
>>> Software AG (UK) Limited Registered in England & Wales 1310740 -
>>> http://www.softwareag.com/uk
>>>
> This communication contains information which is confidential and may also be 
> privileged. It is for the exclusive use of the intended recipient(s). If you 
> are not the intended recipient(s), please note that any distribution, 
> copying, or use of this communication or the information in it, is strictly 
> prohibited. If you have received this communication in error please notify us 
> by e-mail and then delete the e-mail and any copies of it.
> Software AG (UK) Limited Registered in England & Wales 1310740 - 
> http://www.softwareag.com/uk
>
>


-- 
Tim Bish
Sr Software Engineer | RedHat Inc.
tim.b...@redhat.com | www.redhat.com 
twitter: @tabish121
blog: http://timbish.blogspot.com/

Reply via email to