[PATCH 0/6] A sketch of flattening the models with live migration
Daniel Axtens
dja at axtens.net
Sat Sep 28 09:53:43 AEST 2019
Daniel Axtens <dja at axtens.net> writes:
> We want to flatten CoverLetter and Patch into Submission for performance
> and simplicity reasons.
>
> We also want to avoid some of the debacles of previous migrations where
> sites were offline for hours to perform the migration, or needed to
> drop the migration out of Python entirely and in to raw SQL.
>
> So this is a sketch or outline of an approach were we migrate diff
> and pull_url from Patch to Submission using live-ish migrations (not
> fully live, but with no data migrations in the schema changes) and
> then drop the CoverLetter model.
I now have a full implementation which I'm still cleaning up and
rebasing in the lead up to an RFC:
https://github.com/daxtens/patchwork/tree/flatten
It does away with the Patch and CoverLetter models - everything is now a
Submission and we have submission.is_patch()/Submission.patch_objects
and submission.is_cover()/Submission.cover_objects instead.
Daniel
>
> The way this works is pretty straight forward and is documented in
> more detail in the patches - basically patches 1-3 are all minor
> fixups, then you bring down your instance, apply patch 4, do the
> schema migration, bring up your instance, perform the data migration
> in the background, then bring down your instance, apply patches 5 and
> 6, do those migrations, and then you're done. Total downtime should be
> very short (hopefully no more than a few minutes), depending on how
> long it takes to add columns to your database.
>
> Lots to do before this is a full approach - I still have to migrate
> all the rest of the fields, and then clean up everything that depends
> on a Patch model existing. But I feel like this at least demonstrates
> that we can do the really hard work of the migration - moving the data
> around - in a way that is friendly to sysadmins of large instances.
>
> Daniel Axtens (6):
> pyenv: also install requirements for python2
> tests: make test suite pass with XML-RPC disabled
> parsearchive,mail: use repr() to get a human readable exception
> Begin live migration of diff and pull_url to Submission
> Migration part 2: drop old fields
> Burninate CoverLetter
>
> patchwork/admin.py | 3 -
> patchwork/api/cover.py | 16 +--
> patchwork/api/embedded.py | 2 +-
> patchwork/api/filters.py | 13 ++-
> patchwork/api/patch.py | 10 +-
> .../commands/livemigrate-v22-v23.py | 35 ++++++
> patchwork/management/commands/parsearchive.py | 6 +-
> patchwork/management/commands/parsemail.py | 2 +-
> .../0037_prepare_old_diff_pull_url.py | 35 ++++++
> .../0038_submission_new_diff_pull_url.py | 25 ++++
> patchwork/migrations/0039_sanity_check.py | 27 +++++
> .../migrations/0040_drop_old_diff_pull_url.py | 23 ++++
> patchwork/migrations/0041_drop_coverletter.py | 29 +++++
> patchwork/models.py | 110 +++++++++++++++---
> patchwork/parser.py | 9 +-
> patchwork/signals.py | 4 +-
> patchwork/templates/patchwork/submission.html | 10 +-
> patchwork/tests/api/test_cover.py | 5 +-
> patchwork/tests/test_about.py | 24 +++-
> patchwork/tests/test_series.py | 14 +--
> patchwork/tests/test_xmlrpc.py | 3 +
> patchwork/tests/utils.py | 6 +-
> patchwork/views/cover.py | 25 ++--
> patchwork/views/patch.py | 1 +
> patchwork/views/xmlrpc.py | 5 +-
> tools/docker/Dockerfile | 11 +-
> 26 files changed, 378 insertions(+), 75 deletions(-)
> create mode 100644 patchwork/management/commands/livemigrate-v22-v23.py
> create mode 100644 patchwork/migrations/0037_prepare_old_diff_pull_url.py
> create mode 100644 patchwork/migrations/0038_submission_new_diff_pull_url.py
> create mode 100644 patchwork/migrations/0039_sanity_check.py
> create mode 100644 patchwork/migrations/0040_drop_old_diff_pull_url.py
> create mode 100644 patchwork/migrations/0041_drop_coverletter.py
>
> --
> 2.20.1
More information about the Patchwork
mailing list