Commit c12cdc5f authored by JINMEI Tatuya's avatar JINMEI Tatuya

[master] fixed conflicts in changelog (due to me forgetting push?)

parents 1202e2c1 13fe9c1b
391. [func]* jinmei
392. [func]* jinmei
libdns++: revised the (Abstract)MessageRenderer class so that it
has a default internal buffer and the buffer can be temporarily
switched. The constructor interface was modified, and a new
method setBuffer() was added.
(Trac #1697, git 9cabc799f2bf9a3579dae7f1f5d5467c8bb1aa40)
391. [bug]* vorner
The long time unused configuration options of Xfrout "log_name",
"log_file", "log_severity", "log_version" and "log_max_bytes" were
removed, as they had no effect (Xfrout uses the global logging
framework). However, if you have them set, you need to remove
them from the configuration file or the configuration will be
rejected.
(Trac #1090, git ef1eba02e4cf550e48e7318702cff6d67c1ec82e)
bind10-devel-20120301 released on March 1, 2012
390. [bug] vorner
......
......@@ -2,12 +2,12 @@
.\" Title: b10-auth
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
.\" Date: February 28, 2012
.\" Date: March 1, 2012
.\" Manual: BIND10
.\" Source: BIND10
.\" Language: English
.\"
.TH "B10\-AUTH" "8" "February 28, 2012" "BIND10" "BIND10"
.TH "B10\-AUTH" "8" "March 1, 2012" "BIND10" "BIND10"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
......@@ -161,16 +161,18 @@ argument to select the process ID to stop\&. (Note that the BIND 10 boss process
.PP
The statistics data collected by the
\fBb10\-stats\fR
daemon include:
daemon for
\(lqAuth\(rq
include:
.PP
auth\&.queries\&.tcp
queries\&.tcp
.RS 4
Total count of queries received by the
\fBb10\-auth\fR
server over TCP since startup\&.
.RE
.PP
auth\&.queries\&.udp
queries\&.udp
.RS 4
Total count of queries received by the
\fBb10\-auth\fR
......
......@@ -20,7 +20,7 @@
<refentry>
<refentryinfo>
<date>February 28, 2012</date>
<date>March 1, 2012</date>
</refentryinfo>
<refmeta>
......@@ -201,20 +201,20 @@
<para>
The statistics data collected by the <command>b10-stats</command>
daemon include:
daemon for <quote>Auth</quote> include:
</para>
<variablelist>
<varlistentry>
<term>auth.queries.tcp</term>
<term>queries.tcp</term>
<listitem><simpara>Total count of queries received by the
<command>b10-auth</command> server over TCP since startup.
</simpara></listitem>
</varlistentry>
<varlistentry>
<term>auth.queries.udp</term>
<term>queries.udp</term>
<listitem><simpara>Total count of queries received by the
<command>b10-auth</command> server over UDP since startup.
</simpara></listitem>
......
......@@ -2,12 +2,12 @@
.\" Title: bind10
.\" Author: [see the "AUTHORS" section]
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
.\" Date: February 28, 2012
.\" Date: March 1, 2012
.\" Manual: BIND10
.\" Source: BIND10
.\" Language: English
.\"
.TH "BIND10" "8" "February 28, 2012" "BIND10" "BIND10"
.TH "BIND10" "8" "March 1, 2012" "BIND10" "BIND10"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
......@@ -297,9 +297,11 @@ will exit\&.
.PP
The statistics data collected by the
\fBb10\-stats\fR
daemon include:
daemon for
\(lqBoss\(rq
include:
.PP
bind10\&.boot_time
boot_time
.RS 4
The date and time that the
\fBbind10\fR
......
......@@ -20,7 +20,7 @@
<refentry>
<refentryinfo>
<date>February 28, 2012</date>
<date>March 1, 2012</date>
</refentryinfo>
<refmeta>
......@@ -433,13 +433,13 @@ xfrin
<para>
The statistics data collected by the <command>b10-stats</command>
daemon include:
daemon for <quote>Boss</quote> include:
</para>
<variablelist>
<varlistentry>
<term>bind10.boot_time</term>
<term>boot_time</term>
<listitem><para>
The date and time that the <command>bind10</command>
process started.
......
......@@ -2,12 +2,12 @@
.\" Title: b10-stats
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
.\" Date: February 28, 2012
.\" Date: March 1, 2012
.\" Manual: BIND10
.\" Source: BIND10
.\" Language: English
.\"
.TH "B10\-STATS" "8" "February 28, 2012" "BIND10" "BIND10"
.TH "B10\-STATS" "8" "March 1, 2012" "BIND10" "BIND10"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
......@@ -90,25 +90,22 @@ simply indicates that the daemon is running\&.
.PP
The
\fBb10\-stats\fR
daemon contains these statistics:
daemon contains these
\(lqStats\(rq
statistics:
.PP
report_time
.RS 4
The latest report date and time in ISO 8601 format\&.
.RE
.PP
stats\&.boot_time
boot_time
.RS 4
The date and time when this daemon was started in ISO 8601 format\&. This is a constant which can\'t be reset except by restarting
\fBb10\-stats\fR\&.
.RE
.PP
stats\&.last_update_time
last_update_time
.RS 4
The date and time (in ISO 8601 format) when this daemon last received data from another component\&.
.RE
.PP
stats\&.lname
lname
.RS 4
This is the name used for the
\fBb10\-msgq\fR
......@@ -116,14 +113,19 @@ command\-control channel\&. (This is a constant which can\'t be reset except by
\fBb10\-stats\fR\&.)
.RE
.PP
stats\&.start_time
report_time
.RS 4
The latest report date and time in ISO 8601 format\&.
.RE
.PP
start_time
.RS 4
This is the date and time (in ISO 8601 format) when this daemon started collecting data\&.
.RE
.PP
stats\&.timestamp
timestamp
.RS 4
The current date and time represented in seconds since UNIX epoch (1970\-01\-01T0 0:00:00Z) with precision (delimited with a period) up to one hundred thousandth of second\&.
The current date and time represented in seconds since UNIX epoch (1970\-01\-01T00:00:00Z) with precision (delimited with a period) up to one hundred thousandth of second\&.
.RE
.PP
See other manual pages for explanations for their statistics that are kept track by
......
......@@ -20,7 +20,7 @@
<refentry>
<refentryinfo>
<date>February 28, 2012</date>
<date>March 1, 2012</date>
</refentryinfo>
<refmeta>
......@@ -146,20 +146,15 @@
<title>STATISTICS DATA</title>
<para>
The <command>b10-stats</command> daemon contains these statistics:
The <command>b10-stats</command> daemon contains these
<quote>Stats</quote> statistics:
</para>
<variablelist>
<varlistentry>
<term>report_time</term>
<!-- TODO: why not named stats.report_time? -->
<listitem><simpara>The latest report date and time in
ISO 8601 format.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>stats.boot_time</term>
<term>boot_time</term>
<listitem><simpara>The date and time when this daemon was
started in ISO 8601 format.
This is a constant which can't be reset except by restarting
......@@ -168,14 +163,14 @@
</varlistentry>
<varlistentry>
<term>stats.last_update_time</term>
<term>last_update_time</term>
<listitem><simpara>The date and time (in ISO 8601 format)
when this daemon last received data from another component.
</simpara></listitem>
</varlistentry>
<varlistentry>
<term>stats.lname</term>
<term>lname</term>
<listitem><simpara>This is the name used for the
<command>b10-msgq</command> command-control channel.
(This is a constant which can't be reset except by restarting
......@@ -184,16 +179,22 @@
</varlistentry>
<varlistentry>
<term>stats.start_time</term>
<term>report_time</term>
<listitem><simpara>The latest report date and time in
ISO 8601 format.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>start_time</term>
<listitem><simpara>This is the date and time (in ISO 8601 format)
when this daemon started collecting data.
</simpara></listitem>
</varlistentry>
<varlistentry>
<term>stats.timestamp</term>
<term>timestamp</term>
<listitem><simpara>The current date and time represented in
seconds since UNIX epoch (1970-01-01T0 0:00:00Z) with
seconds since UNIX epoch (1970-01-01T00:00:00Z) with
precision (delimited with a period) up to
one hundred thousandth of second.</simpara></listitem>
</varlistentry>
......
......@@ -115,33 +115,6 @@
See the <citetitle>BIND 10 Guide</citetitle> for configuration examples.
The default is an empty list, that is, no zone specific configuration.
</para>
<para>
<varname>log_name</varname>
<!-- TODO -->
</para>
<para>
<varname>log_file</varname>
<!-- TODO -->
The location of the log file if using a file channel.
If undefined, then the file channel is closed.
The default is
<filename>/usr/local/var/bind10-devel/log/Xfrout.log</filename>.
</para>
<para>
<varname>log_severity</varname>
<!-- TODO -->
The default is "debug".
</para>
<para>
<varname>log_versions</varname>
<!-- TODO -->
The default is 5.
</para>
<para>
<varname>log_max_bytes</varname>
<!-- TODO -->
The default is 1048576.
</para>
<!-- TODO: log configurations not documented yet in here. jreed
has some but waiting on decisions ... -->
......
......@@ -8,36 +8,6 @@
"item_optional": false,
"item_default": 10
},
{
"item_name": "log_name",
"item_type": "string",
"item_optional": false,
"item_default": "Xfrout"
},
{
"item_name": "log_file",
"item_type": "string",
"item_optional": false,
"item_default": "@@LOCALSTATEDIR@@/@PACKAGE@/log/Xfrout.log"
},
{
"item_name": "log_severity",
"item_type": "string",
"item_optional": false,
"item_default": "debug"
},
{
"item_name": "log_versions",
"item_type": "integer",
"item_optional": false,
"item_default": 5
},
{
"item_name": "log_max_bytes",
"item_type": "integer",
"item_optional": false,
"item_default": 1048576
},
{
"item_name": "transfer_acl",
"item_type": "list",
......
......@@ -70,9 +70,9 @@ TEST(BenchMarkTest, run) {
const int sleep_time = 50000; // will sleep for 50ms
const struct timespec sleep_timespec = { 0, sleep_time * 1000 };
// we cannot expect particular accuracy on the measured duration, so
// we'll include some conservative margin (25%) and perform range
// we'll include some conservative margin (50%) and perform range
// comparison below.
const int duration_margin = 12500; // 12.5ms
const int duration_margin = 25000; // 25ms
const int ONE_MILLION = 1000000;
// Prerequisite check: since the tests in this case may depend on subtle
......@@ -80,6 +80,8 @@ TEST(BenchMarkTest, run) {
// where sleeping doesn't work as this test expects. So we check the
// conditions before the tests, and if it fails skip the tests at the
// risk of overlooking possible bugs.
// We do this with a tighter margin than the checks themselves
const int duration_soft_margin = 12500; // 12.5ms
struct timeval check_begin, check_end;
gettimeofday(&check_begin, NULL);
nanosleep(&sleep_timespec, 0);
......@@ -93,8 +95,8 @@ TEST(BenchMarkTest, run) {
--check_end.tv_sec;
}
if (check_end.tv_sec != 0 ||
sleep_time - duration_margin > check_end.tv_usec ||
sleep_time + duration_margin < check_end.tv_usec) {
sleep_time - duration_soft_margin > check_end.tv_usec ||
sleep_time + duration_soft_margin < check_end.tv_usec) {
cerr << "Prerequisite check failed. skipping test" << endl;
return;
}
......
......@@ -21,6 +21,7 @@ libdatasrc_la_SOURCES += static_datasrc.h static_datasrc.cc
libdatasrc_la_SOURCES += sqlite3_datasrc.h sqlite3_datasrc.cc
libdatasrc_la_SOURCES += query.h query.cc
libdatasrc_la_SOURCES += cache.h cache.cc
libdatasrc_la_SOURCES += rbnode_rrset.h
libdatasrc_la_SOURCES += rbtree.h
libdatasrc_la_SOURCES += zonetable.h zonetable.cc
libdatasrc_la_SOURCES += zone.h
......
......@@ -34,6 +34,7 @@
#include <datasrc/memory_datasrc.h>
#include <datasrc/rbtree.h>
#include <datasrc/rbnode_rrset.h>
#include <datasrc/logger.h>
#include <datasrc/iterator.h>
#include <datasrc/data_source.h>
......@@ -419,14 +420,19 @@ struct InMemoryZoneFinder::InMemoryZoneFinderImpl {
* access is without the impl_-> and it will get inlined anyway.
*/
// Implementation of InMemoryZoneFinder::add
result::Result add(const ConstRRsetPtr& rrset, ZoneData& zone_data) {
result::Result add(const ConstRRsetPtr& rawrrset, ZoneData& zone_data) {
// Sanitize input. This will cause an exception to be thrown
// if the input RRset is empty.
addValidation(rrset);
addValidation(rawrrset);
// OK, can add the RRset.
LOG_DEBUG(logger, DBG_TRACE_DATA, DATASRC_MEM_ADD_RRSET).
arg(rrset->getName()).arg(rrset->getType()).arg(origin_);
arg(rawrrset->getName()).arg(rawrrset->getType()).arg(origin_);
// ... although instead of loading the RRset directly, we encapsulate
// it within an RBNodeRRset. This contains additional information that
// speeds up queries.
ConstRRsetPtr rrset(new internal::RBNodeRRset(rawrrset));
if (rrset->getType() == RRType::NSEC3()) {
return (addNSEC3(rrset, zone_data));
......
// Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
#ifndef __RBNODE_RRSET_H
#define __RBNODE_RRSET_H
#include <dns/messagerenderer.h>
#include <dns/name.h>
#include <dns/rrclass.h>
#include <dns/rrset.h>
#include <dns/rrttl.h>
#include <dns/rrtype.h>
#include <util/buffer.h>
#include <string>
namespace isc {
namespace datasrc {
namespace internal {
/// \brief Special RRset for optimizing memory datasource requirement
///
/// To speed up the performance of the in-memory data source, at load time
/// associate relevant "additional section" data with each RRset in the
/// data source.
///
/// This class, derived from AbstractRRset, holds a "const" pointer to the
/// underlying RRset object. All calls to methods on the class are passed to
/// the underlying object. However, there are some restrictions:
///
/// - Calls to methods that change attributes of the underlying RRset (such as
/// TTL or Name) cause an exception to be thrown. The in-memory data source
/// does not allow modification of these attributes. In theory, it is a bad
/// practice in that it doesn't preserve the assumed behavior of the base
/// class. In practice, however, it should be acceptable because this
/// class is effectively hidden from applications and will only be given
/// to them as a const pointer to the base class via find() variants.
/// So the application cannot call non const methods anyway unless it
/// intentionally breaks the constness.
///
/// - Calls that add the pointer to the associated RRSIG to the RRset are
/// allowed (even though the pointer is to a "const" RRset). The reason here
/// is that RRSIGs are added to the in-memory data source after the
/// RBNodeRRset objects have been created. Thus there has to be the
/// capability of modifying this information.
///
/// The class is not derived from RRset itself to simplify coding: part of the
/// loading of the memory data source is handled in the BIND 10 "libdns++"
/// code, which creates RRsets and passes them to the data source code. This
/// does not have to be altered if encapsulation, rather than inheritance, is
/// used.
///
/// \note This class is exposed in this separate header file so that test code
/// can refer to its definition, and only for that purpose. Otherwise this is
/// essentially a private class of the in-memory data source implementation,
/// and an application shouldn't directly refer to this class.
///
// Note: non-Doxygen-documented methods are documented in the base class.
class RBNodeRRset : public isc::dns::AbstractRRset {
private:
// Note: The copy constructor and the assignment operator are intentionally
// defined as private as we would normally not duplicate a RBNodeRRset.
// (We use the "private" method instead of inheriting from
// boost::noncopyable so as to avoid multiple inheritance.)
RBNodeRRset(const RBNodeRRset& source);
RBNodeRRset& operator=(const RBNodeRRset& source);
public:
/// \brief Usual Constructor
///
/// Creates an RBNodeRRset from the pointer to the RRset passed to it.
///
/// \param rrset Pointer to underlying RRset encapsulated by this object.
explicit RBNodeRRset(const isc::dns::ConstRRsetPtr& rrset) : rrset_(rrset)
{}
/// \brief Destructor
virtual ~RBNodeRRset() {}
// Getter and Setter Methods
//
// The getter methods pass the call through to the underlying RRset. The
// setter methods thrown an exception - this specialisation of the RRset
// object does not expect the underlying RRset to be modified.
virtual unsigned int getRdataCount() const {
return (rrset_->getRdataCount());
}
virtual const isc::dns::Name& getName() const {
return (rrset_->getName());
}
virtual const isc::dns::RRClass& getClass() const {
return (rrset_->getClass());
}
virtual const isc::dns::RRType& getType() const {
return (rrset_->getType());
}
virtual const isc::dns::RRTTL& getTTL() const {
return (rrset_->getTTL());
}
virtual void setName(const isc::dns::Name&) {
isc_throw(isc::NotImplemented, "RBNodeRRset::setName() not supported");
}
virtual void setTTL(const isc::dns::RRTTL&) {
isc_throw(isc::NotImplemented, "RBNodeRRset::setTTL() not supported");
}
virtual std::string toText() const {
return (rrset_->toText());
}
virtual unsigned int toWire(
isc::dns::AbstractMessageRenderer& renderer) const {
return (rrset_->toWire(renderer));
}
virtual unsigned int toWire(isc::util::OutputBuffer& buffer) const {
return (rrset_->toWire(buffer));
}
virtual void addRdata(isc::dns::rdata::ConstRdataPtr) {
isc_throw(isc::NotImplemented,
"RBNodeRRset::addRdata() not supported");
}
virtual void addRdata(const isc::dns::rdata::Rdata&) {
isc_throw(isc::NotImplemented,
"RBNodeRRset::addRdata() not supported");
}
virtual isc::dns::RdataIteratorPtr getRdataIterator() const {
return (rrset_->getRdataIterator());
}
virtual isc::dns::RRsetPtr getRRsig() const {
return (rrset_->getRRsig());
}
// With all the RRsig methods, we have the problem that we store the
// underlying RRset using a ConstRRsetPtr - a pointer to a "const" RRset -
// but we need to modify it by adding or removing an RRSIG. We overcome
// this by temporarily violating the "const" nature of the RRset to add the
// data.
virtual void addRRsig(const isc::dns::rdata::ConstRdataPtr& rdata) {
AbstractRRset* p = const_cast<AbstractRRset*>(rrset_.get());
p->addRRsig(rdata);
}
virtual void addRRsig(const isc::dns::rdata::RdataPtr& rdata) {
AbstractRRset* p = const_cast<AbstractRRset*>(rrset_.get());
p->addRRsig(rdata);
}
virtual void addRRsig(const AbstractRRset& sigs) {
AbstractRRset* p = const_cast<AbstractRRset*>(rrset_.get());
p->addRRsig(sigs);
}
virtual void addRRsig(const isc::dns::ConstRRsetPtr& sigs) {
AbstractRRset* p = const_cast<AbstractRRset*>(rrset_.get());
p->addRRsig(sigs);
}
virtual void addRRsig(const isc::dns::RRsetPtr& sigs) {
AbstractRRset* p = const_cast<AbstractRRset*>(rrset_.get());
p->addRRsig(sigs);
}
virtual void removeRRsig() {
AbstractRRset* p = const_cast<AbstractRRset*>(rrset_.get());
p->removeRRsig();
}
/// \brief Return underlying RRset pointer
///
/// ... mainly for testing.
isc::dns::ConstRRsetPtr getUnderlyingRRset() const {
return (rrset_);
}
private:
isc::dns::ConstRRsetPtr rrset_; ///< Underlying RRset
};
} // namespace internal
} // namespace datasrc
} // namespace isc
#endif // __RBNODE_RRSET_H
......@@ -79,6 +79,7 @@ run_unittests_sqlite3_LDADD = $(common_ldadd)
# In-memory datasource tests
run_unittests_memory_SOURCES = $(common_sources)
run_unittests_memory_SOURCES += memory_datasrc_unittest.cc
run_unittests_memory_SOURCES += rbnode_rrset_unittest.cc
run_unittests_memory_SOURCES += $(top_srcdir)/src/lib/datasrc/memory_datasrc.cc
run_unittests_memory_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
......@@ -109,19 +110,21 @@ endif
endif
EXTRA_DIST = testdata/brokendb.sqlite3
EXTRA_DIST += testdata/diffs.sqlite3
EXTRA_DIST += testdata/example2.com
EXTRA_DIST += testdata/example2.com.sqlite3
EXTRA_DIST += testdata/example.com.signed
EXTRA_DIST += testdata/example.org