[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