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