Hi Jayanga,

Can you describe a little bit on how this StartupServiceCache is working,
for ex: How it is updated, with what data and so on.

Thanks,
Dilan.

*Dilan U. Ariyaratne*
Senior Software Engineer
WSO2 Inc. <http://wso2.com/>
Mobile: +94766405580 <%2B94766405580>
lean . enterprise . middleware


On Wed, Mar 22, 2017 at 7:23 PM, Kishanthan Thangarajah <[email protected]
> wrote:

> Hi Jayanga,
>
> As we spoke offline, did we check on the possibility of using service
> EvenHook instead of the above "cache" ? Also how the internals work when
> events are delivered in an order (trackers vs service component
> references)?
>
> Thanks,
>
> On Wed, Mar 22, 2017 at 6:37 PM, Jayanga Dissanayake <[email protected]>
> wrote:
>
>> Hi All,
>>
>> In the C5 Carbon Kernel, we introduced a new feature call
>> StartupOrderResolver. The main idea is to overcome some of the limitation
>> we have in the cardinality of OSGi Service Components and to have implicit
>> dependencies among the components. You can find more information on the
>> design/implementation in [1] and [2].
>>
>> In the recent testing, we came across a very rare race condition in this
>> implementation which is explained below.
>>
>>
>> ​
>> ​
>> Let's assume there is Component (DeploymentMgtComponent) that is using
>> StartupOrderResolver, needs to wait until all the Deployment services are
>> available.
>>
>> 1) The Happy Path
>> i) A deployment service registers with the OSGi registry (1)
>> ii) OSGi Registry notifies the ServiceComponent (2a)
>> iii) OSGi Registry notifies the ServiceTracker of StartupOrderResolver
>> (2b)
>> iv) StartupOrderResolverUpdates its ServiceMetadata
>> (v) The timer triggers, if all the required capabilities are ready,
>> notify the component (3)
>>
>> 2) Problematic Path
>> i) A deployment service registers with the OSGi registry (1)
>> ii) OSGi Registry notifies the ServiceTracker of StartupOrderResolver (2b)
>> iii) StartupOrderResolverUpdates its ServiceMetadata
>> iv) The timer triggers, if all the required capabilities are ready,
>> notify the component (3)
>> v) OSGi Registry notifies the ServiceComponent (2a)
>>
>> In the problematic path, onAllRequiredCapabilitiesAvailable() method is
>> called before a reference to the Deployment service is received via the
>> OSGi registry.
>>
>> The fix is to delay the method call onAllRequiredCapabilitiesAvailable()
>> until all the service references are received by the ServiceComponet. But
>> there is no OOB way of detecting from the outside, whether a particular
>> component has received a service reference or not.
>>
>> Hence I came up with the below-mentioned solution, In which I added a new
>> "StartupServiceCache" and changed the StartupOrder pending capability
>> detecting logic to use the StartupServiceCache to identify the services
>> that are already known by the Component.
>>
>> With this approach, if a ServiceComponent developer wants to rely on
>> StartupOrderResolver, he will have to follow the same old way and have an
>> additional entry in the @Reference method in the service component
>>
>> e.g:
>> StartupServiceUtils.updateServiceCache("carbon-deployment-mgt",
>> Deployment.class, deployment);
>>
>>
>>
>> ​
>>
>> The proposed solution fixes the issue. With this solution, the developer
>> will have to add another one entry in the ServiceComponent, which I believe
>> ok as the developer anyway be putting additional entries in the Components
>> and Services to make it incorporate with old StartupOrderResolver.
>>
>>  Anyway, I am looking into other possibilities whether we could get rid
>> of this additional entry.
>>
>> Any idea/suggestion on this regard is highly appreciated.
>>
>> [1] https://medium.com/@sameera.jayasoma/startup-order-resol
>> ving-mechanisms-in-osgi-48aecde06389#.vn6p146ts
>> [2] https://medium.com/@sameera.jayasoma/resolving-startup-o
>> rder-of-carbon-components-in-wso2-carbon-5-0-0-497fe3287e67#.drybgj29a
>>
>> Thanks,
>> *Jayanga Dissanayake*
>> Associate Technical Lead
>> WSO2 Inc. - http://wso2.com/
>> lean . enterprise . middleware
>> email: [email protected]
>> mobile: +94772207259 <+94%2077%20220%207259>
>> <http://wso2.com/signature>
>>
>
>
>
> --
> *Kishanthan Thangarajah*
> Technical Lead,
> Platform Technologies Team,
> WSO2, Inc.
> lean.enterprise.middleware
>
> Mobile - +94773426635 <+94%2077%20342%206635>
> Blog - *http://kishanthan.wordpress.com <http://kishanthan.wordpress.com>*
> Twitter - *http://twitter.com/kishanthan <http://twitter.com/kishanthan>*
>
> _______________________________________________
> Architecture mailing list
> [email protected]
> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>
>
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to