Browse Source

[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
Thomas Markwalder 8 years ago
parent
commit
2659a1acbe

+ 24 - 1
doc/guide/ctrl-channel.xml

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

+ 4 - 1
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");

+ 6 - 15
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,

+ 4 - 1
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");

+ 8 - 18
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<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));
@@ -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