BIND 10 trac2377-partial, updated. b548f4ed6cc20a5d8bb802aed646af007c0653b8 [2377] Change the callback interface
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Dec 3 11:26:57 UTC 2012
The branch, trac2377-partial has been updated
via b548f4ed6cc20a5d8bb802aed646af007c0653b8 (commit)
from c90033f1d91fd82c7bafbe645de95281c46ff46f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b548f4ed6cc20a5d8bb802aed646af007c0653b8
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date: Mon Dec 3 12:24:47 2012 +0100
[2377] Change the callback interface
As we pass exactly one RR each time, RRset is overkill. We just pass
bunch of parameters to the callback.
-----------------------------------------------------------------------
Summary of changes:
src/lib/datasrc/master_loader_callbacks.cc | 20 ++++++++++++-----
src/lib/datasrc/master_loader_callbacks.h | 2 +-
.../datasrc/tests/master_loader_callbacks_test.cc | 23 ++++++++++++++------
src/lib/dns/master_loader.cc | 16 ++++----------
src/lib/dns/master_loader.h | 2 +-
src/lib/dns/master_loader_callbacks.h | 16 ++++++++++----
src/lib/dns/tests/master_loader_unittest.cc | 9 ++++++--
7 files changed, 56 insertions(+), 32 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/lib/datasrc/master_loader_callbacks.cc b/src/lib/datasrc/master_loader_callbacks.cc
index 54e4d0e..04b8940 100644
--- a/src/lib/datasrc/master_loader_callbacks.cc
+++ b/src/lib/datasrc/master_loader_callbacks.cc
@@ -48,6 +48,19 @@ logWarning(const isc::dns::Name& name, const isc::dns::RRClass& rrclass,
arg(name).arg(rrclass).arg(reason);
}
+void
+addRR(const isc::dns::Name& name, const isc::dns::RRClass& rrclass,
+ const isc::dns::RRType& type, const isc::dns::RRTTL& ttl,
+ const isc::dns::rdata::RdataPtr& data, ZoneUpdater* updater)
+{
+ // We get description of one RR. The updater takes RRset, so we
+ // wrap it up and push there. It should collate the RRsets of the
+ // same name and type together, since the addRRset should "merge".
+ isc::dns::BasicRRset rrset(name, rrclass, type, ttl);
+ rrset.addRdata(data);
+ updater->addRRset(rrset);
+}
+
}
isc::dns::MasterLoaderCallbacks
@@ -61,12 +74,9 @@ createMasterLoaderCallbacks(const isc::dns::Name& name,
rrclass, _1, _2, _3)));
}
-isc::dns::AddRRsetCallback
+isc::dns::AddRRCallback
createMasterLoaderAddCallback(ZoneUpdater& updater) {
- return (boost::bind(&ZoneUpdater::addRRset, &updater,
- // The callback provides a shared pointer, we
- // need the object. This bind unpacks the object.
- boost::bind(&isc::dns::RRsetPtr::operator*, _1)));
+ return (boost::bind(addRR, _1, _2, _3, _4, _5, &updater));
}
}
diff --git a/src/lib/datasrc/master_loader_callbacks.h b/src/lib/datasrc/master_loader_callbacks.h
index c258303..ae827c9 100644
--- a/src/lib/datasrc/master_loader_callbacks.h
+++ b/src/lib/datasrc/master_loader_callbacks.h
@@ -58,7 +58,7 @@ createMasterLoaderCallbacks(const isc::dns::Name& name,
/// \param updater The zone updater to use.
/// \return The callback to be passed to MasterLoader.
/// \throw std::bad_alloc when allocation fails.
-isc::dns::AddRRsetCallback
+isc::dns::AddRRCallback
createMasterLoaderAddCallback(ZoneUpdater& updater);
}
diff --git a/src/lib/datasrc/tests/master_loader_callbacks_test.cc b/src/lib/datasrc/tests/master_loader_callbacks_test.cc
index f814288..f555961 100644
--- a/src/lib/datasrc/tests/master_loader_callbacks_test.cc
+++ b/src/lib/datasrc/tests/master_loader_callbacks_test.cc
@@ -18,6 +18,7 @@
#include <dns/rrset.h>
#include <dns/rrclass.h>
#include <dns/rrttl.h>
+#include <dns/rdata.h>
#include <exceptions/exceptions.h>
@@ -40,8 +41,8 @@ public:
// the correct ones, according to a predefined set in a list.
virtual void addRRset(const isc::dns::AbstractRRset& rrset) {
ASSERT_FALSE(expected_rrsets_.empty());
- // In our tests, pointer equality is enough.
- EXPECT_EQ(expected_rrsets_.front().get(), &rrset);
+
+ EXPECT_EQ(expected_rrsets_.front().get()->toText(), rrset.toText());
// And remove this RRset, as it has been used.
expected_rrsets_.pop_front();
}
@@ -67,14 +68,22 @@ protected:
isc::dns::RRClass::IN(), &ok_))
{}
// Generate a new RRset, put it to the updater and return it.
- isc::dns::RRsetPtr generateRRset() {
+ void generateRRset(isc::dns::AddRRCallback callback) {
const isc::dns::RRsetPtr
result(new isc::dns::RRset(isc::dns::Name("example.org"),
isc::dns::RRClass::IN(),
isc::dns::RRType::A(),
isc::dns::RRTTL(3600)));
+ const isc::dns::rdata::RdataPtr
+ data(isc::dns::rdata::createRdata(isc::dns::RRType::A(),
+ isc::dns::RRClass::IN(),
+ "192.0.2.1"));
+
+ result->addRdata(data);
updater_.expected_rrsets_.push_back(result);
- return (result);
+
+ callback(result->getName(), result->getClass(), result->getType(),
+ result->getTTL(), data);
}
// An updater to be passed to the context
MockUpdater updater_;
@@ -112,11 +121,11 @@ TEST_F(MasterLoaderCallbackTest, callbacks) {
// Try adding some RRsets.
TEST_F(MasterLoaderCallbackTest, addRRset) {
- isc::dns::AddRRsetCallback
+ isc::dns::AddRRCallback
callback(createMasterLoaderAddCallback(updater_));
// Put some of them in.
- EXPECT_NO_THROW(callback(generateRRset()));
- EXPECT_NO_THROW(callback(generateRRset()));
+ EXPECT_NO_THROW(generateRRset(callback));
+ EXPECT_NO_THROW(generateRRset(callback));
// They all get pushed there right away, so there are none in the queue
EXPECT_TRUE(updater_.expected_rrsets_.empty());
}
diff --git a/src/lib/dns/master_loader.cc b/src/lib/dns/master_loader.cc
index e9aad92..06cf7c5 100644
--- a/src/lib/dns/master_loader.cc
+++ b/src/lib/dns/master_loader.cc
@@ -18,7 +18,6 @@
#include <dns/rrttl.h>
#include <dns/rrclass.h>
#include <dns/rrtype.h>
-#include <dns/rrset.h>
#include <dns/rdata.h>
using std::string;
@@ -32,7 +31,7 @@ public:
const Name& zone_origin,
const RRClass& zone_class,
const MasterLoaderCallbacks& callbacks,
- const AddRRsetCallback& add_callback,
+ const AddRRCallback& add_callback,
MasterLoader::Options options) :
lexer_(),
zone_origin_(zone_origin),
@@ -88,13 +87,7 @@ public:
// the Rdata. The errors should have been reported by
// callbacks_ already, so we just need to not report the RR
if (data != rdata::RdataPtr()) {
- // Create the RRset. We don't need the RRSIG, so we are good
- // with the basic one
- const RRsetPtr rrset(new BasicRRset(name, rrclass, rrtype,
- ttl));
- rrset->addRdata(data);
- // OK now, so give the RRset with single RR to the caller
- add_callback_(rrset);
+ add_callback_(name, rrclass, rrtype, ttl, data);
// Good, we loaded another one
++count;
@@ -108,16 +101,15 @@ private:
const Name& zone_origin_;
const RRClass zone_class_;
MasterLoaderCallbacks callbacks_;
- AddRRsetCallback add_callback_;
+ AddRRCallback add_callback_;
MasterLoader::Options options_;
- RRsetPtr current_rrset_;
};
MasterLoader::MasterLoader(const char* master_file,
const Name& zone_origin,
const RRClass& zone_class,
const MasterLoaderCallbacks& callbacks,
- const AddRRsetCallback& add_callback,
+ const AddRRCallback& add_callback,
Options options)
{
impl_ = new MasterLoaderImpl(master_file, zone_origin,
diff --git a/src/lib/dns/master_loader.h b/src/lib/dns/master_loader.h
index 61ac7af..dbc3d96 100644
--- a/src/lib/dns/master_loader.h
+++ b/src/lib/dns/master_loader.h
@@ -33,7 +33,7 @@ public:
const Name& zone_origin,
const RRClass& zone_class,
const MasterLoaderCallbacks& callbacks,
- const AddRRsetCallback& add_callback,
+ const AddRRCallback& add_callback,
Options options = DEFAULT);
~MasterLoader();
diff --git a/src/lib/dns/master_loader_callbacks.h b/src/lib/dns/master_loader_callbacks.h
index 77d9ac5..44ddbfa 100644
--- a/src/lib/dns/master_loader_callbacks.h
+++ b/src/lib/dns/master_loader_callbacks.h
@@ -23,9 +23,14 @@
namespace isc {
namespace dns {
-
-class AbstractRRset;
-typedef boost::shared_ptr<AbstractRRset> RRsetPtr;
+class Name;
+class RRClass;
+class RRType;
+class RRTTL;
+namespace rdata {
+class Rdata;
+typedef boost::shared_ptr<Rdata> RdataPtr;
+}
/// \brief Type of callback to add a RRset.
///
@@ -36,7 +41,10 @@ typedef boost::shared_ptr<AbstractRRset> RRsetPtr;
/// \param RRset The rrset to add. It does not contain the accompanying
/// RRSIG (if the zone is signed), they are reported with separate
/// calls to the callback.
-typedef boost::function<void(const RRsetPtr& rrset)> AddRRsetCallback;
+typedef boost::function<void(const Name& name, const RRClass& rrclass,
+ const RRType& rrtype, const RRTTL& rrttl,
+ const rdata::RdataPtr& rdata)>
+ AddRRCallback;
/// \brief Set of issue callbacks for a loader.
///
diff --git a/src/lib/dns/tests/master_loader_unittest.cc b/src/lib/dns/tests/master_loader_unittest.cc
index d0a3339..7b27579 100644
--- a/src/lib/dns/tests/master_loader_unittest.cc
+++ b/src/lib/dns/tests/master_loader_unittest.cc
@@ -55,7 +55,11 @@ public:
}
}
- void addRRset(const RRsetPtr& rrset) {
+ void addRRset(const Name& name, const RRClass& rrclass,
+ const RRType& rrtype, const RRTTL& rrttl,
+ const rdata::RdataPtr& data) {
+ const RRsetPtr rrset(new BasicRRset(name, rrclass, rrtype, rrttl));
+ rrset->addRdata(data);
rrsets_.push_back(rrset);
}
@@ -66,7 +70,8 @@ public:
file).c_str(), origin, rrclass,
callbacks_,
boost::bind(&MasterLoaderTest::addRRset,
- this, _1), options));
+ this, _1, _2, _3, _4, _5),
+ options));
}
// Check the next RR in the ones produced by the loader
More information about the bind10-changes
mailing list