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

Michael Noack commented on CONFIGURATION-788:
---------------------------------------------

I just wanted to add that we didn't build anything new with it. The product 
using it is itself almost two decades old. It has had this dependency for at 
least a decade. We have worked around the issue externally in the past but it 
kept reappearing as new developers joined the project unaware of it. This is 
why I decided to fix it where it occurs to have anyone profit from it 
automatically.

We certainly will move up to 2.x as soon as we can. Should the 2.x version be 
susceptible to it as well I will most likely provide a similar fix.

> AbstractHierarchicalFileConfiguration can lose data when #save() is 
> interrupted by JVM abort/power failure
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: CONFIGURATION-788
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-788
>             Project: Commons Configuration
>          Issue Type: Bug
>          Components: File reloading
>    Affects Versions: 1.10
>         Environment: This occurs in any environment with any use of 
> AbstractFileConfiguration#save(), AbstractFileConfiguration#save(URL) or 
> AbstractFileConfiguration#save(File).
>            Reporter: Michael Noack
>            Priority: Major
>              Labels: newbie
>         Attachments: 
> 0001-Implemented-keep-backup-feature-for-file-configurati.patch, 
> 0002-CHANGED-AbstractFileConfiguration-Fixed-potential-NP.patch
>
>
> When saving the current configuration, either using any of the #save() 
> Methods or when setting a property while auto-save is enabled the method 
> AbstractFileConfiguration#save(URL) effectively wipes the file content when 
> opening the OutputStream.
> If the JVM gets destroyed or the machine powered down before the new 
> configuration has been serialized to the file an empty file remains with no 
> configuration at all.
>  
> I've created a patch on top of the RELEASE_1_10_BRANCH which introduces a 
> mitigation. The mitigation consists of a "keep backup" flag in 
> AbstractFileConfiguration which, if set, creates a copy of the current 
> configuration file before writing into it.
> When a configuration exception occurs upon loading the configuration again 
> the exception will be caught and loading of the backup is attempted first 
> before rethrowing the exception when this fails as well.
> To allow existing implementations to profit from this without touching all 
> instances a global flag has been added to 
> AbstractHierarchicalFileConfiguration which is then inherited by all future 
> delegates added to any instance of AbstractHierarchicalFileConfiguration.
> Four unit tests for this mitigation feature have been added to 
> TestHierarchicalXMLConfiguration.
> I've uploaded a repository with the commit to github: 
> https://github.com/noamik/commons-configuration/tree/RELEASE_1_11_BRANCH



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to