On Wed, Sep 9, 2009 at 10:48 PM, Hiranya Jayathilaka <[email protected]>wrote:
> > > On Thu, Sep 10, 2009 at 11:10 AM, Supun Kamburugamuva > <[email protected]>wrote: > >> >> >> On Wed, Sep 9, 2009 at 10:27 PM, Hiranya Jayathilaka < >> [email protected]> wrote: >> >>> >>> >>> On Wed, Sep 9, 2009 at 7:52 PM, Supun Kamburugamuva >>> <[email protected]>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. >> > > I don't think I got your point. Could you please explain that a little > more? Currently there is a possibility that multiple message context > instances may attempt to initialize the same endpoint object at the same > time. How can we synchronize at caller level to avoid that? > I'm suggesting something like this. public Endpoint getEndpoint(String key) { Object o = localEntries.get(key); if (o != null && o instanceof Endpoint) { return (Endpoint) o; } else { Endpoint e = getConfiguration().getEndpoint(key); synchronized (object) { if (!e.isInitialized()) { e.init(synEnv); } } localEntries.put(key, e); return e; } } But I don't think above approach is correct because it synchronize for each and every retrieval. I think this is not the route cause of the problem. We are doing the initialization at the wrong place. Ideally initializtion should happen at a more deeper level when the endpoint is first created using the factory. This is handled nicely with the IndirectEndpoint code. It seems this IndirectEndpoint code is not used in some places like proxy services where it should be used. Hence we have all this trouble. Supun.. > > Thanks, > Hiranya > > >> Supun.. >> >> >>> Thanks, >>> Hiranya >>> >>> >>>> Thanks, >>>> Supun.. >>>> >>>> On Wed, Sep 9, 2009 at 5:48 AM, Hiranya Jayathilaka < >>>> [email protected]> 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: [email protected]; 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: [email protected]; 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: [email protected]; Mobile: +94 77 633 3491 > Blog: http://techfeast-hiranya.blogspot.com > -- Software Engineer, WSO2 Inc http://wso2.org supunk.blogspot.com
