Browse Source

[2138] updates the latest branch with fixing conflict with my local changes.

JINMEI Tatuya 12 years ago
parent
commit
72c5c18381

+ 4 - 18
doc/guide/bind10-guide.xml

@@ -1407,21 +1407,6 @@ can use various data source backends.
               </simpara>
             </listitem>
           </varlistentry>
-
-          <varlistentry>
-            <term>statistics-interval</term>
-            <listitem>
-              <simpara>
-      <varname>statistics-interval</varname> is the timer interval
-      in seconds for <command>b10-auth</command> to share its
-      statistics information to
-      <citerefentry><refentrytitle>b10-stats</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
-      Statistics updates can be disabled by setting this to 0.
-      The default is 60.
-              </simpara>
-            </listitem>
-          </varlistentry>
-
         </variablelist>
 
       </para>
@@ -1457,10 +1442,11 @@ can use various data source backends.
             <term>sendstats</term>
             <listitem>
               <simpara>
-      <command>sendstats</command> tells <command>b10-auth</command>
+      <command>getstats</command> requests <command>b10-auth</command>
       to send its statistics data to
-      <citerefentry><refentrytitle>b10-stats</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-      immediately.
+      <citerefentry><refentrytitle>b10-stats</refentrytitle>
+      <manvolnum>8</manvolnum></citerefentry>
+      as a response of the command.
               </simpara>
             </listitem>
           </varlistentry>

+ 11 - 11
src/bin/auth/command.cc

@@ -100,12 +100,13 @@ public:
     ///
     /// \param server The \c AuthSrv object on which the command is executed.
     /// \param args Command specific argument.
-    /// \return command result data in JSON format.
+    /// \return command result using createAnswer().
     virtual ConstElementPtr exec(AuthSrv& server,
                                  isc::data::ConstElementPtr args) = 0;
 };
 
