Rolland Hobbie created CONFIGURATION-712:
--------------------------------------------
Summary: 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
Attachments: ReloadingFileBasedConfigurationBuilderTest.java
[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)