From: Thomas Markwalder Date: Tue, 22 Nov 2016 19:09:22 +0000 (-0500) Subject: [3238] Enabled libreload command X-Git-Tag: trac3770_base~1^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2659a1acbe1ccedf34af3b758b19dc587806b259;p=thirdparty%2Fkea.git [3238] Enabled libreload command doc/guide/ctrl-channel.xml Added libreload to common command section src/bin/dhcp4/ctrl_dhcp4_srv.cc Registered and deregistered libreload command src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc TEST_F(CtrlChannelDhcpv4SrvTest, libreload) - modified to test using CommandMgr instance src/bin/dhcp6/ctrl_dhcp6_srv.cc Registered and deregistered libreload command src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc TEST_F(CtrlChannelDhcpv6SrvTest, libreload) - modified to test using CommandMgr instance --- diff --git a/doc/guide/ctrl-channel.xml b/doc/guide/ctrl-channel.xml index 8db374be5f..cc1a9a09cb 100644 --- a/doc/guide/ctrl-channel.xml +++ b/doc/guide/ctrl-channel.xml @@ -116,7 +116,7 @@ will be sent to Kea and the responses received from Kea printed to standard outp
leases-reclaim - leases-reclaim command instructs the server to + The leases-reclaim command instructs the server to reclaim all expired leases immediately. The command has the following JSON syntax: @@ -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).
+
+ libreload + + + The libreload 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. + +{ + "command": "libreload", + "arguments": { } +} + + + + The server will respond with a result of 0 indcating success, or 1 + indicating a failure. + +
+
list-commands diff --git a/src/bin/dhcp4/ctrl_dhcp4_srv.cc b/src/bin/dhcp4/ctrl_dhcp4_srv.cc index 4cd019a315..e95ffa3de4 100644 --- a/src/bin/dhcp4/ctrl_dhcp4_srv.cc +++ b/src/bin/dhcp4/ctrl_dhcp4_srv.cc @@ -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"); diff --git a/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc b/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc index 77bcb09035..2523da3c95 100644 --- a/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc +++ b/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc @@ -221,12 +221,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)); @@ -252,15 +247,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, diff --git a/src/bin/dhcp6/ctrl_dhcp6_srv.cc b/src/bin/dhcp6/ctrl_dhcp6_srv.cc index 8a39820916..0d9f7331c6 100644 --- a/src/bin/dhcp6/ctrl_dhcp6_srv.cc +++ b/src/bin/dhcp6/ctrl_dhcp6_srv.cc @@ -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"); diff --git a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc index 9b6ba605be..e0c3bd53be 100644 --- a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc +++ b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc @@ -235,14 +235,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 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)); @@ -268,15 +262,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, @@ -295,7 +285,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