You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Chetan Mehrotra (JIRA)" <ji...@apache.org> on 2015/12/21 08:47:46 UTC

[jira] [Updated] (OAK-3815) Add refresh callback support to Tracker

     [ https://issues.apache.org/jira/browse/OAK-3815?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Chetan Mehrotra updated OAK-3815:
---------------------------------
    Attachment: OAK-3815-v1.patch

[Attached patch|^OAK-3815-v1.patch] adds support for callback with Tracker creation

*Usage*

While obtaining a tracker one can provide a {{Runnable}} instance which would be invoked if there is change in set of services registered aginst the tracked type

{code}
whiteboard.track(IndexFieldProvider.class, new Runnable() {
    @Override
    public void run() {
        //rebuild the mapping
    }
});
{code}

*Key Aspects*
# Change done ensures that callbacks are *not invoked while holding any locks* i.e. the runnables are invoked outside of any {{synchronized}} block. This ensures that call to alien code does not result in some kind of deadlock
# In {{OsgiWhiteboard}} for each method on {{ServiceTrackerCustomizer}} a new method is added which is synchronized while the original method is non synchronized. For e.g. for {{addingService}} a new synchronized method {{addingService0}} is added. This allows us to invoke callbacks without holding any locks


[~mduerig] [~alex.parvulescu] Kindly review the patch and approach taken!

> Add refresh callback support to Tracker
> ---------------------------------------
>
>                 Key: OAK-3815
>                 URL: https://issues.apache.org/jira/browse/OAK-3815
>             Project: Jackrabbit Oak
>          Issue Type: Improvement
>          Components: core
>            Reporter: Chetan Mehrotra
>            Assignee: Chetan Mehrotra
>            Priority: Minor
>             Fix For: 1.3.13
>
>         Attachments: OAK-3815-v1.patch
>
>
> Currently the {{Tracker}} only has access to list of registered services but there is no way to know if the services have changed and one has to re obtain the set of services. For certain usecases its desirable to know (get notified) if the set of services registered against a specific type have changed. 
> For e.g. in OAK-3576 the services are to be registered against set of NodeTypes and each service provides set of nodeTypes it support. Creating that structure (nodeType -> service) is to be avoided on the critical path.
> So far Tracker serves the purpose well. One can just open the tracker and get the list of services and create that nodeType -> service mapping. However in case of OSGi (or in other modes also) if a new service is registered there is no way currently to get notified.
> For such cases I would like to propose registering a callback which should get notified if there is some change in set of services registered against a specific type. Then one can register the callback while creating the Tracker instance 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)