[ 
https://issues.apache.org/jira/browse/FELIX-4238?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13777417#comment-13777417
 ] 

Felix Meschberger commented on FELIX-4238:
------------------------------------------

I am not sure, whether I understand your problem -- or your solution.

getTrackingCount() is increased whenever something happens to tracked services: 
a service is added or removed or modified. So this number is ever increasing 
with service events from tracked service types.

Consequently whenever a service disappears and re-appears the internal list of 
persistence managers -- CachingPersistenceManagerProxy[] - is recreated thus 
flushing all cached data and thus reloading on next access.

While this accounts for changes to persistence managers, I suspect (and hope) 
persistence managers will only come and go or change rarely, so the overhead of 
reading configuration multiple times might be neglectable.
                
> Unnecessary re-initialization of PersistenceManagers in configadmin
> -------------------------------------------------------------------
>
>                 Key: FELIX-4238
>                 URL: https://issues.apache.org/jira/browse/FELIX-4238
>             Project: Felix
>          Issue Type: Bug
>          Components: Configuration Admin
>    Affects Versions: configadmin-1.6.0
>         Environment: MacOSX 10.8.5, Java 1.6.0_51, org.eclipse.osgi 3.9.0
>            Reporter: Matthias
>            Priority: Minor
>              Labels: patch
>   Original Estimate: 0.5h
>  Remaining Estimate: 0.5h
>
> Brief description: If the PersistenceManager is replaced during runtime (e.g. 
> after registering, unregistering and registering again), the 
> ConfigurationManager always re-initializes its list of PersistenceManagers. 
> Thus, no caching is possible and configurations are loaded unnecessarily.
> Details: In the ConfigurationManager line 818 getTrackingCount() on the 
> service tracker for PersistenceManagers is called. If the number returned is 
> different to the number of currently known PersistenceManagers, then the list 
> of PersistenceManagers is re-initialized. This works fine as long as the list 
> of PersistenceManager increases. But if a PersistenceManager is unregistered, 
> getTrackingCount() returns an increased number but the number of known 
> PersistenceManagers is decreased. Thus, the if-condition in line 819 is 
> always true, which causes a re-initialization of the list of known 
> PersistenceManagers.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to