-// Handle the "shutdown" command.
+// Handle the "shutdown" command. An optional parameter "pid" is used to
+// see if it is really for our instance.
 class ShutdownCommand : public AuthCommand {
 public:
     virtual ConstElementPtr exec(AuthSrv& server,
@@ -138,7 +139,8 @@ public:
 // Handle the "getstats" command.  The argument is a list.
 class GetStatsCommand : public AuthCommand {
 public:
-    virtual ConstElementPtr exec(AuthSrv& server, isc::data::ConstElementPtr) {
+    virtual ConstElementPtr exec(AuthSrv& server,
+                                 isc::data::ConstElementPtr) {
         LOG_DEBUG(auth_logger, DBG_AUTH_OPS, AUTH_RECEIVED_GETSTATS);
         return (createAnswer(0, server.getStatistics()));
     }
@@ -146,7 +148,8 @@ public:
 
 class StartDDNSForwarderCommand : public AuthCommand {
 public:
-    virtual ConstElementPtr exec(AuthSrv& server, isc::data::ConstElementPtr) {
+    virtual ConstElementPtr exec(AuthSrv& server,
+                                 isc::data::ConstElementPtr) {
         server.createDDNSForwarder();
         return (createAnswer());
     }
@@ -154,7 +157,8 @@ public:
 
 class StopDDNSForwarderCommand : public AuthCommand {
 public:
-    virtual ConstElementPtr exec(AuthSrv& server, isc::data::ConstElementPtr) {
+    virtual ConstElementPtr exec(AuthSrv& server,
+                                 isc::data::ConstElementPtr) {
         server.destroyDDNSForwarder();
         return (createAnswer());
     }
@@ -245,17 +249,13 @@ ConstElementPtr
 execAuthServerCommand(AuthSrv& server, const string& command_id,
                       ConstElementPtr args)
 {
-    ConstElementPtr value;
-
     LOG_DEBUG(auth_logger, DBG_AUTH_OPS, AUTH_RECEIVED_COMMAND).arg(command_id);
     try {
-        value = scoped_ptr<AuthCommand>(
-            createAuthCommand(command_id))->exec(server, args);
+        return (scoped_ptr<AuthCommand>(
+                    createAuthCommand(command_id))->exec(server, args));
     } catch (const isc::Exception& ex) {
         LOG_ERROR(auth_logger, AUTH_COMMAND_FAILED).arg(command_id)
                                                    .arg(ex.what());
         return (createAnswer(1, ex.what()));
     }
-
-    return (value);
 }

+ 7 - 7
src/bin/auth/statistics.cc

@@ -105,12 +105,10 @@ AuthCountersImpl::inc(const std::string& zone,
 isc::data::ElementPtr
 AuthCountersImpl::getStatistics() const {
     std::stringstream statistics_string;
-    statistics_string 
-                      <<     "{ \"queries.udp\": "
-                      <<     server_counter_.get(AuthCounters::SERVER_UDP_QUERY)
-                      <<     ", \"queries.tcp\": "
-                      <<     server_counter_.get(
-                          AuthCounters::SERVER_TCP_QUERY);
+    statistics_string << "{ \"queries.udp\": "
+                      << server_counter_.get(AuthCounters::SERVER_UDP_QUERY)
+                      << ", \"queries.tcp\": "
+                      << server_counter_.get(AuthCounters::SERVER_TCP_QUERY);
     // Insert non 0 Opcode counters.
     for (int i = 0; i < NUM_OPCODES; ++i) {
         const Counter::Type counter = opcode_counter_.get(i);
@@ -143,7 +141,9 @@ AuthCountersImpl::getStatistics() const {
         isc::data::Element::fromJSON(statistics_string);
     // validate the statistics data before send
     if (validator_) {
-        if (!validator_(statistics_element)) {
+        if (!validator_(
+                 static_cast<isc::data::ConstElementPtr>(statistics_element)))
+        {
             LOG_ERROR(auth_logger, AUTH_INVALID_STATISTICS_DATA);
             return (isc::data::ElementPtr());
         }

+ 1 - 1
src/bin/auth/tests/command_unittest.cc

@@ -419,7 +419,7 @@ TEST_F(AuthCommandTest, getStats) {
     result_ = execAuthServerCommand(server_, "getstats",
                                     ConstElementPtr());
     parseAnswer(rcode_, result_);
-    // Just check some message has been sent.  Detailed tests specific to
+    // Just check some message has been received.  Detailed tests specific to
     // statistics are done in its own tests.
     EXPECT_EQ(0, rcode_);
 }

+ 23 - 0
src/bin/auth/tests/config_unittest.cc

@@ -79,6 +79,29 @@ TEST_F(AuthConfigTest, versionConfig) {
                         Element::fromJSON("{\"version\": 0}")));
 }
 
+TEST_F(AuthConfigTest, exceptionGuarantee) {
+    using namespace isc::server_common::portconfig;
+    AddressList a, b, c;
+    a.push_back(AddressPair("127.0.0.1", 53210));
+    server.setListenAddresses(a);
+    b = server.getListenAddresses();
+    EXPECT_EQ(a.size(), b.size());
+    EXPECT_EQ(a.at(0).first, b.at(0).first);
+    EXPECT_EQ(a.at(0).second, b.at(0).second);
+    // This configuration contains an invalid item, which will trigger
+    // an exception.
+    EXPECT_THROW(configureAuthServer(
+                     server,
+                     Element::fromJSON(
+                         "{ \"no_such_config_var\": 1}")),
+                 AuthConfigError);
+    // The server state shouldn't change
+    c = server.getListenAddresses();
+    EXPECT_EQ(a.size(), c.size());
+    EXPECT_EQ(a.at(0).first, c.at(0).first);
+    EXPECT_EQ(a.at(0).second, c.at(0).second);
+}
+
 TEST_F(AuthConfigTest, badConfig) {
     // These should normally not happen, but should be handled to avoid
     // an unexpected crash due to a bug of the caller.