CDB boot error: Init transaction failed to validate

We trying to upgrade ConfD to version 7.1.1 but it fails to start because it tries to validate “must” statements in phase0 when the external application is not started, this behavior wasn’t observed with ConfD 6.5 .

The error message is:

confd[3969]: devel-c no registration found for callpoint simplecp/get_elem of type=external path <path_with_must_statment>
confd[3969]: - CDB boot error: Init transaction failed to validate: <must_statement>: <must_statement_error-message>

If we start ConfD in phase0 and start the applications it is working, but it is very difficult for us to orchestrate the processes and the phases and we want to avoid it.
We tried to use the ‘–ignore-initial-validation’ but without success.

Has something change in newer ConfD versions in this steps?
How can we overcome this issue?

Thanks in advance.

The initial transaction takes place when 1) confd starts with an empty database 2) CDB upgrade needs to be done. I’m assuming 2) is your case; you did not see it with 6.5 because you never needed to upgrade, and moving from one major confd release to another causes CDB upgrade. The option --ignore-initial-validation cannot help you, I’m afraid, since

[this] option makes ConfD skip any validation callpoints when committing these initial transaction.

So only validation callpoints can be skiiped; I guess confd needs to make sure that at least model-wise the configuration is sound, so there is no way to skip validating must statements and such.

Technically, you do not need to make sure that phases and applications are always started in the correct order, it is enough that you make it start like that just once to upgrade CDB, all subsequent starts can be done without this careful sequencing - I don’t know, is this an option for you? Though it is perhaps advisable to take a look at the startup process if you can implement it better.

We have the case 1, we are trying to start with a clean cdb.
We followed the approach as advised and handled the phases from code.
In general it is a little tricky to manage it, at least for our implementation.
The trickiest part was to synchronize this process with some integration tests.

Currently we start confd with the option --start-phase0 and manage the phases with the java api using Cdb to get the current phase “cdb.getPhase().getCurrentPhase()” and maapi “maapi.startPhase(phase)” to start the phases.

We are still testing it but as for now it appears that it is working without issues.

Thank you very much for your effort.

1 Like