AM_CXXFLAGS=-DSYSCONFDIR=\"@sysconfdir@\" -DLIBDIR=\"@libdir@\" -DLOCALSTATEDIR=\"@socketdir@\" -Ibackends/bind
AM_CPPFLAGS=-Ibackends/bind @THREADFLAGS@
-EXTRA_DIST = docs/Makefile \
+EXTRA_DIST = docs/Makefile docs/expand \
docs/gslb-operations.sgml docs/powerdns-case.sgml docs/powerdns-install.sgml \
docs/powerdns-overview.sgml docs/powerdns-technical.sgml \
docs/pdns.sgml mtasker.cc \
#include "misc.hh"
#include "ahuexception.hh"
-
using namespace std;
typedef AhuException ArgException;
</listitem>
<listitem>
<para>
- Cache was pruned every minute, which was too often. Now once every 5 minutes, c574.
+ Move recursor to the incredible boost::multi_index_container (c580). This brings a huge improvement
+ in cache pruning times.
</para>
</listitem>
<listitem>
in t29, fixed in c538.
</para>
</listitem>
+ <listitem>
+ <para>
+ Backend errors could make the whole nameserver exit under some circumstances, notably using the LDAP backend. Fixed in c583, reported in
+ t62.
+ </para>
+ </listitem>
<listitem>
<para>
Referrals were subtly broken by recent CNAME/Wildcard improvements, fixed in c539. Fix and other
#include <iostream>
#include <boost/shared_ptr.hpp>
#include "dnsrecords.hh"
+
using namespace std;
using namespace boost;
#include "config.h"
-#define GCC_SKIP_LOCKING
#ifdef GCC_SKIP_LOCKING
#include <bits/atomicity.h>
// This code is ugly but does speedup the recursor tremendously on multi-processor systems, and even has a large effect (20, 30%) on uniprocessor
d_cache.replace(stored, ce);
}
-
+
+
void MemRecursorCache::doPrune(void)
{
// cout<<"Walk took "<< dt.udiff()<<"usec\n";
dt.set();
ttdindex.erase(ttdindex.begin(), j);
-// cout<<"Erase took "<< dt.udiff()<<" usec, looked: "<<looked<<", quick: "<<quickZonk<<", full: ";
-// cout<<fullZonk<<", partial: "<<partialZonk<<", no: "<<noZonk<<"\n";
+ // cout<<"Erase took "<< dt.udiff()<<" usec, looked: "<<looked<<", quick: "<<quickZonk<<", full: ";
+ // cout<<fullZonk<<", partial: "<<partialZonk<<", no: "<<noZonk<<"\n";
// cache_t(d_cache).swap(d_cache);
}
using namespace boost;
using namespace ::boost::multi_index;
+
class MemRecursorCache : public boost::noncopyable // : public RecursorCache
{
public:
{
return 4+d_string.size();
}
+
};
struct predicate
// typedef __gnu_cxx::hash_map<string, vector<StoredRecord> > cache_t;
struct CacheEntry
{
+ CacheEntry(){}
CacheEntry(const string& name, const vector<StoredRecord>& records) : d_name(name), d_records(records)
{}
string d_name;
earliest=min(earliest, i->d_ttd);
return earliest;
}
+
};
typedef multi_index_container<
>
> cache_t;
-
private:
cache_t d_cache;
+
};