synapse-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Supun Kamburugamuva <supu...@gmail.com>
Subject Re: Concurrent Access to Dynamic Resources
Date Thu, 10 Sep 2009 05:40:23 GMT
On Wed, Sep 9, 2009 at 10:27 PM, Hiranya Jayathilaka
<hiranya911@gmail.com>wrote:

>
>
> On Wed, Sep 9, 2009 at 7:52 PM, Supun Kamburugamuva <supun06@gmail.com>wrote:
>
>> Hi,
>> I think this is the price that we have to pay for enabling
>> dynamic behavior. If the ESB is under huge load and we synchronize these
>> methods it won't scale anyway.
>>
>> Having two threads load the same resource is tolerable if one thread
>> doesn't access the resource while it is initialized halfway way.
>>
>> One suggestion, I think if we can move the
>>
>> initialized = true; line 166
>>
>> statement in the AbstractEndpoint.java to the bottom of the init method it
>> will be more safer.
>>
>
> What would be safer is to move the above mentioned line of code to the
> bottom and make the method synchronized. The AbstractEndpoint#init method
> 'generally' doesn't get called by multiple threads simultaneously and that's
> probably why it is left un-synchronized at the moment. But with dynamic
> endpoints (and only with dynamic endpoints) there is a chance that this
> method can get called by several threads on the same object.
>
> Devs WDYT? Shall we make this change? Since the method does not get called
> too often by concurrent threads I don't think there would be any performance
> losses here.
>
>
Endpoint.init method is supposed to be called by a single thread and
only once. So I think it is not a good design to make this method
synchronized. I think the correct approach is to handle the synchronization
by the caller depending on the situation.

Supun..


> Thanks,
> Hiranya
>
>
>> Thanks,
>> Supun..
>>
>> On Wed, Sep 9, 2009 at 5:48 AM, Hiranya Jayathilaka <hiranya911@gmail.com
>> > wrote:
>>
>>> Hi Devs,
>>> The Axis2MessageContext class uses SynapseConfiguration#getEndpoint and
>>> SynapseConfiguration#getSequence methods to gain access to dynamic endpoints
>>> and sequences when they are not present in the message context's local
>>> store. However these method calls are not synchronized and from the looks of
>>> it I feel that if two message contexts try to access the same dynamic
>>> resource at the same time there is a chance that SynapseConfiguration would
>>> perform two remote registry lookups to fetch the same resource. This won't
>>> really cause any erroneous behavior but if the ESB is under a huge load
>>> where each message is trying to load a particular dynamic resource things
>>> may get out of hands.
>>>
>>> So does it make sense to bring in some synchronization into the picture?
>>> Or have I missed something and the above theory is not applicable?
>>>
>>> Thanks
>>> --
>>> Hiranya Jayathilaka
>>> Software Engineer;
>>> WSO2 Inc.;  http://wso2.org
>>> E-mail: hiranya@wso2.com;  Mobile: +94 77 633 3491
>>> Blog: http://techfeast-hiranya.blogspot.com
>>>
>>
>>
>>
>> --
>> Software Engineer, WSO2 Inc
>> http://wso2.org
>> supunk.blogspot.com
>>
>>
>>
>
>
> --
> Hiranya Jayathilaka
> Software Engineer;
> WSO2 Inc.;  http://wso2.org
> E-mail: hiranya@wso2.com;  Mobile: +94 77 633 3491
> Blog: http://techfeast-hiranya.blogspot.com
>



-- 
Software Engineer, WSO2 Inc
http://wso2.org
supunk.blogspot.com

Mime
View raw message