summaryrefslogtreecommitdiff
path: root/scripts/migration/0.9.0/README.md
blob: 919a52350168440edf23d603a85dcd6d60ec5e76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
CouchDB schema migration to Soledad 0.8.2
=========================================

Migrate couch database schema from <= 0.8.1 version to 0.8.2 version.


ATTENTION!
----------

  - This script does not backup your data for you. Make sure you have a backup
    copy of your databases before running this script!

  - Make sure you turn off any service that might be writing to the couch
    database before running this script.


Usage
-----

To see what the script would do, run:

    ./migrate.py

To actually run the migration, add the --do-migrate command line option:

    ./migrate.py --do-migrate

See command line options:

    ./migrate.py --help


Log
---

If you don't pass a --log-file command line option, a log will be written to
the `log/` folder.


Differences between old and new couch schema
--------------------------------------------

The differences between old and new schemas are:

    - Transaction metadata was previously stored inside each document, and we
      used design doc view/list functions to retrieve that information. Now,
      transaction metadata is stored in documents with special ids
      (gen-0000000001 to gen-9999999999).

    - Database replica config metadata was stored in a document called
      "u1db_config", and now we store it in the "_local/config" document.

    - Sync metadata was previously stored in documents with id
      "u1db_sync_<source-replica-id>", and now are stored in
      "_local/sync_<source-replica-id>".

    - The new schema doesn't make use of any design documents.


What does this script do
------------------------

- List all databases starting with "user-".
- For each one, do:
  - Check if it contains the old "u1db_config" document.
  - If it doesn't, skip this db.
  - Get the transaction log using the usual design doc view/list functions.
  - Write a new "gen-X" document for each line on the transaction log.
  - Get the "u1db_config" document, create a new one in "_local/config",
    Delete the old one.
  - List all "u1db_sync_X" documents, create new ones in "_local/sync_X",
    delete the old ones.
  - Delete unused design documents.