Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

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-101 - Getting 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

  1. Separate the migration script based on respective services/repos.

  2. Remove the bundling on script as a part of cassandra-migration module and variabilise the script path.

  3. Variabilize the keyspace for cassandra-migration module.

  4. 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"

  • No labels