From 779cb2e31b0e267669a351820cade378f696233c Mon Sep 17 00:00:00 2001 From: TheByronHimes Date: Mon, 18 Nov 2024 16:35:38 +0000 Subject: [PATCH 1/3] First draft --- .../technical_specification.md | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 62-california-condor/technical_specification.md diff --git a/62-california-condor/technical_specification.md b/62-california-condor/technical_specification.md new file mode 100644 index 0000000..2af7fb9 --- /dev/null +++ b/62-california-condor/technical_specification.md @@ -0,0 +1,101 @@ +# DB Versioning (California Condor) +**Epic Type:** Implementation Epic + +Epic planning and implementation follow the +[Epic Planning and Marathon SOP](https://docs.ghga-dev.de/main/sops/sop001_epic_planning.html). + +## Scope +### Outline: +This epic is for the implementation of the database versioning concept used to +transition data for a given database when a relevant schema change or systematic content +update occurs. Database versioning also provides a way to detect whether the current +database instance is the expected version or not. + + +### Included/Required: +- Initial implementation on single service: + - Add database version + - Logic that checks database version at startup + - Outer migration logic: + - Locking mechanism + - Start migration from detected version + - Refinements and abstraction of common logic if applicable +- Apply database versioning to remaining services + + +## Additional Implementation Details: + +### General Migration Logic + +Each microservice owns its own database, so any discussion of migrations can be assumed +to concern a single microservice. According to +[the ADR](https://github.com/ghga-de/adrs/pull/28), a given service will use a +single value to denote the version of its entire database, as opposed to versioning a +collection or the schema used for a document. + +The *current* database version will be stored in a dedicated collection. The *expected* +database version will be stored in application code. When a service starts up, the +first action will be to compare the actual current version number against the expected +value. If the expected version number is not found in the database version collection +and the lock is not set, the service can start the migration process. + +```json +// Database version collection upon migrating the DB to version 2: +{ + "version": 2, + "completed": ISODate("2024-11-18T09:30:00Z"), + "duration_sec": 25 +}, +{ + "version": 1, + "completed": ISODate("2024-10-07T09:00:00Z"), + "duration_sec": 22 +} +``` + +The migration process will form a chain, where discreet migration logic exists for +every database version to migrate the data from version X to X+1. Most of the time, the +database will be current or, at most, one version behind. However, if a database restore +occurs and the data happens to be older, the migration process will begin at the +appropriate step in the migration chain and continue until the data is totally migrated. + + +### Multi-Instance Services + +Several services operate with more than one instance simultaneously because one serves +as a REST API and another consumes Kafka events (for example). Obviously, only one +migration process should occur in these situations, rather than executing for each +instance. This can be solved if we ensure the migration process only runs as part of +the startup for one entrypoint, e.g. the REST API. We can "lock" the database to signal +to any other potential instances that there is already a migration in progress: + +```json +// locking collection with one document +{ + "migration_in_progress": true +} +``` + +The first instance to obtain the lock is allowed to proceed, all others wait. + +After preventing simultaneous migrations, we need to optimize how other instances +operate while a migration is underway and consider how to handle read and +write requests. One way would be to accept some downtime and +block service instances until the migration is complete. This might be a +sufficient initial solution because database sizes are small enough that migrations will +be completed quickly. If we have to eliminate downtime, we could perform shadow +migrations and write the results to temporary collections while the old service +version continues to handle requests. When the migration is complete, the old service +can be taken offline and the collections swapped out. That's a little more complex. + +### Monitoring + +Migration progress should be reported at periodic intervals, and the migration duration +should be both logged and stored in the database along with a timestamp. + + +## Human Resource/Time Estimation: + +Number of sprints required: 2 + +Number of developers required: 1 From cc2b4991fbf17513ddf5b77ebde444354e7a6a3b Mon Sep 17 00:00:00 2001 From: TheByronHimes Date: Tue, 19 Nov 2024 17:01:36 +0000 Subject: [PATCH 2/3] Add diagram and more details --- .../images/db migrations white bg.png | Bin 0 -> 119649 bytes .../technical_specification.md | 62 +++++++++++++++--- 2 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 62-california-condor/images/db migrations white bg.png diff --git a/62-california-condor/images/db migrations white bg.png b/62-california-condor/images/db migrations white bg.png new file mode 100644 index 0000000000000000000000000000000000000000..a4f6df9b337d18646991c6a59f96fb3603e76dfb GIT binary patch literal 119649 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%0AJnmd?T{G?oxg!`H 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

E7%~Xn>0)#+TQByT3#NK(#I7 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

