annotate tools/migration/prosody-migrator.lua @ 14064:76ece4dd9782

loader: Move all path setup here from all executables So it is done in the same way for all the executables, with less code duplication.
author Kim Alvefur <zash@zash.se>
date Mon, 09 Feb 2026 01:57:40 +0100
parents 2bdddcfad61d
children 50b8d732c905
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4216
ff80a8471e86 tools/migration/*: Numerous changes and restructuring, and the addition of a Makefile
Matthew Wild <mwild1@gmail.com>
parents: 4211
diff changeset
1 #!/usr/bin/env lua
ff80a8471e86 tools/migration/*: Numerous changes and restructuring, and the addition of a Makefile
Matthew Wild <mwild1@gmail.com>
parents: 4211
diff changeset
2
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
3 CFG_SOURCEDIR=CFG_SOURCEDIR or os.getenv("PROSODY_SRCDIR");
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
4 CFG_CONFIGDIR=CFG_CONFIGDIR or os.getenv("PROSODY_CFGDIR");
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
5 CFG_PLUGINDIR=CFG_PLUGINDIR or os.getenv("PROSODY_PLUGINDIR");
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
6 CFG_DATADIR=CFG_DATADIR or os.getenv("PROSODY_DATADIR");
4216
ff80a8471e86 tools/migration/*: Numerous changes and restructuring, and the addition of a Makefile
Matthew Wild <mwild1@gmail.com>
parents: 4211
diff changeset
7
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
8 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
9
14059
2bdddcfad61d migrator: Apply loader fix here too
Kim Alvefur <zash@zash.se>
parents: 13920
diff changeset
10 -- Check before first require, to preempt the probable failure
2bdddcfad61d migrator: Apply loader fix here too
Kim Alvefur <zash@zash.se>
parents: 13920
diff changeset
11 if _VERSION < "Lua 5.2" then
2bdddcfad61d migrator: Apply loader fix here too
Kim Alvefur <zash@zash.se>
parents: 13920
diff changeset
12 io.stderr:write("Prosody is no longer compatible with Lua 5.1\n")
2bdddcfad61d migrator: Apply loader fix here too
Kim Alvefur <zash@zash.se>
parents: 13920
diff changeset
13 io.stderr:write("See https://prosody.im/doc/depends#lua for more information\n")
2bdddcfad61d migrator: Apply loader fix here too
Kim Alvefur <zash@zash.se>
parents: 13920
diff changeset
14 return os.exit(1);
4239
69fe5fd861e7 tools/migration: Support for ~/ in paths
Matthew Wild <mwild1@gmail.com>
parents: 4235
diff changeset
15 end
69fe5fd861e7 tools/migration: Support for ~/ in paths
Matthew Wild <mwild1@gmail.com>
parents: 4235
diff changeset
16
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
17 -- Tell Lua where to find our libraries
4239
69fe5fd861e7 tools/migration: Support for ~/ in paths
Matthew Wild <mwild1@gmail.com>
parents: 4235
diff changeset
18 if CFG_SOURCEDIR then
14059
2bdddcfad61d migrator: Apply loader fix here too
Kim Alvefur <zash@zash.se>
parents: 13920
diff changeset
19 -- Installed instance
2bdddcfad61d migrator: Apply loader fix here too
Kim Alvefur <zash@zash.se>
parents: 13920
diff changeset
20 require "prosody.loader";
2bdddcfad61d migrator: Apply loader fix here too
Kim Alvefur <zash@zash.se>
parents: 13920
diff changeset
21 else
2bdddcfad61d migrator: Apply loader fix here too
Kim Alvefur <zash@zash.se>
parents: 13920
diff changeset
22 -- Not installed, e.g. running from a source checkout
2bdddcfad61d migrator: Apply loader fix here too
Kim Alvefur <zash@zash.se>
parents: 13920
diff changeset
23 require "loader";
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
24 end
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
25
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
26 -- Substitute ~ with path to home directory in data path
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
27 if CFG_DATADIR then
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
28 if os.getenv("HOME") then
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
29 CFG_DATADIR = CFG_DATADIR:gsub("^~", os.getenv("HOME"));
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
30 end
4239
69fe5fd861e7 tools/migration: Support for ~/ in paths
Matthew Wild <mwild1@gmail.com>
parents: 4235
diff changeset
31 end
69fe5fd861e7 tools/migration: Support for ~/ in paths
Matthew Wild <mwild1@gmail.com>
parents: 4235
diff changeset
32
4216
ff80a8471e86 tools/migration/*: Numerous changes and restructuring, and the addition of a Makefile
Matthew Wild <mwild1@gmail.com>
parents: 4211
diff changeset
33 local default_config = (CFG_CONFIGDIR or ".").."/migrator.cfg.lua";
4211
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
34
12162
b7ee14ba09c9 migrator: Reuse earlier usage text
Kim Alvefur <zash@zash.se>
parents: 12161
diff changeset
35 local function usage()
12163
59b65cc6312f migrator: Include --options in usage info
Kim Alvefur <zash@zash.se>
parents: 12162
diff changeset
36 print("Usage: " .. arg[0] .. " [OPTIONS] FROM_STORE TO_STORE");
59b65cc6312f migrator: Include --options in usage info
Kim Alvefur <zash@zash.se>
parents: 12162
diff changeset
37 print(" --config FILE Specify config file")
12166
39483b4099b4 migrator: Add option to keep going despite errors
Kim Alvefur <zash@zash.se>
parents: 12165
diff changeset
38 print(" --keep-going Keep going in case of errors");
12387
05c250fa335a Spelling: Fix various spelling mistakes (thanks timeless)
Kim Alvefur <zash@zash.se>
parents: 12168
diff changeset
39 print(" -v, --verbose Increase log-level");
12163
59b65cc6312f migrator: Include --options in usage info
Kim Alvefur <zash@zash.se>
parents: 12162
diff changeset
40 print("");
12162
b7ee14ba09c9 migrator: Reuse earlier usage text
Kim Alvefur <zash@zash.se>
parents: 12161
diff changeset
41 print("If no stores are specified, 'input' and 'output' are used.");
b7ee14ba09c9 migrator: Reuse earlier usage text
Kim Alvefur <zash@zash.se>
parents: 12161
diff changeset
42 end
b7ee14ba09c9 migrator: Reuse earlier usage text
Kim Alvefur <zash@zash.se>
parents: 12161
diff changeset
43
13142
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
44 if not pcall(require, "prosody.loader") then
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
45 pcall(require, "loader");
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
46 end
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
47
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
48 local startup = require "prosody.util.startup";
11728
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
49 do
12161
6e7678f6fe9a migrator: Customise cli argument parsing (--help, --verbose)
Kim Alvefur <zash@zash.se>
parents: 11731
diff changeset
50 startup.parse_args({
6e7678f6fe9a migrator: Customise cli argument parsing (--help, --verbose)
Kim Alvefur <zash@zash.se>
parents: 11731
diff changeset
51 short_params = { v = "verbose", h = "help", ["?"] = "help" };
6e7678f6fe9a migrator: Customise cli argument parsing (--help, --verbose)
Kim Alvefur <zash@zash.se>
parents: 11731
diff changeset
52 value_params = { config = true };
6e7678f6fe9a migrator: Customise cli argument parsing (--help, --verbose)
Kim Alvefur <zash@zash.se>
parents: 11731
diff changeset
53 });
11728
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
54 startup.init_global_state();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
55 prosody.process_type = "migrator";
12161
6e7678f6fe9a migrator: Customise cli argument parsing (--help, --verbose)
Kim Alvefur <zash@zash.se>
parents: 11731
diff changeset
56 if prosody.opts.help then
12162
b7ee14ba09c9 migrator: Reuse earlier usage text
Kim Alvefur <zash@zash.se>
parents: 12161
diff changeset
57 usage();
12161
6e7678f6fe9a migrator: Customise cli argument parsing (--help, --verbose)
Kim Alvefur <zash@zash.se>
parents: 11731
diff changeset
58 os.exit(0);
6e7678f6fe9a migrator: Customise cli argument parsing (--help, --verbose)
Kim Alvefur <zash@zash.se>
parents: 11731
diff changeset
59 end
11728
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
60 startup.force_console_logging();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
61 startup.init_logging();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
62 startup.init_gc();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
63 startup.init_errors();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
64 startup.setup_plugindir();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
65 startup.setup_plugin_install_path();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
66 startup.setup_datadir();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
67 startup.chdir();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
68 startup.read_version();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
69 startup.switch_user();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
70 startup.check_dependencies();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
71 startup.log_startup_warnings();
11729
f37cafeb75d6 migrator: Trick net.server into thinking the config is loaded
Kim Alvefur <zash@zash.se>
parents: 11728
diff changeset
72 prosody.config_loaded = true;
11728
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
73 startup.load_libraries();
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
74 startup.init_http_client();
11731
076ceb405b94 migrator: Silence assert in core.moduleapi
Kim Alvefur <zash@zash.se>
parents: 11730
diff changeset
75 prosody.core_post_stanza = function ()
076ceb405b94 migrator: Silence assert in core.moduleapi
Kim Alvefur <zash@zash.se>
parents: 11730
diff changeset
76 -- silence assert in core.moduleapi
076ceb405b94 migrator: Silence assert in core.moduleapi
Kim Alvefur <zash@zash.se>
parents: 11730
diff changeset
77 error("Attempt to send stanzas from inside migrator.", 0);
076ceb405b94 migrator: Silence assert in core.moduleapi
Kim Alvefur <zash@zash.se>
parents: 11730
diff changeset
78 end
11728
826d57c16d1c migrator: Customise startup sequence to fix #1673 (Thanks acidsys)
Kim Alvefur <zash@zash.se>
parents: 10004
diff changeset
79 end
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
80
4210
4583473dcce4 tools/migration/main.lua: Add command-line parsing, including --config=CONFIG_FILE, and the ability to specify to/from stores to migrate
Matthew Wild <mwild1@gmail.com>
parents: 4166
diff changeset
81 -- Command-line parsing
11730
9bf8a0607d12 migrator: Use parsed command line flags already parsed by util.startup
Kim Alvefur <zash@zash.se>
parents: 11729
diff changeset
82 local options = prosody.opts;
5021
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4240
diff changeset
83
13142
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
84 local envloadfile = require "prosody.util.envload".envloadfile;
5021
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4240
diff changeset
85
4211
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
86 local config_file = options.config or default_config;
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
87 local from_store = arg[1] or "input";
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
88 local to_store = arg[2] or "output";
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
89
4166
3ac90743039b tools/migration/*.lua: Convert to unix line endings
Matthew Wild <mwild1@gmail.com>
parents: 4162
diff changeset
90 config = {};
3ac90743039b tools/migration/*.lua: Convert to unix line endings
Matthew Wild <mwild1@gmail.com>
parents: 4162
diff changeset
91 local config_env = setmetatable({}, { __index = function(t, k) return function(tbl) config[k] = tbl; end; end });
7880
1d998891c967 migrator: Remove wrapper around envloadfile since envloadfile does the right thing in a compatible way
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
92 local config_chunk, err = envloadfile(config_file, config_env);
4211
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
93 if not config_chunk then
7895
1e1c18012048 migrator: Fix missing word
Kim Alvefur <zash@zash.se>
parents: 7894
diff changeset
94 print("There was an error loading the config file, check that the file exists");
4211
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
95 print("and that the syntax is correct:");
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
96 print("", err);
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
97 os.exit(1);
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
98 end
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
99
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
100 config_chunk();
4166
3ac90743039b tools/migration/*.lua: Convert to unix line endings
Matthew Wild <mwild1@gmail.com>
parents: 4162
diff changeset
101
4211
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
102 local have_err;
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
103 if #arg > 0 and #arg ~= 2 then
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
104 have_err = true;
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
105 print("Error: Incorrect number of parameters supplied.");
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
106 end
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
107 if not config[from_store] then
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
108 have_err = true;
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
109 print("Error: Input store '"..from_store.."' not found in the config file.");
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
110 end
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
111 if not config[to_store] then
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
112 have_err = true;
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
113 print("Error: Output store '"..to_store.."' not found in the config file.");
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
114 end
4235
899ffc1674b5 tools/migration/prosody-migrator.lua: Refactor store handler loading to report errors they throw
Matthew Wild <mwild1@gmail.com>
parents: 4229
diff changeset
115
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
116 for store, conf in pairs(config) do -- COMPAT
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
117 if conf.type == "prosody_files" then
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
118 conf.type = "internal";
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
119 elseif conf.type == "prosody_sql" then
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
120 conf.type = "sql";
4235
899ffc1674b5 tools/migration/prosody-migrator.lua: Refactor store handler loading to report errors they throw
Matthew Wild <mwild1@gmail.com>
parents: 4229
diff changeset
121 end
4211
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
122 end
4235
899ffc1674b5 tools/migration/prosody-migrator.lua: Refactor store handler loading to report errors they throw
Matthew Wild <mwild1@gmail.com>
parents: 4229
diff changeset
123
4211
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
124 if have_err then
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
125 print("");
12162
b7ee14ba09c9 migrator: Reuse earlier usage text
Kim Alvefur <zash@zash.se>
parents: 12161
diff changeset
126 usage();
4211
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
127 print("");
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
128 print("The available stores in your migrator config are:");
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
129 print("");
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
130 for store in pairs(config) do
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
131 print("", store);
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
132 end
4216
ff80a8471e86 tools/migration/*: Numerous changes and restructuring, and the addition of a Makefile
Matthew Wild <mwild1@gmail.com>
parents: 4211
diff changeset
133 print("");
4211
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
134 os.exit(1);
9a12fc2baa37 tools/migration/*.lua: Rename config to migrator.cfg.lua, add error handling for config and command-line parameters
Matthew Wild <mwild1@gmail.com>
parents: 4210
diff changeset
135 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5021
diff changeset
136
13142
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
137 local async = require "prosody.util.async";
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
138 local server = require "prosody.net.server";
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
139 local watchers = {
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
140 error = function (_, err)
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
141 error(err);
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
142 end;
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
143 waiting = function ()
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
144 server.loop();
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
145 end;
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
146 };
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
147
13142
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
148 local cm = require "prosody.core.configmanager";
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
149 local hm = require "prosody.core.hostmanager";
13920
2169be3581ae migrator: Allow migrating between different configs of the same driver
Kim Alvefur <zash@zash.se>
parents: 13348
diff changeset
150 local mm = require "prosody.core.modulemanager";
13142
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
151 local sm = require "prosody.core.storagemanager";
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
152 local um = require "prosody.core.usermanager";
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
153
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
154 local function users(store, host)
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
155 if store.users then
12167
03f551510b1e migrator: Enhance logging
Kim Alvefur <zash@zash.se>
parents: 12166
diff changeset
156 log("debug", "Using store user iterator")
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
157 return store:users();
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
158 else
12387
05c250fa335a Spelling: Fix various spelling mistakes (thanks timeless)
Kim Alvefur <zash@zash.se>
parents: 12168
diff changeset
159 log("debug", "Using usermanager user iterator")
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
160 return um.users(host);
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
161 end
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
162 end
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
163
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
164 local function prepare_config(host, conf)
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
165 if conf.type == "internal" then
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
166 sm.olddm.set_data_path(conf.path or prosody.paths.data);
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
167 elseif conf.type == "sql" then
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
168 cm.set(host, "sql", conf);
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
169 end
13348
47ede3d51833 migrator: Add an escape hatch to allow arbitrary config options
Kim Alvefur <zash@zash.se>
parents: 13142
diff changeset
170 if type(conf.config) == "table" then
47ede3d51833 migrator: Add an escape hatch to allow arbitrary config options
Kim Alvefur <zash@zash.se>
parents: 13142
diff changeset
171 for option, value in pairs(conf.config) do
47ede3d51833 migrator: Add an escape hatch to allow arbitrary config options
Kim Alvefur <zash@zash.se>
parents: 13142
diff changeset
172 cm.set(host, option, value);
47ede3d51833 migrator: Add an escape hatch to allow arbitrary config options
Kim Alvefur <zash@zash.se>
parents: 13142
diff changeset
173 end
47ede3d51833 migrator: Add an escape hatch to allow arbitrary config options
Kim Alvefur <zash@zash.se>
parents: 13142
diff changeset
174 end
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
175 end
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
176
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
177 local function get_driver(host, conf)
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
178 prepare_config(host, conf);
13920
2169be3581ae migrator: Allow migrating between different configs of the same driver
Kim Alvefur <zash@zash.se>
parents: 13348
diff changeset
179 mm.unload(host, "storage_" .. conf.type);
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
180 return assert(sm.load_driver(host, conf.type));
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
181 end
4166
3ac90743039b tools/migration/*.lua: Convert to unix line endings
Matthew Wild <mwild1@gmail.com>
parents: 4162
diff changeset
182
12164
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
183 local migrate_once = {
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
184 keyval = function(origin, destination, user)
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
185 local data, err = origin:get(user);
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
186 assert(not err, err);
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
187 assert(destination:set(user, data));
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
188 end;
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
189 archive = function(origin, destination, user)
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
190 local iter, err = origin:find(user);
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
191 assert(iter, err);
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
192 for id, item, when, with in iter do
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
193 assert(destination:append(user, id, item, when, with));
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
194 end
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
195 end;
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
196 }
12168
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
197 migrate_once.pubsub = function(origin, destination, user, prefix, input_driver, output_driver)
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
198 if not user and prefix == "pubsub_" then return end
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
199 local data, err = origin:get(user);
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
200 assert(not err, err);
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
201 if not data then return end
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
202 assert(destination:set(user, data));
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
203 if prefix == "pubsub_" then user = nil end
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
204 for node in pairs(data) do
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
205 local pep_origin = assert(input_driver:open(prefix .. node, "archive"));
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
206 local pep_destination = assert(output_driver:open(prefix .. node, "archive"));
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
207 migrate_once.archive(pep_origin, pep_destination, user);
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
208 end
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
209 end
12164
85f03b29ec72 migrator: Refactor out individual item migrator for code deduplication
Kim Alvefur <zash@zash.se>
parents: 12163
diff changeset
210
12166
39483b4099b4 migrator: Add option to keep going despite errors
Kim Alvefur <zash@zash.se>
parents: 12165
diff changeset
211 if options["keep-going"] then
13142
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12387
diff changeset
212 local xpcall = require "prosody.util.xpcall".xpcall;
12166
39483b4099b4 migrator: Add option to keep going despite errors
Kim Alvefur <zash@zash.se>
parents: 12165
diff changeset
213 for t, f in pairs(migrate_once) do
12168
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
214 migrate_once[t] = function (origin, destination, user, ...)
12167
03f551510b1e migrator: Enhance logging
Kim Alvefur <zash@zash.se>
parents: 12166
diff changeset
215 local function log_err(err)
03f551510b1e migrator: Enhance logging
Kim Alvefur <zash@zash.se>
parents: 12166
diff changeset
216 if user then
03f551510b1e migrator: Enhance logging
Kim Alvefur <zash@zash.se>
parents: 12166
diff changeset
217 log("error", "Error migrating data for user %q: %s", user, err);
03f551510b1e migrator: Enhance logging
Kim Alvefur <zash@zash.se>
parents: 12166
diff changeset
218 else
03f551510b1e migrator: Enhance logging
Kim Alvefur <zash@zash.se>
parents: 12166
diff changeset
219 log("error", "Error migrating data for host: %s", err);
03f551510b1e migrator: Enhance logging
Kim Alvefur <zash@zash.se>
parents: 12166
diff changeset
220 end
03f551510b1e migrator: Enhance logging
Kim Alvefur <zash@zash.se>
parents: 12166
diff changeset
221 log("debug", "%s", debug.traceback(nil, 2));
03f551510b1e migrator: Enhance logging
Kim Alvefur <zash@zash.se>
parents: 12166
diff changeset
222 end
12168
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
223 xpcall(f, log_err, origin, destination, user, ...);
12166
39483b4099b4 migrator: Add option to keep going despite errors
Kim Alvefur <zash@zash.se>
parents: 12165
diff changeset
224 end
39483b4099b4 migrator: Add option to keep going despite errors
Kim Alvefur <zash@zash.se>
parents: 12165
diff changeset
225 end
39483b4099b4 migrator: Add option to keep going despite errors
Kim Alvefur <zash@zash.se>
parents: 12165
diff changeset
226 end
39483b4099b4 migrator: Add option to keep going despite errors
Kim Alvefur <zash@zash.se>
parents: 12165
diff changeset
227
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
228 local migration_runner = async.runner(function (job)
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
229 for host, stores in pairs(job.input.hosts) do
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
230 prosody.hosts[host] = startup.make_host(host);
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
231 sm.initialize_host(host);
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
232 um.initialize_host(host);
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
233
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
234 local input_driver = get_driver(host, job.input);
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
235
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
236 local output_driver = get_driver(host, job.output);
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
237
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
238 for _, store in ipairs(stores) do
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
239 local p, typ = store:match("()%-(%w+)$");
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
240 if typ then store = store:sub(1, p-1); else typ = "keyval"; end
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
241 log("info", "Migrating host %s store %s (%s)", host, store, typ);
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
242
12168
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
243 local migrate = assert(migrate_once[typ], "Unknown store type: "..typ);
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
244
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
245 local prefix = store .. "_";
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
246 if typ == "pubsub" then typ = "keyval"; end
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
247 if store == "pubsub_nodes" then prefix = "pubsub_"; end
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
248
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
249 local origin = assert(input_driver:open(store, typ));
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
250 local destination = assert(output_driver:open(store, typ));
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
251
12168
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
252 migrate(origin, destination, nil, prefix, input_driver, output_driver); -- host data
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
253
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
254 for user in users(origin, host) do
12167
03f551510b1e migrator: Enhance logging
Kim Alvefur <zash@zash.se>
parents: 12166
diff changeset
255 log("info", "Migrating user %s@%s store %s (%s)", user, host, store, typ);
12168
33e856c65033 migrator: Support pubsub and pep as a special-case
Kim Alvefur <zash@zash.se>
parents: 12167
diff changeset
256 migrate(origin, destination, user, prefix, input_driver, output_driver);
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
257 end
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
258 end
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
259 end
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
260 end, watchers);
4166
3ac90743039b tools/migration/*.lua: Convert to unix line endings
Matthew Wild <mwild1@gmail.com>
parents: 4162
diff changeset
261
4240
b3d9063aad4d tools/migration/prosody-migrator.lua: Add messages to show when migration is in progress
Matthew Wild <mwild1@gmail.com>
parents: 4239
diff changeset
262 io.stderr:write("Migrating...\n");
10003
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
263
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
264 migration_runner:run({ input = config[from_store], output = config[to_store] });
4d702f0c6273 migrator: Rewrite to use storage modules
Kim Alvefur <zash@zash.se>
parents: 8062
diff changeset
265
4240
b3d9063aad4d tools/migration/prosody-migrator.lua: Add messages to show when migration is in progress
Matthew Wild <mwild1@gmail.com>
parents: 4239
diff changeset
266 io.stderr:write("Done!\n");