Getting following error when starting the canton

ERROR c.d.c.CantonEnterpriseApp$ - GENERIC_CONFIG_ERROR(8,0): Cannot convert configuration to a config of class com.digitalasset.canton.config.CantonEnterpriseConfig. Failures are:
at the root:
- (merge of sequencer_oracle.conf: 1,system properties,application.conf @ jar:file:/apps/canton-enterprise-2.2.0/lib/canton-enterprise-2.2.0.jar!/application.conf: 1,reference.conf @ jar:file:/apps/canton-enterprise-2.2.0/lib/canton-enterprise-2.2.0.jar!/reference.conf: 1) Key not found: ‘canton’.
err-context:{location=CantonConfig.scala:1374}

I believe you’re probably not opening your sequencer_oracle.conf file with the canton key. You can see a bunch of example of valid configurations here on the documentation (notice they always open with canton { ... }).

Hi ,

Thanks for the response ,
I have started with similar configuration earlier and didn’t get any error , now for persistence storage I have added the oracle db information and I got this error
below are the configuration details I have added
_shared {
// Please note that this configuration only applies for domain nodes. Use oracle-participant.conf to run a participant node with Oracle storage

for domain
storage {
type = oracle
config {
driver = “oracle.jdbc.OracleDriver”
url = “jdbc:oracle:thin:@”${ORACLE_HOST}“:”${ORACLE_PORT}/${ORACLE_DB}
password = ${ORACLE_PASSWORD}
user = ${ORACLE_USER}
}
}
}
for participant

_shared.storage.parameters.ledger-api-jdbc-url = “jdbc:oracle:thin:”${ORACLE_USER_LAPI}“/”${ORACLE_PASSWORD}“@”${ORACLE_HOST}“:”${ORACLE_PORT}/${ORACLE_DB}

Note from the same page in the documentation I linked above (more specifically, here) that the _shared key is not meant to be used directly to configure storage, but it’s just an example on how to use mixins to define re-usable snippets of configuration. You can see the example of how to use this advanced way of defining parts of your configuration by having a look under examples/03-advanced-configuration in the Canton release tarball).

If you would simply like to define the configuration in a single file, you can change the configuration above as follows:

canton {
    domains {
        <use_your_domain_id_here> {
            storage = {
              type = oracle
              config {
                ...
              }
            }
        }
    }
}

You can use a similar approach for the participant configuration as well.

Hi
I am trying to add in one file and now I am getting this error

ERROR c.d.c.CantonEnterpriseApp$ - CONFIG_VALIDATION_ERROR(8,0): Failed to validate the configuration due to: ledger-api-jdbc-url is not set for Syndicate1 e

below is the participant node config

participant1{
storage {
type = oracle
config {
driver = “oracle.jdbc.OracleDriver”
ledger-api-jdbc-url = “jdbc:oracle:thin:user/password@”${ORACLE_HOST}“:”${ORACLE_PORT}/${ORACLE_DB}
}
}

  admin-api {
    port = xxx
    address = "x.x.x.x"
  }
  ledger-api {
    port = xxxx
    address = "x.x.x.x"
  }
}

Looks like you are configuring participant1, but you should rather configure Syndicate1 according to your error message. Furthermore, as you have shown above the participant expects a slightly different set of configuration keys. The main point I wanted to raise was that _shared is not a valid configuration key, so you should should rather inline that .storage.parameters.ledger-api-jdbc-url configuration key in the configuration of the relevant participant.

Just for understanding I changed syndicate to partipant. In real file I am using syndicate1 only.
getting this the error when I am using storage
ERROR c.d.c.CantonEnterpriseApp$ - GENERIC_CONFIG_ERROR(8,0): Cannot convert configuration to a config of class com.digitalasset.canton.config.CantonEnterpriseConfig. Failures are:
at ‘canton.participants.Syndicate1.storage’:
- (sequencer_oracle.conf: 37) Key not found: ‘type’.
err-context:{location=CantonConfig.scala:1374}

