You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Michael Noack (Jira)" <ji...@apache.org> on 2020/03/31 12:06:00 UTC

[jira] [Comment Edited] (CONFIGURATION-788) AbstractHierarchicalFileConfiguration can lose data when #save() is interrupted by JVM abort/power failure

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

Michael Noack edited comment on CONFIGURATION-788 at 3/31/20, 12:05 PM:
------------------------------------------------------------------------

Source for build failing: https://travis-ci.org/github/apache/commons-configuration/builds/226884677

I misinterpreted the build number of the failed build as the number of failed unit tests.


was (Author: cnoamik):
Source for build failing: [https://travis-ci.org/github/apache/commons-configuration/builds/226884677

]I misinterpreted the build number of the failed build as the number of failed unit tests.

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