|
@@ -1,6 +1,7 @@
|
|
|
// Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
|
|
|
//
|
|
|
// Permission to use, copy, modify, and/or distribute this software for any
|
|
|
+//
|
|
|
// purpose with or without fee is hereby granted, provided that the above
|
|
|
// copyright notice and this permission notice appear in all copies.
|
|
|
//
|
|
@@ -20,6 +21,7 @@
|
|
|
#include "message_cache.h"
|
|
|
#include "message_utility.h"
|
|
|
#include "cache_entry_key.h"
|
|
|
+#include "logger.h"
|
|
|
|
|
|
namespace isc {
|
|
|
namespace cache {
|
|
@@ -39,11 +41,14 @@ MessageCache::MessageCache(const RRsetCachePtr& rrset_cache,
|
|
|
message_lru_((3 * cache_size),
|
|
|
new HashDeleter<MessageEntry>(message_table_))
|
|
|
{
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_BASIC, CACHE_MESSAGES_INIT).arg(cache_size).
|
|
|
+ arg(RRClass(message_class));
|
|
|
}
|
|
|
|
|
|
MessageCache::~MessageCache() {
|
|
|
// Destroy all the message entries in the cache.
|
|
|
message_lru_.clear();
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_BASIC, CACHE_MESSAGES_DEINIT);
|
|
|
}
|
|
|
|
|
|
bool
|
|
@@ -57,26 +62,38 @@ MessageCache::lookup(const isc::dns::Name& qname,
|
|
|
if(msg_entry) {
|
|
|
// Check whether the message entry has expired.
|
|
|
if (msg_entry->getExpireTime() > time(NULL)) {
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_DATA, CACHE_MESSAGES_FOUND).
|
|
|
+ arg(entry_name);
|
|
|
message_lru_.touch(msg_entry);
|
|
|
return (msg_entry->genMessage(time(NULL), response));
|
|
|
} else {
|
|
|
// message entry expires, remove it from hash table and lru list.
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_DATA, CACHE_MESSAGES_EXPIRED).
|
|
|
+ arg(entry_name);
|
|
|
message_table_.remove(entry_key);
|
|
|
message_lru_.remove(msg_entry);
|
|
|
return (false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_DATA, CACHE_MESSAGES_UNKNOWN).arg(entry_name);
|
|
|
return (false);
|
|
|
}
|
|
|
|
|
|
bool
|
|
|
MessageCache::update(const Message& msg) {
|
|
|
if (!canMessageBeCached(msg)){
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_DATA, CACHE_MESSAGES_UNCACHEABLE).
|
|
|
+ arg((*msg.beginQuestion())->getName()).
|
|
|
+ arg((*msg.beginQuestion())->getType()).
|
|
|
+ arg((*msg.beginQuestion())->getClass());
|
|
|
return (false);
|
|
|
}
|
|
|
|
|
|
QuestionIterator iter = msg.beginQuestion();
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_DATA, CACHE_MESSAGES_UPDATE).
|
|
|
+ arg((*iter)->getName()).arg((*iter)->getType()).
|
|
|
+ arg((*iter)->getClass());
|
|
|
std::string entry_name = genCacheEntryName((*iter)->getName(),
|
|
|
(*iter)->getType());
|
|
|
HashKey entry_key = HashKey(entry_name, RRClass(message_class_));
|
|
@@ -88,6 +105,9 @@ MessageCache::update(const Message& msg) {
|
|
|
// add the message entry, maybe there is one way to touch it once.
|
|
|
MessageEntryPtr old_msg_entry = message_table_.get(entry_key);
|
|
|
if (old_msg_entry) {
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_DATA, CACHE_MESSAGES_REMOVE).
|
|
|
+ arg((*iter)->getName()).arg((*iter)->getType()).
|
|
|
+ arg((*iter)->getClass());
|
|
|
message_lru_.remove(old_msg_entry);
|
|
|
}
|
|
|
|