Participant{
storage.parameters.ledger-api-jdbc-url = “jdbc:oracle:thin:user/password@”${ORACLE_HOST}“:”${ORACLE_PORT}/${ORACLE_DB}
admin-api {
port = xxx
address = “xxxx”
}
ledger-api {
port = xxxx
address = “xxxx”
}
}

could you please give exact configuration for the participant

After some trail and errors , conf file seems to be fine now , but getting a new error

ERROR o.f.c.i.c.DbMigrate - Migration of schema “DD4OPLEDG” to version “1 - Append only schema” failed! Please restore backups and roll back database and code!
ERROR c.d.c.e.EnterpriseEnvironment tid:372e483308404634469578546b7e079f - Failed to start Syndicate1: Ledger API server failed to start: FailedToStartLedgerApiServer(
org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateException: Migration V1__Append_only_schema.sql failed

SQL State : 99999
Error Code : 29855
Message : ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-12202: error while creating section group
DRG-50850: dresInsNew:offset

ORA-06512: at “CTXSYS.DRUE”, line 186
ORA-06512: at “CTXSYS.TEXTINDEXMETHODS”, line 320
Location : db/migration/oracle/V1__Append_only_schema.sql (/apps/GOLDMAN_NETWORK/GS_Jupiter/sequencer/file:/apps/canton-enterprise-2.2.0/lib/canton-enterprise-2.2.0.jar!/db/migration/oracle/V1__Append_only_schema.sql)
Line : 191
Statement : – filtering by witnesses (visibility) for some queries used in the implementation of
– GetActiveContracts (flat), GetTransactions (flat) and GetTransactionTrees.
– Note that Potsgres has trouble using these indices effectively with our paged access.
– We might decide to drop them.
CREATE SEARCH INDEX participant_events_divulgence_tree_event_witnesses_idx ON participant_events_divulgence (tree_event_witnesses) FOR JSON

What did you fix to make it work? This way, other users can benefit. :slightly_smiling_face:

If you are performing an upgrade, you might want to look here.

An alternative explanation might be you have to roll back the change you did with regards to the participant naming.

As a final notice, I noticed that you are currently working with Canton 2.2.0. I would recommend to upgrade the version as soon as possible (in particular, here are the release notes for 2.3.0, mentioning an upgrade to the Canton protocol to fix a bug). The latest version is 2.6.3 as of the time of writing.

1 Like

Hi I followed below structure to avoid the conf file error issues.

domain-managers {
DomainName {
storage {
type = oracle
config {
driver = “oracle.jdbc.OracleDriver”
url = “jdbc:oracle:thin:@”${ORACLE_HOST}“:”${ORACLE_PORT}/${ORACLE_DB}
password = “xxxx”
user = “DD4ODRUN”
}
}
admin-api.address = xxxx
admin-api.port = xxxx
//public-api.port = xxxx
//public-api.address = xxxx

}

}

participants {
Participant1{
storage{
type =oracle
config {
driver = “oracle.jdbc.OracleDriver”
url = “jdbc:oracle:thin:@”${ORACLE_HOST}“:”${ORACLE_PORT}/${ORACLE_DB}
password =“xxxx”
user = “DD4OPRUN”
}

ledger-api-jdbc-url = “jdbc:oracle:thin:DD4OPLEDG/xxxx@”${ORACLE_HOST}“:”${ORACLE_PORT}/${ORACLE_DB}}
admin-api {
port = xxxx
address = “xxxx”
}
ledger-api {
port = xxxx
address = “xxxx”
}
}
\\

I am not attempting the migration , I am trying to setup a persistence oracle storage .

Now I am getting the below error.

WARN o.f.c.i.d.b.Database - Flyway upgrade recommended: Oracle 19.1 is newer than this version of Flyway and support has not been tested. The latest supported version of Oracle is 19.0.
WARN c.d.p.s.FlywayMigrations - Asked to migrate-on-empty-schema, but encountered neither an empty database with 1 migrations already applied nor a fully-migrated databases with 13 migrations pending., context: {participant: “Participant1”}
ERROR c.d.c.e.EnterpriseEnvironment tid:ed2be390069708b6287a2053b8f91dd6 - Failed to start Syndicate1: Ledger API server failed to start: Asked to migrate-on-empty-schema, but encountered neither an empty database with 1 migrations already applied nor a fully-migrated databases with 13 migrations pending. Please run Participant1.db.migrate to apply pending migrations

What is the outcome of running the command recommended by the error message in the Canton Console?

I am initially trying to start the network with the DB persistence storage, didnt try that in the console because when I don’t use db storage it will be in memory and command is of no use

You probably have an inconsistent state arising from previously partially starting up the whole thing with a wrong configuration. If this is the first time you start and don’t have any meaningful data on your database, you can safely drop Canton-related data and start over.

Hi ,

I have dropped the data and trying the same , got the below error

WARN o.f.c.i.d.b.Database - Flyway upgrade recommended: Oracle 19.1 is newer than this version of Flyway and support has not been tested. The latest supported version of Oracle is 19.0.
WARN o.f.c.i.d.b.Database - Flyway upgrade recommended: Oracle 19.1 is newer than this version of Flyway and support has not been tested. The latest supported version of Oracle is 19.0.
Exception in thread “main” java.lang.RuntimeException: Failed to initialize crypto: Failed to initialize HMAC secret: FailedToLoadHmacSecret(java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
)
at com.digitalasset.canton.environment.CantonNodeBootstrapBase.$anonfun$crypto$2(CantonNodeBootstrap.scala:181)
at scala.util.Either.fold(Either.scala:190)
at cats.data.EitherT.$anonfun$fold$1(EitherT.scala:29)
at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:467)
at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1395)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)

