Software /
code /
prosody-modules
Comparison
mod_migrate/mod_migrate.lua @ 1813:f02f52a2ee11
mod_migrate: Add support for migrating archives
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 01 Sep 2015 10:59:43 +0200 |
parent | 1812:22b799c7b50a |
child | 1985:7821a6986e68 |
comparison
equal
deleted
inserted
replaced
1812:22b799c7b50a | 1813:f02f52a2ee11 |
---|---|
5 local mm = require"core.modulemanager"; | 5 local mm = require"core.modulemanager"; |
6 | 6 |
7 function module.command(arg) | 7 function module.command(arg) |
8 local host, source_store, migrate_to, user = unpack(arg); | 8 local host, source_store, migrate_to, user = unpack(arg); |
9 if not migrate_to then | 9 if not migrate_to then |
10 return print("Usage: prosodyctl mod_migrate example.com <source-store> <target-driver> [users]*"); | 10 return print("Usage: prosodyctl mod_migrate example.com <source-store>[-<store-type>] <target-driver> [users]*"); |
11 end | 11 end |
12 sm.initialize_host(host); | 12 sm.initialize_host(host); |
13 um.initialize_host(host); | 13 um.initialize_host(host); |
14 local module = module:context(host); | 14 local module = module:context(host); |
15 local storage = module:open_store(source_store); | 15 local store_type = source_store:match("%-(%a+)$"); |
16 if store_type then | |
17 source_store = source_store:sub(1, -2-#store_type); | |
18 end | |
19 local storage = module:open_store(source_store, store_type); | |
16 local target = assert(sm.load_driver(host, migrate_to)); | 20 local target = assert(sm.load_driver(host, migrate_to)); |
17 target = assert(target:open(source_store)); | 21 target = assert(target:open(source_store, store_type)); |
22 | |
18 local function migrate_user(username) | 23 local function migrate_user(username) |
19 module:log("info", "Migrating data for %s", username); | 24 module:log("info", "Migrating data for %s", username); |
20 local data, err = storage:get(username); | 25 local data, err = storage:get(username); |
21 assert(data or err==nil, err); | 26 assert(data or err==nil, err); |
22 assert(target:set(username, data)); | 27 assert(target:set(username, data)); |
28 end | |
29 | |
30 if store_type == "archive" then | |
31 function migrate_user(username) | |
32 module:log("info", "Migrating archive items for %s", username); | |
33 local count, errs = 0, 0; | |
34 for id, item, when, with in storage:find(username) do | |
35 local ok, err = target:append(username, id, item, when, with); | |
36 if ok then | |
37 count = count + 1; | |
38 else | |
39 module:log("warn", "Error: %s", err); | |
40 errs = errs + 1; | |
41 end | |
42 if ( count + errs ) % 100 == 0 then | |
43 module:log("info", "%d items migrated, %d errors", count, errs); | |
44 end | |
45 end | |
46 module:log("info", "%d items migrated, %d errors", count, errs); | |
47 end | |
23 end | 48 end |
24 | 49 |
25 if arg[4] then | 50 if arg[4] then |
26 for i = 4, #arg do | 51 for i = 4, #arg do |
27 migrate_user(arg[i]); | 52 migrate_user(arg[i]); |