yF|AOZo}ZlY{4`fZZq~_QCQXuVHh&*P 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

!5D7$AIG!SHwBH)8? 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 literal 0 HcmV?d00001 diff --git a/62-california-condor/technical_specification.md b/62-california-condor/technical_specification.md index 2af7fb9..78024d1 100644 --- a/62-california-condor/technical_specification.md +++ b/62-california-condor/technical_specification.md @@ -40,17 +40,19 @@ value. If the expected version number is not found in the database version colle and the lock is not set, the service can start the migration process. ```json -// Database version collection upon migrating the DB to version 2: -{ +// Database version collection upon migrating a database from version 1 to version 2: +[ + { "version": 2, "completed": ISODate("2024-11-18T09:30:00Z"), "duration_sec": 25 -}, -{ + }, + { "version": 1, "completed": ISODate("2024-10-07T09:00:00Z"), "duration_sec": 22 -} + } +] ``` The migration process will form a chain, where discreet migration logic exists for @@ -58,9 +60,11 @@ every database version to migrate the data from version X to X+1. Most of the ti database will be current or, at most, one version behind. However, if a database restore occurs and the data happens to be older, the migration process will begin at the appropriate step in the migration chain and continue until the data is totally migrated. +Migration code should be preserved at least until there is no possibility of +encountering the corresponding database version again. -### Multi-Instance Services +### Services with Multiple Entrypoints Several services operate with more than one instance simultaneously because one serves as a REST API and another consumes Kafka events (for example). Obviously, only one @@ -71,12 +75,18 @@ to any other potential instances that there is already a migration in progress: ```json // locking collection with one document -{ +[ + { "migration_in_progress": true -} + } +] ``` -The first instance to obtain the lock is allowed to proceed, all others wait. +The first instance to obtain the lock is allowed to proceed, all others wait. This has +the benefit of preventing concurrent migrations if services are scaled. An alternative +to a dedicated collection is to use the database version collection -- if the +expected database version exists but the timestamp is missing, then that means a +migration is already underway. After preventing simultaneous migrations, we need to optimize how other instances operate while a migration is underway and consider how to handle read and @@ -88,10 +98,42 @@ migrations and write the results to temporary collections while the old service version continues to handle requests. When the migration is complete, the old service can be taken offline and the collections swapped out. That's a little more complex. +### Errors During Migration + +If an error prevents a migration from finishing, then we should discard the processed +entries, unset the lock document, and log the error. The cleanup is straightforward if +migrated documents are stored in a temporary collection that can be dropped, rather than +modifying the original collection directly (in which case we would need to reverse +changes, which could be difficult). It's important that we test migrations thoroughly +to avoid extended downtime from unexpected errors. + + +### Reverse Migrations + +There might be some situation where we need to apply the reverse of a migration. +If DB version 5 is applied, but we later find that we should have stayed with version 4, +then we need to move to version 6. Version 6 is not treated as some special 'undo' +version increment; the migration logic merely happens to move the data to the same +structure contained in version 4. + +### Migration Structure + +![Migration structure](./images/db%20migrations%20white%20bg.png) + +In the image above, the green section indicates the top-level migration logic, most of +which can be implemented in a library like `hexkit`. +The *rounded* orange boxes represent distinct migrations between database versions. +The *square* orange boxes show common logic that can be abstracted into a library. +The red-dotted items would be performed once for each batch of documents if a collection +were to be processed in batches. +The gray box shows where per-collection migration logic would occur. + + ### Monitoring Migration progress should be reported at periodic intervals, and the migration duration -should be both logged and stored in the database along with a timestamp. +should be both logged and stored in the database along with a timestamp so we can +identify performance issues early on. ## Human Resource/Time Estimation: From 0b3dfb076aa1ff02742f86f991b554746c6d85aa Mon Sep 17 00:00:00 2001 From: TheByronHimes Date: Tue, 19 Nov 2024 17:15:29 +0000 Subject: [PATCH 3/3] Add a bit about testing --- .../technical_specification.md | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/62-california-condor/technical_specification.md b/62-california-condor/technical_specification.md index 78024d1..2172fe0 100644 --- a/62-california-condor/technical_specification.md +++ b/62-california-condor/technical_specification.md @@ -98,16 +98,6 @@ migrations and write the results to temporary collections while the old service version continues to handle requests. When the migration is complete, the old service can be taken offline and the collections swapped out. That's a little more complex. -### Errors During Migration - -If an error prevents a migration from finishing, then we should discard the processed -entries, unset the lock document, and log the error. The cleanup is straightforward if -migrated documents are stored in a temporary collection that can be dropped, rather than -modifying the original collection directly (in which case we would need to reverse -changes, which could be difficult). It's important that we test migrations thoroughly -to avoid extended downtime from unexpected errors. - - ### Reverse Migrations There might be some situation where we need to apply the reverse of a migration. @@ -128,6 +118,31 @@ The red-dotted items would be performed once for each batch of documents if a co were to be processed in batches. The gray box shows where per-collection migration logic would occur. +### Errors During Migration + +If an error prevents a migration from finishing, then we should discard the processed +entries, unset the lock document, and log the error. The cleanup is straightforward if +migrated documents are stored in a temporary collection that can be dropped, rather than +modifying the original collection directly (in which case we would need to reverse +changes, which could be difficult). It's important that we test migrations thoroughly +to avoid extended downtime from unexpected errors. + +### Testing Migrations + +Abstracted logic should be tested wherever it lives, like `hexkit`. +Tests should cover the following, but the list is not exhaustive: +- The locking mechanism +- Error handling +- Logging +- Database version detection +- Selecting the right migration to start with +- What to do when no matching migration exists + +When we test individual migration code, like the code that will update collection A for +the migration from database version X to Y, we should use some mock data that represents +documents in the database. +Tests should at least verify that the migration code applies the right changes. + ### Monitoring