diff --git a/docs/source/database-management.rst b/docs/source/database-management.rst index c1b74b70c0..dd1db64502 100644 --- a/docs/source/database-management.rst +++ b/docs/source/database-management.rst @@ -4,10 +4,11 @@ - Database management =================== +.. contents:: + Corda - the platform, and the installed third-party CorDapps store their data in a relational database (see :doc:`api-persistence`). When Corda is first installed, or when a new CorDapp is installed, associated tables, indexes, foreign-keys, etc. must be created. Similarly, when Corda is upgraded, or when a new version of a CorDapp is installed, @@ -155,22 +156,21 @@ database before executing the migration scripts. Database management tool ------------------------ -The database management tool is distributed as a standalone jar file named ``tools-database-manager-${corda_version}.jar``. +The database management tool is distributed as a standalone JAR file named ``tools-database-manager-${corda_version}.jar``. It is intended to be used by Corda Enterprise node administrators. Currently it has these features: - 1. It allows running the migration on the database (``--execute-migration`` ) - 2. Offers the option to inspect the actual SQL statements that will be run as part of the current migration (``--dry-run`` ) - 3. Sometimes, when a node or the database management tool crashes while running migrations, Liquibase will not release the lock. - This can happen during some long database operation, or when an admin kills the process. - ( This cannot happen during normal operation of a node. Only during the migration process.) - See: . - The tool provides a "release-lock" command that would forcibly unlock the database migration process. - 4. When a CorDapp that does not is ready to be deployed on a Corda Enterprise production node, - using this tool, the CorDapp can be "lifted" (``--create-migration-sql-for-cordapp``). - The reason this is needed is because those CorDapps don't handle this enterprise level concern. - See below for details. + 1. ``--create-migration-sql-for-cordapp``: Creates migration scripts for each ``MappedSchema`` in a CorDapp. Each + ``MappedSchema`` in a CorDapp installed on a Corda Enterprise node requires the creation of a new table in the + node's database. It is bad practice to apply these changesets to a production database automatically. Instead, + migration scripts must be generated for each schema. These can then be inspected before being applied + 2. ``--dry-run``: Inspects the actual SQL statements that will be run as part of a migration job + 3. ``--execute-migration``: Runs migration scripts on the node's database + 4. ``--release-lock``: Forces the release of database locks. Sometimes, when a node or the database management + tool crashes while running migrations, Liquibase will not release the lock. This can happen during some long + database operations, or when an admin kills the process (this cannot happen during normal operation of a node, + only during the migration process - see: ) It has the following command line options: @@ -223,24 +223,19 @@ as above, either to do a dry run or execute the migrations. The same is true when installing or upgrading a CorDapp. Do a dry run, check the SQL, then trigger a migration. -Node administrator installing a CorDapp targeted at the open source node ------------------------------------------------------------------------- +Node administrator installing a CorDapp +--------------------------------------- +If a CorDapp does not include the required migration scripts for each ``MappedSchema``, these can be generated and inspected before +being applied as follows: -The open source Corda codebase does not have support for Liquibase, so CorDapps contributed by the OS community -will not have this concern addressed by their original developers. - -To help Corda Enterprise users, we offer support in the database management tool for "lifting" a CorDapp to support Liquibase. - -These are the steps: - -1. Deploy the CorDapp on your node (copy the jar into the ``cordapps`` folder) +1. Deploy the CorDapp on your node (copy the JAR into the ``cordapps`` folder) 2. Find out the name of the ``MappedSchema`` containing the new contract state entities. -3. Call the database management tool: ``java -jar tools-database-manager-3.0.0.jar --base-directory /path/to/node --create-migration-sql-for-cordapp com.example.MyMappedSchema`` +3. Call the database management tool: ``java -jar tools-database-manager-${corda_version}.jar --base-directory /path/to/node --create-migration-sql-for-cordapp com.example.MyMappedSchema`` This will generate a file called ``my-mapped-schema.changelog-master.sql`` in a folder called ``migration`` in the ``base-directory``. In case you don't specify the actual ``MappedSchema`` name, the tool will generate one SQL file for each schema defined in the CorDapp 4. Inspect the file(s) to make sure it is correct. This is a standard SQL file with some Liquibase metadata as comments. -5. Create a jar with the ``migration`` folder (by convention it could be named: ``originalCorDappName-migration.jar``), - and deploy this jar together with the CorDapp, e.g. run the following command in the node base directory +5. Create a JAR with the ``migration`` folder (by convention it could be named: ``originalCorDappName-migration.jar``), + and deploy this JAR together with the CorDapp, e.g. run the following command in the node base directory ``jar cvf /path/to/node/cordapps/MyCordapp-migration.jar migration``. 6. To make sure that the new migration will be used, do a dry run with the database management tool and inspect the output file.