mirror of
https://github.com/matrix-construct/construct
synced 2024-11-11 12:31:07 +01:00
modules/s_conf: Improve rehashing interface; adjust console cmds.
This commit is contained in:
parent
08a35bdc6a
commit
94a2fdacb5
3 changed files with 76 additions and 14 deletions
|
@ -353,16 +353,16 @@ try
|
|||
}
|
||||
|
||||
// This signal handler (though not a *real* signal handler) is still
|
||||
// running on the main async stack and not an ircd::ctx. The rehash
|
||||
// running on the main async stack and not an ircd::ctx. The reload
|
||||
// function does a lot of IO so it requires an ircd::ctx.
|
||||
ircd::context{[]
|
||||
{
|
||||
ircd::m::import<void ()> rehash_conf
|
||||
ircd::m::import<void ()> reload_conf
|
||||
{
|
||||
"s_conf", "rehash_conf"
|
||||
"s_conf", "reload_conf"
|
||||
};
|
||||
|
||||
rehash_conf();
|
||||
reload_conf();
|
||||
}};
|
||||
}
|
||||
catch(const std::exception &e)
|
||||
|
|
|
@ -642,13 +642,30 @@ console_cmd__conf__get(opt &out, const string_view &line)
|
|||
bool
|
||||
console_cmd__conf__rehash(opt &out, const string_view &line)
|
||||
{
|
||||
using prototype = void ();
|
||||
using prototype = void (const bool &);
|
||||
static m::import<prototype> rehash_conf
|
||||
{
|
||||
"s_conf", "rehash_conf"
|
||||
};
|
||||
|
||||
rehash_conf();
|
||||
rehash_conf(false);
|
||||
out << "Saved runtime conf items"
|
||||
<< " from the current state into !conf:" << my_host()
|
||||
<< std::endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
console_cmd__conf__reload(opt &out, const string_view &line)
|
||||
{
|
||||
using prototype = void ();
|
||||
static m::import<prototype> reload_conf
|
||||
{
|
||||
"s_conf", "reload_conf"
|
||||
};
|
||||
|
||||
reload_conf();
|
||||
out << "Updated any runtime conf items"
|
||||
<< " from the current state in !conf:" << my_host()
|
||||
<< std::endl;
|
||||
|
@ -656,6 +673,23 @@ console_cmd__conf__rehash(opt &out, const string_view &line)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
console_cmd__conf__reset(opt &out, const string_view &line)
|
||||
{
|
||||
using prototype = void ();
|
||||
static m::import<prototype> refresh_conf
|
||||
{
|
||||
"s_conf", "refresh_conf"
|
||||
};
|
||||
|
||||
refresh_conf();
|
||||
out << "All conf items which execute code upon a change"
|
||||
<< " have done so with the latest runtime value."
|
||||
<< std::endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// hook
|
||||
//
|
||||
|
|
|
@ -10,14 +10,16 @@
|
|||
|
||||
using namespace ircd;
|
||||
|
||||
extern "C" void rehash_conf();
|
||||
extern "C" void rehash_conf(const bool &existing = false);
|
||||
extern "C" void reload_conf();
|
||||
extern "C" void refresh_conf();
|
||||
|
||||
mapi::header
|
||||
IRCD_MODULE
|
||||
{
|
||||
"Server Configuration", []
|
||||
{
|
||||
rehash_conf();
|
||||
reload_conf();
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -146,12 +148,6 @@ init_conf_items_hook
|
|||
}
|
||||
};
|
||||
|
||||
void
|
||||
rehash_conf()
|
||||
{
|
||||
init_conf_items(m::event{});
|
||||
}
|
||||
|
||||
static void
|
||||
create_conf_item(const string_view &key,
|
||||
const conf::item<> &item)
|
||||
|
@ -191,3 +187,35 @@ create_conf_room_hook
|
|||
{ "type", "m.room.create" },
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
rehash_conf(const bool &existing)
|
||||
{
|
||||
const m::room::state state
|
||||
{
|
||||
conf_room
|
||||
};
|
||||
|
||||
for(const auto &p : conf::items)
|
||||
{
|
||||
const auto &key{p.first};
|
||||
const auto &item{p.second}; assert(item);
|
||||
if(!existing)
|
||||
if(state.has("ircd.conf.item", key))
|
||||
continue;
|
||||
|
||||
create_conf_item(key, *item);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
reload_conf()
|
||||
{
|
||||
init_conf_items(m::event{});
|
||||
}
|
||||
|
||||
void
|
||||
refresh_conf()
|
||||
{
|
||||
ircd::conf::reset();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue