mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-08-30 21:45:37 +00:00
[master] kea-dhcp4/6 support libreload command
Merge branch 'trac3238'
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user