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");