Resolve "conflicts detected" while applying patch through CLI command JBoss EAP 6/7

Solution Verified - Updated -

Environment

  • Red Hat JBoss Enterprise Application Platform (EAP)
    • 7
    • 6.2 or later

Issue

Command line returns the following errors when trying to update via JBoss EAP CLI:

[disconnected /] patch apply /path-up-to/jboss-eap-patch.zip
Conflicts detected: bin/standalone.sh
Use the --override or --preserve arguments in order to resolve the conflict.
[domain@localhost:9999 /] patch apply /path/to/patch.zip --host=<jboss-host>
{"host-failure-descriptions" => [("<jboss-host>" => {
    "message" => "Conflicts detected",
    "conflicts" => {"modules" => ["org.apache.cxf.impl:main"]}
})]}
[disconnected /] patch apply /path/to/patch.zip --preserve=[bin/standalone.bat,bin/standalone.conf.bat]
Conflicts detected: sun.jdk:main
Use the --override-all, --override=[] or --preserve=[] arguments in order to resolve the conflict.

Resolution

Using --preserve | --override

To keep changes made to a file, use the --preserve option:

[disconnected /] patch apply /path-up-to/jboss-eap-x.y.z-patch.zip --preserve=bin/standalone.sh
{
    "outcome" : "success",
    "result" : {}
}
[disconnected /] 

Override changes to a single file with --override=

[disconnected /] patch apply /path-up-to/jboss-eap-x.y.z-patch.zip --override=bin/standalone.sh
{
    "outcome" : "success",
    "result" : {}
}
[disconnected /] 

NOTE: If using non-interactive mode of JBoss EAP CLI and using multiple files/modules in --preserve or --override, make sure to add double quotes ( " ) to wrap the content. See an example below:

    ~~~
    ./jboss-cli.sh 'patch apply ../../patch.zip --preserve="bin/standalone.sh,bin/standalone.conf"'
    {
        "outcome" : "success",
        "result" : {}
    }
    ~~~

Using --override-modules | --override-all

In case of a module, it is not possible to use --preserve or --override options. See solution Install different version of jars as a module inside JBoss EAP for more information on how to deal with multiple module versions. Once followed the instructions, then use --override-modules or --override-all

    [disconnected /] patch apply /path-up-to/jboss-eap-x.y.z-patch.zip --override-modules
    {
        "outcome" : "success",
        "result" : {}
    }
    [disconnected /]

If the files that are in the init.d directory were deleted, patch updater would still report that as a conflict. Use --override-all flag to proceed with the installation.

Root Cause

This Conflicts detected error occurs if there is a difference detected in any of the JBoss EAP configuration file with respect to the default configuration which is shipped by Red Hat. The patch process performs a checksum of files before replacing them, and if there is a checksum mismatch it knows that you have modified that file. Since we cannot know the original purpose of your modification or whether you still need the modification, the patch process will abort and prompt the user to indicate by using the preserve/override flags whether it is OK to overwrite your modified file.

In the case that you need to merge your customizations with the new patch version for a human-readable file type, a good process is to backup your modified file, perform the patch with --override, then execute a diff between your modified file and the updated one to obtain a list of differences. Then you can modify the updated file by hand to port over any modifications you need to keep.

For example, in above example this error is coming from "bin/standalone.sh","bin/standalone.bat"file and sun.jdk:main, which means user has edited these bin/standalone.sh , "bin/standalone.bat" file or made changes in sun.jdk:main module .

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

4 Comments

It would have been more useful if the option override-all was mentioned or a link to documentation.

yes very useful.

How can I used --override=[] option? I want to give 2 values in override. if i give --override=value1,value2 then i get error Conflicts detected: value2, meaning second value is not read. Can anyone suggest a solution to this?