Skip to content

Paket-Migrationen #194

@janbritz

Description

@janbritz

QuestionPy-Pakete sollten* nach den Semantic Versioning Regeln versioniert werden. Daraus abgeleitet, müssen Migrationen entweder explizit angegeben werden oder können implizit geschehen.

Es sollen folgende Operationen ermöglicht werden:

upgrade

von (X) zu (Y) Art
1.5.0 1.5.1 implizit
1.5.* 1.6.* implizit
1.*.* 2.*.* explizit

Wenn der Question-State von Version X auf Version Y geupgraded werden soll, muss die Migration im Paket Y erfolgen.

Hierfür muss im "expliziten-Fall" und muss nicht* im "impliziten-Fall" eine upgrade_to-Funktion in Y implementiert sein, die die Migrations-Logik enthält.

downgrade

von (X) zu (Y) Art
1.5.1 1.5.0 implizit
1.6.* 1.5.* explizit
2.*.* 1.*.* explizit

Wenn der Question-State von Version X auf Version Y gedowngraded werden soll, muss die Migration im Paket X erfolgen.

Hierfür muss im "expliziten-Fall" und muss nicht* im "impliziten-Fall" eine downgrade_to-Funktion in X implementiert sein, die die Migrations-Logik enthält.

sidegrade

Wenn man sidegraden möchte, muss das immer explizit geschehen. Will man den State von Paket X nach Paket Y sidegraden, dann sollte im Paket Y eine sidegrade_from-Funktion implementiert sein. Hier könnte man noch überlegen, ob X auch eine sidegrade_to-Funktion implementieren darf. Eine sidegrade_from-Funktion sollte dabei nicht nur den Namespace und Shortname des Pakets entgegennehmen, sondern auch die Version, z.B.:
X möchte zu Y migrieren und Y hat einesidegrade_from("X", Version(1, 0, 0))-Funktion. - Y kann also alle States mit Paketversion 1.0.* direkt* migrieren. Ideal wäre es, wenn die upgrade_to- oder downgrade_to-Funktionen von X aufgerufen werden, um bei Inkompatibilität einen kompatiblen State zu erzielen.

* Wenn wir es nicht als Bedingung sehen, dass Pakete strikt nach SemVer versioniert werden, dann können wir zusätzliche upgrade_to-/downgrade_to-Funktionen erlauben (z.B.: upgrade_to(Version(1, 5, 1)). Allerdings wäre dann die beschriebene sidegrade_from-Logik so nicht umsetzbar.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions