Commit d4d86654 authored by Thomas Markwalder's avatar Thomas Markwalder

[master] kea-dhcp4/6 support libreload command

    Merge branch 'trac3238'
parents 435334c9 b6ae7c09
......@@ -116,7 +116,7 @@ will be sent to Kea and the responses received from Kea printed to standard outp
<section id="command-leases-reclaim">
<title>leases-reclaim</title>
<para>
<emphasis>leases-reclaim</emphasis> command instructs the server to
The <emphasis>leases-reclaim</emphasis> command instructs the server to
reclaim all expired leases immediately. The command has the following
JSON syntax:
<screen>
......@@ -140,6 +140,29 @@ will be sent to Kea and the responses received from Kea printed to standard outp
about the processing of expired leases (leases reclamation).</para>
</section>
<section id="command-libreload">
<title>libreload</title>
<para>
The <emphasis>libreload</emphasis> command will first unload and then
load all currently loaded hook libraries. This is primarily intended
to allow one or more hook libraries to be replaced with newer versions
without requiring Kea servers to be reconfigured or restarted. Note
the hook libraries will be passed the same parameter values (if any)
they were passed when originally loaded.
<screen>
{
"command": "libreload",
"arguments": { }
}
</screen>
</para>
<para>
The server will respond with a result of 0 indicating success, or 1
indicating a failure.
</para>
</section> <!-- end of command-libreload -->
<section id="command-list-commands">
<title>list-commands</title>
......
......@@ -253,7 +253,9 @@ ControlledDhcpv4Srv::ControlledDhcpv4Srv(uint16_t port /*= DHCP4_SERVER_PORT*/)
boost::bind(&ControlledDhcpv4Srv::commandShutdownHandler, this, _1, _2));
/// @todo: register config-reload (see CtrlDhcpv4Srv::commandConfigReloadHandler)
/// @todo: register libreload (see CtrlDhcpv4Srv::commandLibReloadHandler)
CommandMgr::instance().registerCommand("libreload",
boost::bind(&ControlledDhcpv4Srv::commandLibReloadHandler, this, _1, _2));
CommandMgr::instance().registerCommand("leases-reclaim",
boost::bind(&ControlledDhcpv4Srv::commandLeasesReclaimHandler, this, _1, _2));
......@@ -297,6 +299,7 @@ ControlledDhcpv4Srv::~ControlledDhcpv4Srv() {
// Deregister any registered commands
CommandMgr::instance().deregisterCommand("shutdown");
CommandMgr::instance().deregisterCommand("libreload");
CommandMgr::instance().deregisterCommand("leases-reclaim");
CommandMgr::instance().deregisterCommand("statistic-get");
CommandMgr::instance().deregisterCommand("statistic-reset");
......
......@@ -223,12 +223,7 @@ TEST_F(CtrlChannelDhcpv4SrvTest, commands) {
// Check that the "libreload" command will reload libraries
TEST_F(CtrlChannelDhcpv4SrvTest, libreload) {
// Sending commands for processing now requires a server that can process
// them.
ASSERT_NO_THROW(
server_.reset(new NakedControlledDhcpv4Srv());
);
createUnixChannelServer();
// Ensure no marker files to start with.
ASSERT_FALSE(checkMarkerFileExists(LOAD_MARKER_FILE));
......@@ -254,15 +249,11 @@ TEST_F(CtrlChannelDhcpv4SrvTest, libreload) {
// Now execute the "libreload" command. This should cause the libraries
// to unload and to reload.
// Use empty parameters list
ElementPtr params(new isc::data::MapElement());
int rcode = -1;
ConstElementPtr result =
ControlledDhcpv4Srv::processCommand("libreload", params);
ConstElementPtr comment = parseAnswer(rcode, result);
EXPECT_EQ(0, rcode); // Expect success
std::string response;
sendUnixCommand("{ \"command\": \"libreload\" }", response);
EXPECT_EQ("{ \"result\": 0, "
"\"text\": \"Hooks libraries successfully reloaded.\" }"
, response);
// Check that the libraries have unloaded and reloaded. The libraries are
// unloaded in the reverse order to which they are loaded. When they load,
......
......@@ -280,7 +280,9 @@ ControlledDhcpv6Srv::ControlledDhcpv6Srv(uint16_t port)
boost::bind(&ControlledDhcpv6Srv::commandShutdownHandler, this, _1, _2));
/// @todo: register config-reload (see CtrlDhcpv4Srv::commandConfigReloadHandler)
/// @todo: register libreload (see CtrlDhcpv4Srv::commandLibReloadHandler)
CommandMgr::instance().registerCommand("libreload",
boost::bind(&ControlledDhcpv6Srv::commandLibReloadHandler, this, _1, _2));
CommandMgr::instance().registerCommand("leases-reclaim",
boost::bind(&ControlledDhcpv6Srv::commandLeasesReclaimHandler, this, _1, _2));
......@@ -324,6 +326,7 @@ ControlledDhcpv6Srv::~ControlledDhcpv6Srv() {
// Deregister any registered commands
CommandMgr::instance().deregisterCommand("shutdown");
CommandMgr::instance().deregisterCommand("libreload");
CommandMgr::instance().deregisterCommand("leases-reclaim");
CommandMgr::instance().deregisterCommand("statistic-get");
CommandMgr::instance().deregisterCommand("statistic-reset");
......
......@@ -236,14 +236,8 @@ TEST_F(CtrlDhcpv6SrvTest, commands) {
}
// Check that the "libreload" command will reload libraries
TEST_F(CtrlDhcpv6SrvTest, libreload) {
// Sending commands for processing now requires a server that can process
// them.
boost::scoped_ptr<ControlledDhcpv6Srv> srv;
ASSERT_NO_THROW(
srv.reset(new ControlledDhcpv6Srv(0))
);
TEST_F(CtrlChannelDhcpv6SrvTest, libreload) {
createUnixChannelServer();
// Ensure no marker files to start with.
ASSERT_FALSE(checkMarkerFileExists(LOAD_MARKER_FILE));
......@@ -269,15 +263,11 @@ TEST_F(CtrlDhcpv6SrvTest, libreload) {
// Now execute the "libreload" command. This should cause the libraries
// to unload and to reload.
// Use empty parameters list
ElementPtr params(new isc::data::MapElement());
int rcode = -1;
ConstElementPtr result =
ControlledDhcpv6Srv::processCommand("libreload", params);
ConstElementPtr comment = isc::config::parseAnswer(rcode, result);
EXPECT_EQ(0, rcode); // Expect success
std::string response;
sendUnixCommand("{ \"command\": \"libreload\" }", response);
EXPECT_EQ("{ \"result\": 0, "
"\"text\": \"Hooks libraries successfully reloaded.\" }"
, response);
// Check that the libraries have unloaded and reloaded. The libraries are
// unloaded in the reverse order to which they are loaded. When they load,
......@@ -296,7 +286,7 @@ TEST_F(CtrlDhcpv6SrvTest, configReload) {
srv.reset(new ControlledDhcpv6Srv(0))
);
// Now execute the "libreload" command. This should cause the libraries
// Now execute the "config-reload" command. This should cause the libraries
// to unload and to reload.
// Use empty parameters list
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment