<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>
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 indcating success, or 1
+ indicating a failure.
+ </para>
+ </section> <!-- end of command-libreload -->
+
<section id="command-list-commands">
<title>list-commands</title>
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));
// 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");
// 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));
// 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,
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));
// 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");
}
// 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));
// 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,
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