You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bc...@apache.org on 2017/08/09 16:37:50 UTC
[trafficserver] 01/02: Stop looping refreshing stale hostDB records
This is an automated email from the ASF dual-hosted git repository.
bcall pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit beac65843e6e80a3c7859aceee121920042da867
Author: Zizhong Zhang <zi...@linkedin.com>
AuthorDate: Sat May 27 00:01:21 2017 -0700
Stop looping refreshing stale hostDB records
---
iocore/hostdb/HostDB.cc | 17 +++++++++++++++++
iocore/hostdb/P_HostDBProcessor.h | 5 +++--
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc
index 57295bb..c0afd34 100644
--- a/iocore/hostdb/HostDB.cc
+++ b/iocore/hostdb/HostDB.cc
@@ -239,6 +239,18 @@ HostDBCache::HostDBCache() : refcountcache(nullptr), pending_dns(nullptr), remot
hosts_file_ptr = new RefCountedHostsFileMap();
}
+bool
+HostDBCache::is_pending_dns_for_hash(const INK_MD5 &md5_hash)
+{
+ Queue<HostDBContinuation> &q = pending_dns_for_hash(md5_hash);
+ for (HostDBContinuation *c = q.head; c; c = (HostDBContinuation *)c->link.next) {
+ if (md5_hash == c->md5.hash) {
+ return true;
+ }
+ }
+ return false;
+}
+
HostDBCache *
HostDBProcessor::cache()
{
@@ -554,6 +566,11 @@ probe(ProxyMutex *mutex, HostDBMD5 const &md5, bool ignore_timeout)
// If the record is stale, but we want to revalidate-- lets start that up
if ((!ignore_timeout && r->is_ip_stale() && !r->reverse_dns) || (r->is_ip_timeout() && r->serve_stale_but_revalidate())) {
+ if (hostDB.is_pending_dns_for_hash(md5.hash)) {
+ Debug("hostdb", "stale %u %u %u, using it and pending to refresh it", r->ip_interval(), r->ip_timestamp,
+ r->ip_timeout_interval);
+ return r;
+ }
Debug("hostdb", "stale %u %u %u, using it and refreshing it", r->ip_interval(), r->ip_timestamp, r->ip_timeout_interval);
HostDBContinuation *c = hostDBContAllocator.alloc();
HostDBContinuation::Options copt;
diff --git a/iocore/hostdb/P_HostDBProcessor.h b/iocore/hostdb/P_HostDBProcessor.h
index 46432be..d1f257d 100644
--- a/iocore/hostdb/P_HostDBProcessor.h
+++ b/iocore/hostdb/P_HostDBProcessor.h
@@ -198,9 +198,10 @@ struct HostDBCache {
// TODO configurable number of items in the cache
Queue<HostDBContinuation, Continuation::Link_link> *pending_dns;
- Queue<HostDBContinuation, Continuation::Link_link> &pending_dns_for_hash(INK_MD5 &md5);
+ Queue<HostDBContinuation, Continuation::Link_link> &pending_dns_for_hash(const INK_MD5 &md5);
Queue<HostDBContinuation, Continuation::Link_link> *remoteHostDBQueue;
HostDBCache();
+ bool is_pending_dns_for_hash(const INK_MD5 &md5);
};
inline int
@@ -519,7 +520,7 @@ is_dotted_form_hostname(const char *c)
}
inline Queue<HostDBContinuation> &
-HostDBCache::pending_dns_for_hash(INK_MD5 &md5)
+HostDBCache::pending_dns_for_hash(const INK_MD5 &md5)
{
return pending_dns[this->refcountcache->partition_for_key(md5.fold())];
}
--
To stop receiving notification emails like this one, please contact
"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>.