Introduction
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).
- LR-101Getting issue details... STATUS
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 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, determining which release a specific migration script is introduced in is difficult.
Key Design Problems
Separate the migration script based on respective services/repos.
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 introduced.
Design
Each keyspace will have its own cassandra_migration_version and cassandra_migration_version_counts table.
Add the release version in the filename.
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:
cqlsh> SELECT * FROM sunbird_groups.cassandra_migration_version; version | checksum | description | execution_time | installed_by | installed_on | installed_rank | script | success | type | version_rank ---------+-------------+-------------------------+----------------+--------------+---------------------------------+----------------+----------------------------------+---------+------+-------------- 1.1 | -1118871967 | cassandra-release-5.2.0 | 6 | cassandra | 2023-02-06 05:04:39.893000+0000 | 1 | V1.1_cassandra-release-5.2.0.cql | True | CQL | 1 (1 rows) cqlsh> SELECT * FROM sunbird_groups.cassandra_migration_version_counts; name | count ----------------+------- installed_rank | 1 (1 rows)
Separate all the migration script based on repos and push it to that specific repo.
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 |
Config
sunbird_cassandra_keyspace=<keyspace_name> sunbird_cassandra_migration_location="filesystem:<absolute or relative path>/db/migration/cassandra"