[ https://issues.apache.org/jira/browse/CONFIGURATION-788?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17071595#comment-17071595 ]
Michael Noack commented on CONFIGURATION-788: --------------------------------------------- I've created the pull request against branch RELEASE_1_10_BRANCH because this is the branch I've been working of from: [https://github.com/apache/commons-configuration/pull/44] Since repositories out there already contain a release version 1.10 one might want to add this to a new RELEASE_1_11_BRANCH though. At least that is what I've done internally. As much as I can tell the public build system for this branch no longer works. It reports 37 failed unit tests. For our own use I've resorted to monkey patching the 1.10-release jars to work around this issue. > 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)