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] [Commented] (CONFIGURATION-712) FileHandlerReloadingDetector Does Not Correctly Initialize File Last Modified
Date Sat, 01 Sep 2018 15:08:00 GMT

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

Oliver Heger commented on CONFIGURATION-712:
--------------------------------------------

Letting {{DefaultReloadingDetectorFactory}} take care for the initialization of the reloading
detector is a good idea. We can change this. Do you want to create a patch for this?

Also, if you have concrete suggestions how to improve documentation, please let us know; this
is highly appreciated.

> FileHandlerReloadingDetector Does Not Correctly Initialize File Last Modified
> -----------------------------------------------------------------------------
>
>                 Key: CONFIGURATION-712
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-712
>             Project: Commons Configuration
>          Issue Type: Bug
>          Components: File reloading
>    Affects Versions: 2.3
>            Reporter: Rolland Hobbie
>            Priority: Major
>         Attachments: ReloadingFileBasedConfigurationBuilderExampleTest.java, ReloadingFileBasedConfigurationBuilderTest.java
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> [FileHandlerReloadingDetector|https://commons.apache.org/proper/commons-configuration/apidocs/src-html/org/apache/commons/configuration2/reloading/FileHandlerReloadingDetector.html]
declares the following method:
>  
> {code:java}
> 150    @Override
> 151    public boolean isReloadingRequired()
> 152    {
> 153        long now = System.currentTimeMillis();
> 154        if (now >= lastChecked + getRefreshDelay())
> 155        {
> 156            lastChecked = now;
> 157
> 158            long modified = getLastModificationDate();
> 159            if (modified > 0)
> 160            {
> 161                if (lastModified == 0)
> 162                {
> 163                    // initialization
> 164                    updateLastModified(modified);
> 165                }
> 166                else
> 167                {
> 168                    if (modified != lastModified)
> 169                    {
> 170                        return true;
> 171                    }
> 172                }
> 173            }
> 174        }
> 175
> 176        return false;
> 177    }
> {code}
>  
> During initialization of FileHandlerReloadingDetector, lastModified is never instantiated,
so the first time isReloadingRequired() is invoked lastModified will be 0.
>  
> This results in two issues:
>  
> Test #1
>  * Scenario Steps 
>  ## Initialize ReloadingFileBasedConfigurationBuilder without invoking builder.getConfiguration()
>  ## Wait longer than refreshDelay
>  ## Invoke builder.getReloadingController().checkForReloading(null) to notify the FileHandlerReloadingDetector
to check for reload
>  ## Invoke bulider.getConfiguration()
>  ## Update the properties file
>  ## Wait longer than refreshDelay
>  ## Invoke builder.getReloadingController().checkForReloading(null) to notify the FileHandlerReloadingDetector
to check for reload
>  ## Invoke bulider.getConfiguration()
>  * Result - the Configuration does not have the updated value.
>  
> Test #2
>  * Scenario Steps 
>  ## Initialize ReloadingFileBasedConfigurationBuilder without invoking builder.getConfiguration()
>  ## Invoke bulider.getConfiguration()
>  ## Update the properties file
>  ## Wait longer than refreshDelay
>  ## Invoke builder.getReloadingController().checkForReloading(null) to notify the FileHandlerReloadingDetector
to check for reload
>  ## Invoke bulider.getConfiguration()
>  ## Update the properties file
>  ## Wait longer than refreshDelay
>  ## Invoke builder.getReloadingController().checkForReloading(null) to notify the FileHandlerReloadingDetector
to check for reload
>  ## Invoke bulider.getConfiguration()
>  * Result - For the first two invocations, the Configuration is not updated. One the
third invocation of builder.getConfiguration() the property is updated to the new value.
>  
> As potential solution, the constructor of FileHandlerReloadingDetector should either
call isReloadingRequired() or updateLastModified(getLastModificationDate()) to initialize
the lastModified instance variable to the file current lastModified value.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message