Browse Source

[2157] declare MessageAttributes as temporary variable

Yoshitaka Aharen 12 years ago
parent
commit
2afe3383ec
2 changed files with 21 additions and 31 deletions
  1. 17 19
      src/bin/auth/auth_srv.cc
  2. 4 12
      src/bin/auth/statistics.h

+ 17 - 19
src/bin/auth/auth_srv.cc

@@ -272,9 +272,6 @@ public:
     std::map<RRClass, boost::shared_ptr<ConfigurableClientList> >
         client_lists_;
 
-    /// Message attributes
-    MessageAttributes stats_attrs_;
-
     boost::shared_ptr<ConfigurableClientList> getClientList(const RRClass&
                                                             rrclass)
     {
@@ -308,6 +305,7 @@ public:
     ///             this value will be passed to server->resume(bool)
     void resumeServer(isc::asiodns::DNSServer* server,
                       isc::dns::Message& message,
+                      MessageAttributes& stats_attrs,
                       const bool done);
 
 private:
@@ -493,10 +491,11 @@ AuthSrv::processMessage(const IOMessage& io_message, Message& message,
                         OutputBuffer& buffer, DNSServer* server)
 {
     InputBuffer request_buffer(io_message.getData(), io_message.getDataSize());
+    MessageAttributes stats_attrs;
 
-    impl_->stats_attrs_.setRequestIPVersion(
+    stats_attrs.setRequestIPVersion(
         io_message.getRemoteEndpoint().getFamily());
-    impl_->stats_attrs_.setRequestTransportProtocol(
+    stats_attrs.setRequestTransportProtocol(
         io_message.getRemoteEndpoint().getProtocol());
 
     // First, check the header part.  If we fail even for the base header,
@@ -507,13 +506,13 @@ AuthSrv::processMessage(const IOMessage& io_message, Message& message,
         // Ignore all responses.
         if (message.getHeaderFlag(Message::HEADERFLAG_QR)) {
             LOG_DEBUG(auth_logger, DBG_AUTH_DETAIL, AUTH_RESPONSE_RECEIVED);
-            impl_->resumeServer(server, message, false);
+            impl_->resumeServer(server, message, stats_attrs, false);
             return;
         }
     } catch (const Exception& ex) {
         LOG_DEBUG(auth_logger, DBG_AUTH_DETAIL, AUTH_HEADER_PARSE_FAIL)
                   .arg(ex.what());
-        impl_->resumeServer(server, message, false);
+        impl_->resumeServer(server, message, stats_attrs, false);
         return;
     }
 
@@ -524,13 +523,13 @@ AuthSrv::processMessage(const IOMessage& io_message, Message& message,
         LOG_DEBUG(auth_logger, DBG_AUTH_DETAIL, AUTH_PACKET_PROTOCOL_ERROR)
                   .arg(error.getRcode().toText()).arg(error.what());
         makeErrorMessage(impl_->renderer_, message, buffer, error.getRcode());
-        impl_->resumeServer(server, message, true);
+        impl_->resumeServer(server, message, stats_attrs, true);
         return;
     } catch (const Exception& ex) {
         LOG_DEBUG(auth_logger, DBG_AUTH_DETAIL, AUTH_PACKET_PARSE_ERROR)
                   .arg(ex.what());
         makeErrorMessage(impl_->renderer_, message, buffer, Rcode::SERVFAIL());
-        impl_->resumeServer(server, message, true);
+        impl_->resumeServer(server, message, stats_attrs, true);
         return;
     } // other exceptions will be handled at a higher layer.
 
@@ -553,14 +552,13 @@ AuthSrv::processMessage(const IOMessage& io_message, Message& message,
                                            **impl_->keyring_));
         tsig_error = tsig_context->verify(tsig_record, io_message.getData(),
                                           io_message.getDataSize());
-        impl_->stats_attrs_.setRequestSig(true,
-                                          tsig_error != TSIGError::NOERROR());
+        stats_attrs.setRequestSig(true, tsig_error != TSIGError::NOERROR());
     }
 
     if (tsig_error != TSIGError::NOERROR()) {
         makeErrorMessage(impl_->renderer_, message, buffer,
                          tsig_error.toRcode(), tsig_context);
-        impl_->resumeServer(server, message, true);
+        impl_->resumeServer(server, message, stats_attrs, true);
         return;
     }
 
@@ -570,12 +568,12 @@ AuthSrv::processMessage(const IOMessage& io_message, Message& message,
         // note: This can only be reliable after TSIG check succeeds.
         ConstEDNSPtr edns = message.getEDNS();
         if (edns) {
-            impl_->stats_attrs_.setRequestEDNS0(true);
-            impl_->stats_attrs_.setRequestDO(edns->getDNSSECAwareness());
+            stats_attrs.setRequestEDNS0(true);
+            stats_attrs.setRequestDO(edns->getDNSSECAwareness());
         }
 
         // note: This can only be reliable after TSIG check succeeds.
-        impl_->stats_attrs_.setRequestOpCode(opcode);
+        stats_attrs.setRequestOpCode(opcode);
 
         if (opcode == Opcode::NOTIFY()) {
             send_answer = impl_->processNotify(io_message, message, buffer,
@@ -618,7 +616,7 @@ AuthSrv::processMessage(const IOMessage& io_message, Message& message,
         LOG_DEBUG(auth_logger, DBG_AUTH_DETAIL, AUTH_RESPONSE_FAILURE_UNKNOWN);
         makeErrorMessage(impl_->renderer_, message, buffer, Rcode::SERVFAIL());
     }
-    impl_->resumeServer(server, message, send_answer);
+    impl_->resumeServer(server, message, stats_attrs, send_answer);
 }
 
 bool
@@ -812,13 +810,13 @@ AuthSrvImpl::processUpdate(const IOMessage& io_message) {
 
 void
 AuthSrvImpl::resumeServer(DNSServer* server, Message& message,
+                          MessageAttributes& stats_attrs,
                           const bool done) {
     if (done) {
         // isTruncated from MessageRenderer
-        stats_attrs_.setResponseTruncated(renderer_.isTruncated());
+        stats_attrs.setResponseTruncated(renderer_.isTruncated());
     }
-    counters_.inc(stats_attrs_, message, done);
-    stats_attrs_.reset();
+    counters_.inc(stats_attrs, message, done);
     server->resume(done);
 }
 

+ 4 - 12
src/bin/auth/statistics.h

@@ -57,9 +57,10 @@ public:
     /// \brief The constructor.
     ///
     /// \throw None
-    MessageAttributes() : req_opcode_(Opcode::RESERVED15_CODE) {
-        reset();
-    }
+    MessageAttributes() : req_ip_version_(0), req_transport_protocol_(0),
+                          req_opcode_(Opcode::RESERVED15_CODE),
+                          bit_attributes_()
+    {}
 
     /// \brief Get request opcode.
     /// \return opcode of a request
@@ -168,15 +169,6 @@ public:
     void setResponseTruncated(const bool is_truncated) {
         bit_attributes_[RES_IS_TRUNCATED] = is_truncated;
     }
-
-    /// \brief Reset attributes.
-    /// \throw None
-    void reset() {
-        req_ip_version_ = 0;
-        req_transport_protocol_ = 0;
-        req_opcode_ = Opcode(Opcode::RESERVED15_CODE);
-        bit_attributes_.reset();
-    }
 };
 
 /// \brief Set of DNS message counters.