commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Oliver Heger (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (CONFIGURATION-496) Excessive Synchronization AbstractFileConfiguration
Date Mon, 03 Jun 2013 20:36:20 GMT

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

Oliver Heger resolved CONFIGURATION-496.
----------------------------------------

    Resolution: Fixed
    
> Excessive Synchronization AbstractFileConfiguration
> ---------------------------------------------------
>
>                 Key: CONFIGURATION-496
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-496
>             Project: Commons Configuration
>          Issue Type: Bug
>          Components: File reloading
>    Affects Versions: 1.6, 1.7, 1.8
>            Reporter: Tim Canavan
>             Fix For: 2.0
>
>
> We are having a problem with commons configuration 1.6 AbstractFileConfiguration 
> During a stress test we are seeing that we have wait locks against this method causing
this method not to complete for up to one second.
> We are using the FileReloadStrategy delegate which makes a check on the file system when
now + interval is greater than the compare time.
> Why can't we make this check before the synchronized block thus increasing throughput.
I have noticed in 1.8 that the caller to this method is synchronized. This seems like excessive
synchronization. Any ideas how to solve this. 
> {code}
> public void reload()
>     {
>         synchronized (reloadLock)
>         {
>             if (noReload == 0)
>             {
>                 try
>                 {
>                     enterNoReload(); // avoid reentrant calls
>                     if (strategy.reloadingRequired())
>                     {
>                         if (getLogger().isInfoEnabled())
>                         {
>                             getLogger().info("Reloading configuration. URL is " + getURL());
>                         }
>                         fireEvent(EVENT_RELOAD, null, getURL(), true);
>                         setDetailEvents(false);
>                         boolean autoSaveBak = this.isAutoSave(); // save the current
state
>                         this.setAutoSave(false); // deactivate autoSave to prevent information
loss
>                         try
>                         {
>                             clear();
>                             load();
>                         }
>                         finally
>                         {
>                             this.setAutoSave(autoSaveBak); // set autoSave to previous
value
>                             setDetailEvents(true);
>                         }
>                         fireEvent(EVENT_RELOAD, null, getURL(), false);
>                         // notify the strategy
>                         strategy.reloadingPerformed();
>                     }
>                 }
>                 catch (Exception e)
>                 {
>                     fireError(EVENT_RELOAD, null, null, e);
>                     // todo rollback the changes if the file can't be reloaded
>                 }
>                 finally
>                 {
>                     exitNoReload();
>                 }
>             }
>         }
>     }
> {code}

--
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

Mime
View raw message