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

Reply via email to