Did you also clear the flyway_migration_history table? Otherwise the migration tool will believe that a series of migrations have happened and will expect a certain state to exist (which has been wiped out). If you want to start from zero, both that and the Canton data need to be wiped as if you were starting from scratch.

Hi tried the same ,
I am getting this error now

WARN c.d.c.r.EnterpriseDbMigrations:BoFADomain tid:d9adb16337cc8e4bef86110259ac0486 - Operation com.digitalasset.canton.resource.DbMigrations.migrateDatabaseInternal failed, exhausted retries: FlywayError(
org.flywaydb.core.api.FlywayException: Found non-empty schema(s) “DD4ODRUN” but no schema history table. Use baseline() or set baselineOnMigrate to true to initialize the schema history table.
at org.flywaydb.core.Flyway$1.execute(Flyway.java:154)
at org.flywaydb.core.Flyway$1.execute(Flyway.java:124)
at org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:214)
at org.flywaydb.core.Flyway.migrate(Flyway.java:124)
at com.digitalasset.canton.resource.DbMigrations.$anonfun$migrateDatabaseInternal$2(DbMigrations.scala:101)
at cats.syntax.EitherSyntax$CatchOnlyPartiallyApplied$.apply$extension(either.scala:31)
at com.digitalasset.canton.resource.DbMigrations.$anonfun$migrateDatabaseInternal$1(DbMigrations.scala:101)

See the error message: “Found non-empty schema(s) “DD4ODRUN” but no schema history table.”

You need to wipe the schema history table and all the tables managed by any Canton node for this to work.

yeah tried everything schema is very empty now. but still getting same , any suggestion to try any command on DB

Hi @harikrishna_sri_ramo!

Looking at the configs you posted we see that the domain (domain-manager) and the participant share the exact same database user/schema DD4OPRUN, but as per the doc they need to run on the separate schemas, i.e. for the domain it should be DD4ODRUN (note the D instead of P).
So the Flyway errors seem to come from 2 components trying to provision their database tables in the same schema.

We also recommend to upgrade to 2.6.x line as it should fix the warning:

WARN o.f.c.i.d.b.Database - Flyway upgrade recommended: Oracle 19.1 is newer than this version of Flyway and support has not been tested. The latest supported version of Oracle is 19.0.

Hi thanks for the response,

That is a typo error when I posted here , I am using the different users only