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