...
Currently, all the migration scripts for all the services/repos (sunbird-lms-service, group-service, sunbird-notification-service, and sunbird-course-service) are packaged with the cassandra-migration module jar. And all the migration information is stored in the cassandra_migration_version and cassandra_migration_version_counts tables in the sunbird keyspace (used for sunbird-lms-service).
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
Background & Problem Statement
If any adopter wanted to build and deploy any one of the services, then the adopter needed to create all the cassandra Cassandra keyspaces by executing the existing cassandra-migration module, even though the adopter was only adopting a specific service. There is no way for an adopter to only create/migrate specific keyspaces. Furthermore, it is difficult to determine which release a specific migration script is introduced in.
Key Design Problems
Separate Group the migration script based on respective services/repos/keyspaces.
Remove the bundling on script as a part of cassandra-migration module and variabilise the script path.
Variabilize the keyspace for cassandra-migration module.
Maintain the release version that in which release version that script introducedVariabilize the script location for cassandra-migration module.
Design
Each keyspace will have it’s its own cassandra_migration_version and cassandra_migration_version_counts table.
Add the release version in the filename.
Code Block V1.<migration_version>_cassandra-<release_version>.cql e.g. V1.1_cassandra-release-5.2.0.cql
Sample of cassandra_migration_version and cassandra_migration_version_counts table:
...
Separate all the migration script based on repos and keyspaces:
Option 1: push it to
the respective repo
Option 2: Keep in sunbird-utils repo and group is based on keyspace.
Mapping of the available keyspaces with repos
Repo Name | Keyspaces |
---|---|
sunbird-lms-service | sunbird |
groups-service | sunbird_groups |
sunbird-notification-service | sunbird_notifications |
sunbird-course-service | sunbird_courses |
Command 1:
Code Block |
---|
java -jar \
-Dcassandra.migration.scripts.locations=filesystem:<absolute or relative path>/db/migration/cassandra \
-Dcassandra.migration.cluster.contactpoints=localhost \
-Dcassandra.migration.cluster.port=9042 \
-Dcassandra.migration.cluster.username=username \
-Dcassandra.migration.cluster.password=password \
-Dcassandra.migration.keyspace.name=keyspace_name \
target/*-jar-with-dependencies.jar migrate |
Command 2:
Code Block |
---|
java -cp "cassandra-migration-0.0.1-SNAPSHOT-jar-with-dependencies.jar" com.contrastsecurity.cassandra.migration.utils.MigrationScriptEntryPoint |
The system environment listed below is required for command 2.
System Env
Code Block |
---|
sunbird_cassandra_keyspace=<keyspace_name>
sunbird_cassandra_migration_location="filesystem:<absolute or relative path>/db/migration/cassandra" |