[svn] commit: r4159 - in /branches/trac449/src/lib/cache: TODO message_cache.cc message_cache.h message_entry.cc message_entry.h recursor_cache.cc recursor_cache.h

BIND 10 source code commits bind10-changes at lists.isc.org
Wed Jan 5 06:55:52 UTC 2011


Author: zhanglikun
Date: Wed Jan  5 06:55:52 2011
New Revision: 4159

Log:
Add lru support for message cache.

Added:
    branches/trac449/src/lib/cache/TODO
Modified:
    branches/trac449/src/lib/cache/message_cache.cc
    branches/trac449/src/lib/cache/message_cache.h
    branches/trac449/src/lib/cache/message_entry.cc
    branches/trac449/src/lib/cache/message_entry.h
    branches/trac449/src/lib/cache/recursor_cache.cc
    branches/trac449/src/lib/cache/recursor_cache.h

Modified: branches/trac449/src/lib/cache/message_cache.cc
==============================================================================
--- branches/trac449/src/lib/cache/message_cache.cc (original)
+++ branches/trac449/src/lib/cache/message_cache.cc Wed Jan  5 06:55:52 2011
@@ -39,13 +39,13 @@
 bool
 MessageCache::lookup(const isc::dns::Name& qname,
                      const isc::dns::RRType& qtype,
-                     const uint16_t query_header,
                      isc::dns::Message& response)
 {
     HashKey entry_key = getEntryHashKey(qname, qtype);
     MessageEntryPtr msg_entry = message_table_.get(entry_key);
     if(msg_entry) {
-       return msg_entry->genMessage(time(NULL), query_header, response);
+        message_lru_.touch(msg_entry);
+        return msg_entry->genMessage(time(NULL), response);
     }
 
     return false;
@@ -53,13 +53,21 @@
 
 bool
 MessageCache::update(const Message& msg) {
-    // The simplest way to update is removing the old message entry directly.
     QuestionIterator iter = msg.beginQuestion();
     HashKey entry_key = getEntryHashKey((*iter)->getName(),
                                            (*iter)->getType());
-    message_table_.remove(entry_key);
+    
+    // The simplest way to update is removing the old message entry directly.
+    // We have find the existed message entry, since we need to delete it
+    // from lru list too.
+    MessageEntryPtr old_msg_entry = message_table_.get(entry_key);
+    if (old_msg_entry) {
+        message_table_.remove(entry_key);
+        message_lru_.remove(old_msg_entry);
+    }
+
     MessageEntryPtr msg_entry(new MessageEntry(msg, rrset_cache_));
-    //TODO, lru list touch
+    message_lru_.touch(msg_entry); // Touch the new message entry
     return message_table_.add(msg_entry, entry_key, true);
 }
 

Modified: branches/trac449/src/lib/cache/message_cache.h
==============================================================================
--- branches/trac449/src/lib/cache/message_cache.h (original)
+++ branches/trac449/src/lib/cache/message_cache.h Wed Jan  5 06:55:52 2011
@@ -43,16 +43,12 @@
     /// \brief Look up message in cache.
     /// \param message generated response message if the message entry 
     ///        can be found.
-    /// \param query_header the uint16_t length header of the query message.
-    /// The message in the cache maybe need to be refactored when answering the
-    /// lookup according the query header(flags).
     ///
     /// \return return true if the message can be found in cache, or else,
     /// return false.
     //TODO Maybe some user just want to get the message_entry.
     bool lookup(const isc::dns::Name& qname,
                 const isc::dns::RRType& qtype,
-                const uint16_t query_header,
                 isc::dns::Message& message);
 
     /// \brief Update the message in the cache with the new one.

Modified: branches/trac449/src/lib/cache/message_entry.cc
==============================================================================
--- branches/trac449/src/lib/cache/message_entry.cc (original)
+++ branches/trac449/src/lib/cache/message_entry.cc Wed Jan  5 06:55:52 2011
@@ -40,10 +40,9 @@
     
 bool
 MessageEntry::genMessage(const time_t&,
-                         const uint16_t,
                          isc::dns::Message&)
 {
-    //TODO
+    //TODO, generate message according the query header flags.
     return true;
 }
 

Modified: branches/trac449/src/lib/cache/message_entry.h
==============================================================================
--- branches/trac449/src/lib/cache/message_entry.h (original)
+++ branches/trac449/src/lib/cache/message_entry.h Wed Jan  5 06:55:52 2011
@@ -35,8 +35,7 @@
 /// \brief Message Entry
 /// The object of MessageEntry represents one response message
 /// answered to the recursor client. 
-class MessageEntry : public NsasEntry<MessageEntry>, 
-                     public Fetchable 
+class MessageEntry : public NsasEntry<MessageEntry>
 {
 public:
 
@@ -56,11 +55,9 @@
     /// \param time_now set the ttl of each rrset in the message
     ///        as "expire_time - time_now" (expire_time is the 
     ///        expiration time of the rrset).
-    /// \param query_header the query message header.
     /// \return return true if the response message can be generated 
     /// from the cached information, or else, return false.
     bool genMessage(const time_t& time_now,
-                    const uint16_t query_header,
                     isc::dns::Message& response);
     
     /// \brief Get the hash key of the message entry.

Modified: branches/trac449/src/lib/cache/recursor_cache.cc
==============================================================================
--- branches/trac449/src/lib/cache/recursor_cache.cc (original)
+++ branches/trac449/src/lib/cache/recursor_cache.cc Wed Jan  5 06:55:52 2011
@@ -44,7 +44,6 @@
 RecursorCache::lookup(const isc::dns::Name& qname, 
                const isc::dns::RRType& qtype,
                const isc::dns::RRClass& qclass,
-               const uint16_t query_header,
                isc::dns::Message& response) const
 {
     // First, query in rrsets_cache1_, if the rrset(qname, qtype, qclass) can be 
@@ -65,7 +64,7 @@
         // Can't find the class-specific message cache, return false.
         return false;
     } else {
-        return iter->second->lookup(qname, qtype, query_header, response);
+        return iter->second->lookup(qname, qtype, response);
     }
 }
 

Modified: branches/trac449/src/lib/cache/recursor_cache.h
==============================================================================
--- branches/trac449/src/lib/cache/recursor_cache.h (original)
+++ branches/trac449/src/lib/cache/recursor_cache.h Wed Jan  5 06:55:52 2011
@@ -54,13 +54,11 @@
     ///
     /// \param response generated response message if the message can be found 
     ///  in cache.
-    /// \param query_header the 16bit query header.
     ///
     /// \return return true if the message can be found, or else, return false.
     bool lookup(const isc::dns::Name& qname, 
                 const isc::dns::RRType& qtype,
                 const isc::dns::RRClass& qclass,
-                const uint16_t query_header,
                 isc::dns::Message& response) const;
 
     /// \brief Look up rrset in cache.




More information about the bind10-changes mailing list