]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Per-carbon server hostnames
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 7 Mar 2016 14:20:12 +0000 (15:20 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 15 Mar 2016 09:18:02 +0000 (10:18 +0100)
We used the last specified `ourname` for all servers. We still use
the first specified interval for all servers for now.

pdns/dnsdist-carbon.cc
pdns/dnsdist-lua.cc
pdns/dnsdist.hh

index 1702c61097a4e165f6dd142672153c5f733adebb..4741d5965432c3af516c0e2acec0961b2dac4786 100644 (file)
@@ -9,7 +9,7 @@
 #undef L
 #include "dnsdist.hh"
 
-GlobalStateHolder<CarbonConfig> g_carbon;
+GlobalStateHolder<vector<CarbonConfig> > g_carbon;
 static time_t s_start=time(0);
 uint64_t uptimeOfProcess(const std::string& str)
 {
@@ -21,24 +21,30 @@ try
 {
   auto localCarbon = g_carbon.getLocal();
   for(int numloops=0;;++numloops) {
-    if(localCarbon->servers.empty()) {
+    if(localCarbon->empty()) {
       sleep(1);
       continue;
     }
-    if(numloops) 
-      sleep(localCarbon->interval);
-
-    string hostname=localCarbon->ourname;
-    if(hostname.empty()) {
-      char tmp[80];
-      memset(tmp, 0, sizeof(tmp));
-      gethostname(tmp, sizeof(tmp));
-      char *p = strchr(tmp, '.');
-      if(p) *p=0;
-      hostname=tmp;
-      boost::replace_all(hostname, ".", "_");
+    /* this is wrong, we use the interval of the first server
+       for every single one of them */
+    if(numloops) {
+      const unsigned int interval = localCarbon->at(0).interval;
+      sleep(interval);
     }
-    for (auto server : localCarbon->servers) {
+
+    for (const auto& conf : *localCarbon) {
+      const auto& server = conf.server;
+      std::string hostname = conf.ourname;
+      if(hostname.empty()) {
+        char tmp[80];
+        memset(tmp, 0, sizeof(tmp));
+        gethostname(tmp, sizeof(tmp));
+        char *p = strchr(tmp, '.');
+        if(p) *p=0;
+        hostname=tmp;
+        boost::replace_all(hostname, ".", "_");
+      }
+
       try {
         Socket s(server.sin4.sin_family, SOCK_STREAM);
         s.setNonBlocking();
index 677708337742bf6db6a64ed76a0f992557fb9391..9e8f29a26ad99c0f8980eb6c773b71c74bd0387d 100644 (file)
@@ -982,16 +982,10 @@ vector<std::function<void(void)>> setupLua(bool client, const std::string& confi
   g_lua.registerFunction("check",(bool (SuffixMatchNode::*)(const DNSName&) const) &SuffixMatchNode::check);
 
   g_lua.writeFunction("carbonServer", [](const std::string& address, boost::optional<string> ourName,
-                                        boost::optional<int> interval) {
+                                        boost::optional<unsigned int> interval) {
                         setLuaSideEffect();
                        auto ours = g_carbon.getCopy();
-                       ours.servers.push_back(ComboAddress(address, 2003));
-                       if(ourName)
-                         ours.ourname=*ourName;
-                       if(interval)
-                         ours.interval=*interval;
-                       if(!ours.interval)
-                         ours.interval=1;
+                       ours.push_back({ComboAddress(address, 2003), ourName ? *ourName : "", interval ? *interval : 30});
                        g_carbon.setState(ours);
                      });
 
index bddbfb229558187ba4b2e4f44d75156a68e16973..5b7dc4660aa9b1f3ea0b5e3169d3289985e3a1eb 100644 (file)
@@ -435,9 +435,9 @@ void removeServerFromPool(pools_t& pools, const string& poolName, std::shared_pt
 
 struct CarbonConfig
 {
-  vector<ComboAddress> servers;
+  ComboAddress server;
   std::string ourname;
-  unsigned int interval{30};
+  unsigned int interval;
 };
 
 enum ednsHeaderFlags {
@@ -445,7 +445,7 @@ enum ednsHeaderFlags {
   EDNS_HEADER_FLAG_DO = 32768
 };
 
-extern GlobalStateHolder<CarbonConfig> g_carbon;
+extern GlobalStateHolder<vector<CarbonConfig> > g_carbon;
 extern GlobalStateHolder<ServerPolicy> g_policy;
 extern GlobalStateHolder<servers_t> g_dstates;
 extern GlobalStateHolder<pools_t> g_pools;