You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2012/11/19 05:47:32 UTC
git commit: TS-1576: reload splitdns.config at runtime
Updated Branches:
refs/heads/master 69912d2b0 -> 919f711d8
TS-1576: reload splitdns.config at runtime
- reload splitdns.config with traffic_line -x
- use ConfigInfo rather than similar custom code
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/919f711d
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/919f711d
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/919f711d
Branch: refs/heads/master
Commit: 919f711d8c4b047140f82615b260238ab416a7fc
Parents: 69912d2
Author: Ethan Lai <yz...@yahoo.com>
Authored: Sun Nov 18 20:39:28 2012 -0800
Committer: James Peach <jp...@apache.org>
Committed: Sun Nov 18 20:39:28 2012 -0800
----------------------------------------------------------------------
CHANGES | 3 +
iocore/dns/P_SplitDNSProcessor.h | 29 +-------
iocore/dns/SplitDNS.cc | 130 ++++----------------------------
mgmt/Main.cc | 2 +-
4 files changed, 23 insertions(+), 141 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/919f711d/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 9c87b8d..53b3366 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache Traffic Server 3.3.1
+ *) [TS-1576] reload splitdns.config at runtime
+ Author: Ethan Lai <yz...@yahoo.com>
+
*) [TS-1551] reload ssl_multicert.config at runtime
Author: Ethan Lai <yz...@yahoo.com>
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/919f711d/iocore/dns/P_SplitDNSProcessor.h
----------------------------------------------------------------------
diff --git a/iocore/dns/P_SplitDNSProcessor.h b/iocore/dns/P_SplitDNSProcessor.h
index c89869b..e5a11fe 100644
--- a/iocore/dns/P_SplitDNSProcessor.h
+++ b/iocore/dns/P_SplitDNSProcessor.h
@@ -38,6 +38,7 @@
#include "ControlBase.h"
#include "ControlMatcher.h"
*/
+#include "ProxyConfig.h"
/* ---------------------------
forward declarations ...
@@ -89,36 +90,10 @@ struct SplitDNSResult
};
-struct SplitDNSConfigInfo
-{
- volatile int m_refcount;
-
- virtual ~SplitDNSConfigInfo()
- { }
-};
-
-
-class SplitDNSConfigProcessor
-{
-public:
- SplitDNSConfigProcessor();
-
- unsigned int set(unsigned int id, SplitDNSConfigInfo * info);
- SplitDNSConfigInfo *get(unsigned int id);
- void release(unsigned int id, SplitDNSConfigInfo * data);
-
-public:
- SplitDNSConfigInfo *infos[MAX_CONFIGS];
- int ninfos;
-};
-
-
-extern SplitDNSConfigProcessor SplitDNSconfigProcessor;
-
/* --------------------------------------------------------------
** struct SplitDNS
-------------------------------------------------------------- */
-struct SplitDNS:public SplitDNSConfigInfo
+struct SplitDNS:public ConfigInfo
{
SplitDNS();
~SplitDNS();
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/919f711d/iocore/dns/SplitDNS.cc
----------------------------------------------------------------------
diff --git a/iocore/dns/SplitDNS.cc b/iocore/dns/SplitDNS.cc
index 00c6943..ca98554 100644
--- a/iocore/dns/SplitDNS.cc
+++ b/iocore/dns/SplitDNS.cc
@@ -36,8 +36,6 @@
#include "MatcherUtils.h"
#include "HostLookup.h"
-SplitDNSConfigProcessor SplitDNSconfigProcessor;
-
/* --------------------------------------------------------------
this file is built using "ParentSelection.cc as a template.
@@ -79,6 +77,7 @@ static const char *SDNSResultStr[] = {
int SplitDNSConfig::m_id = 0;
int SplitDNSConfig::gsplit_dns_enabled = 0;
+int splitDNSFile_CB(const char *name, RecDataT data_type, RecData data, void *cookie);
Ptr<ProxyMutex> SplitDNSConfig::dnsHandler_mutex = 0;
@@ -115,7 +114,7 @@ SplitDNS::~SplitDNS()
SplitDNS *
SplitDNSConfig::acquire()
{
- return (SplitDNS *) SplitDNSconfigProcessor.get(SplitDNSConfig::m_id);
+ return (SplitDNS *) configProcessor.get(SplitDNSConfig::m_id);
}
@@ -125,7 +124,7 @@ SplitDNSConfig::acquire()
void
SplitDNSConfig::release(SplitDNS * params)
{
- SplitDNSconfigProcessor.release(SplitDNSConfig::m_id, params);
+ configProcessor.release(SplitDNSConfig::m_id, params);
}
/* --------------------------------------------------------------
@@ -139,6 +138,7 @@ SplitDNSConfig::startup()
//startup just check gsplit_dns_enabled
IOCORE_ReadConfigInt32(gsplit_dns_enabled, "proxy.config.dns.splitDNS.enabled");
+ REC_RegisterConfigUpdateFunc("proxy.config.dns.splitdns.filename", splitDNSFile_CB, NULL);
}
@@ -173,7 +173,7 @@ SplitDNSConfig::reconfigure()
params->m_bEnableFastPath = true;
}
- m_id = SplitDNSconfigProcessor.set(m_id, params);
+ m_id = configProcessor.set(m_id, params);
if (is_debug_tag_set("splitdns_config")) {
SplitDNSConfig::print();
@@ -581,114 +581,6 @@ SplitDNSRecord::Print()
}
-class SplitDNSConfigInfoReleaser:public Continuation
-{
-public:
- SplitDNSConfigInfoReleaser(unsigned int id, SplitDNSConfigInfo * info)
- : Continuation(new_ProxyMutex()), m_id(id), m_info(info)
- {
- SET_HANDLER(&SplitDNSConfigInfoReleaser::handle_event);
- }
-
- int handle_event(int event, void *edata)
- {
- NOWARN_UNUSED(event);
- NOWARN_UNUSED(edata);
- SplitDNSconfigProcessor.release(m_id, m_info);
- delete this;
- return 0;
- }
-
-public:
- unsigned int m_id;
- SplitDNSConfigInfo *m_info;
-};
-
-SplitDNSConfigProcessor::SplitDNSConfigProcessor()
- : ninfos(0)
-{
- for (int i = 0; i < MAX_CONFIGS; i++) {
- infos[i] = NULL;
- }
-}
-
-unsigned int
-SplitDNSConfigProcessor::set(unsigned int id, SplitDNSConfigInfo * info)
-{
- SplitDNSConfigInfo *old_info;
- int idx;
-
- if (id == 0) {
- id = ink_atomic_increment((int *) &ninfos, 1) + 1;
- ink_assert(id != 0);
- ink_assert(id <= MAX_CONFIGS);
- }
-
- info->m_refcount = 1;
-
- if (id > MAX_CONFIGS) {
- // invalid index
- Error("[SplitDNSConfigProcessor::set] invalid index");
- return 0;
- }
-
- idx = id - 1;
-
- do {
- old_info = infos[idx];
- } while (!ink_atomic_cas( &infos[idx], old_info, info));
-
- if (old_info) {
- eventProcessor.schedule_in(NEW(new SplitDNSConfigInfoReleaser(id, old_info)), HRTIME_SECONDS(60));
- }
-
- return id;
-}
-
-SplitDNSConfigInfo *
-SplitDNSConfigProcessor::get(unsigned int id)
-{
- SplitDNSConfigInfo *info;
- int idx;
-
- ink_assert(id != 0);
- ink_assert(id <= MAX_CONFIGS);
-
- if (id == 0 || id > MAX_CONFIGS) {
- // return NULL, because we of an invalid index
- return NULL;
- }
-
- idx = id - 1;
- info = (SplitDNSConfigInfo *) infos[idx];
- if (ink_atomic_increment((int *) &info->m_refcount, 1) < 0) {
- ink_assert(!"not reached");
- }
-
- return info;
-}
-
-void
-SplitDNSConfigProcessor::release(unsigned int id, SplitDNSConfigInfo * info)
-{
- int val;
- int idx;
-
- ink_assert(id != 0);
- ink_assert(id <= MAX_CONFIGS);
-
- if (id == 0 || id > MAX_CONFIGS) {
- // nothing to delete since we have an invalid index
- return;
- }
-
- idx = id - 1;
- val = ink_atomic_increment((int *) &info->m_refcount, -1);
- if ((infos[idx] != info) && (val == 1)) {
- delete info;
- }
-}
-
void
ink_split_dns_init(ModuleVersion v)
{
@@ -701,4 +593,16 @@ ink_split_dns_init(ModuleVersion v)
init_called = 1;
}
+
+int
+splitDNSFile_CB(const char *name, RecDataT data_type, RecData data, void *cookie)
+{
+ NOWARN_UNUSED(name);
+ NOWARN_UNUSED(data_type);
+ NOWARN_UNUSED(data);
+ NOWARN_UNUSED(cookie);
+ eventProcessor.schedule_imm(NEW(new SDNS_UpdateContinuation(reconfig_mutex)), ET_CACHE);
+ return 0;
+}
+
#endif // SPLIT_DNS
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/919f711d/mgmt/Main.cc
----------------------------------------------------------------------
diff --git a/mgmt/Main.cc b/mgmt/Main.cc
index 4247c84..87450dc 100644
--- a/mgmt/Main.cc
+++ b/mgmt/Main.cc
@@ -1102,7 +1102,7 @@ fileUpdated(char *fname)
lmgmt->signalFileChange("proxy.config.log.xml_config_file");
} else if (strcmp(fname, "splitdns.config") == 0) {
- mgmt_log(stderr, "[fileUpdated] splitdns.config file has been modified\n");
+ lmgmt->signalFileChange("proxy.config.dns.splitdns.filename");
} else if (strcmp(fname, "plugin.config") == 0) {
mgmt_log(stderr, "[fileUpdated] plugin.config file has been modified\n");