From: Mukund Sivaraman Date: Thu, 10 Jan 2013 09:17:29 +0000 (+0530) Subject: [2435] Move datasrc::RRsetCollection implementation into database.cc X-Git-Tag: bind10-1.0.0-rc-release~119 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4d277fcbe264e299596a2ddc15243c87565f6127;p=thirdparty%2Fkea.git [2435] Move datasrc::RRsetCollection implementation into database.cc This is so that it is not directly instantiated, but returned by getRRsetCollection() on the updater. --- diff --git a/src/lib/datasrc/Makefile.am b/src/lib/datasrc/Makefile.am index ea70d9264b..a4edd4e564 100644 --- a/src/lib/datasrc/Makefile.am +++ b/src/lib/datasrc/Makefile.am @@ -38,7 +38,6 @@ libb10_datasrc_la_SOURCES += client_list.h client_list.cc libb10_datasrc_la_SOURCES += memory_datasrc.h memory_datasrc.cc libb10_datasrc_la_SOURCES += master_loader_callbacks.h libb10_datasrc_la_SOURCES += master_loader_callbacks.cc -libb10_datasrc_la_SOURCES += rrset_collection.h rrset_collection.cc libb10_datasrc_la_SOURCES += zone_loader.h zone_loader.cc nodist_libb10_datasrc_la_SOURCES = datasrc_messages.h datasrc_messages.cc libb10_datasrc_la_LDFLAGS = -no-undefined -version-info 1:0:1 diff --git a/src/lib/datasrc/database.cc b/src/lib/datasrc/database.cc index 12c3f87ecb..8257c2118e 100644 --- a/src/lib/datasrc/database.cc +++ b/src/lib/datasrc/database.cc @@ -31,7 +31,6 @@ #include #include -#include #include #include @@ -1373,6 +1372,81 @@ DatabaseClient::getIterator(const isc::dns::Name& name, return (iterator); } +/// \brief datasrc implementation of RRsetCollectionBase. +class RRsetCollection : public isc::dns::RRsetCollectionBase { +public: + /// \brief Constructor. + /// + /// No reference (count via \c shared_ptr) to the ZoneUpdater is + /// acquired. As long as the collection object is alive, the + /// corresponding \c ZoneUpdater should be kept alive. + /// + /// \param updater The ZoneUpdater to wrap around. + /// \param rrclass The RRClass of the records in the zone. + RRsetCollection(ZoneUpdater& updater, const isc::dns::RRClass& rrclass) : + updater_(updater), + rrclass_(rrclass) + {} + + /// \brief Destructor + virtual ~RRsetCollection() {} + + /// \brief Find a matching RRset in the collection. + /// + /// Returns the RRset in the collection that exactly matches the + /// given \c name, \c rrclass and \c rrtype. If no matching RRset + /// is found, \c NULL is returned. + /// + /// \throw FindError if find() results in some underlying datasrc error. + /// \param name The name of the RRset to search for. + /// \param rrclass The class of the RRset to search for. + /// \param rrtype The type of the RRset to search for. + /// \returns The RRset if found, \c NULL otherwise. + virtual isc::dns::ConstRRsetPtr find(const isc::dns::Name& name, + const isc::dns::RRClass& rrclass, + const isc::dns::RRType& rrtype) const { + if (rrclass != rrclass_) { + // We could throw an exception here, but RRsetCollection is + // expected to support an arbitrary collection of RRsets, + // and it can be queried just as arbitrarily. So we just + // return nothing here. + return (ConstRRsetPtr()); + } + + ZoneFinder& finder = updater_.getFinder(); + try { + ZoneFinderContextPtr result = + finder.find(name, rrtype, + ZoneFinder::NO_WILDCARD | ZoneFinder::FIND_GLUE_OK); + return (result->rrset); + } catch (const OutOfZone&) { + // As RRsetCollection is an arbitrary set of RRsets, in case + // the searched name is out of zone, we return nothing + // instead of propagating the exception. + return (ConstRRsetPtr()); + } catch (const DataSourceError& e) { + isc_throw(FindError, "ZoneFinder threw a DataSourceError: " << + e.getMessage().c_str()); + } + } + +private: + ZoneUpdater& updater_; + isc::dns::RRClass rrclass_; + +protected: + // TODO: RRsetCollectionBase::Iter is not implemented and the + // following two methods just throw. + + virtual RRsetCollectionBase::IterPtr getBeginning() { + isc_throw(NotImplemented, "This method is not implemented."); + } + + virtual RRsetCollectionBase::IterPtr getEnd() { + isc_throw(NotImplemented, "This method is not implemented."); + } +}; + // // Zone updater using some database system as the underlying data source. // diff --git a/src/lib/datasrc/rrset_collection.cc b/src/lib/datasrc/rrset_collection.cc deleted file mode 100644 index 0651dec79e..0000000000 --- a/src/lib/datasrc/rrset_collection.cc +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2013 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. - -#include -#include -#include - -using namespace isc; -using namespace isc::dns; - -namespace isc { -namespace datasrc { - -ConstRRsetPtr -RRsetCollection::find(const isc::dns::Name& name, - const isc::dns::RRClass& rrclass, - const isc::dns::RRType& rrtype) const -{ - if (rrclass != rrclass_) { - // We could throw an exception here, but RRsetCollection is - // expected to support an arbitrary collection of RRsets, and it - // can be queried just as arbitrarily. So we just return nothing - // here. - return (ConstRRsetPtr()); - } - - ZoneFinder& finder = updater_.getFinder(); - try { - ZoneFinderContextPtr result = - finder.find(name, rrtype, - ZoneFinder::NO_WILDCARD | ZoneFinder::FIND_GLUE_OK); - return (result->rrset); - } catch (const OutOfZone&) { - // As RRsetCollection is an arbitrary set of RRsets, in case the - // searched name is out of zone, we return nothing instead of - // propagating the exception. - return (ConstRRsetPtr()); - } catch (const DataSourceError& e) { - isc_throw(FindError, "ZoneFinder threw a DataSourceError: " << - e.getMessage().c_str()); - } -} - -RRsetCollectionBase::IterPtr -RRsetCollection::getBeginning() { - isc_throw(NotImplemented, "This method is not implemented."); -} - -RRsetCollectionBase::IterPtr -RRsetCollection::getEnd() { - isc_throw(NotImplemented, "This method is not implemented."); -} - -} // end of namespace datasrc -} // end of namespace isc diff --git a/src/lib/datasrc/rrset_collection.h b/src/lib/datasrc/rrset_collection.h deleted file mode 100644 index 0907323292..0000000000 --- a/src/lib/datasrc/rrset_collection.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (C) 2013 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 RRSET_COLLECTION_DATASRC_H -#define RRSET_COLLECTION_DATASRC_H 1 - -#include -#include -#include - -namespace isc { -namespace datasrc { - -/// \brief datasrc implementation of RRsetCollectionBase. -class RRsetCollection : public isc::dns::RRsetCollectionBase { -public: - /// \brief Constructor. - /// - /// No reference (count via \c shared_ptr) to the ZoneUpdater is - /// acquired. As long as the collection object is alive, the - /// corresponding \c ZoneUpdater should be kept alive. - /// - /// \param updater The ZoneUpdater to wrap around. - /// \param rrclass The RRClass of the records in the zone. - RRsetCollection(ZoneUpdater& updater, const isc::dns::RRClass& rrclass) : - updater_(updater), - rrclass_(rrclass) - {} - - /// \brief Destructor - virtual ~RRsetCollection() {} - - /// \brief Find a matching RRset in the collection. - /// - /// Returns the RRset in the collection that exactly matches the - /// given \c name, \c rrclass and \c rrtype. If no matching RRset - /// is found, \c NULL is returned. - /// - /// \throw FindError if find() results in some underlying datasrc error. - /// \param name The name of the RRset to search for. - /// \param rrclass The class of the RRset to search for. - /// \param rrtype The type of the RRset to search for. - /// \returns The RRset if found, \c NULL otherwise. - virtual isc::dns::ConstRRsetPtr find(const isc::dns::Name& name, - const isc::dns::RRClass& rrclass, - const isc::dns::RRType& rrtype) const; - -private: - ZoneUpdater& updater_; - isc::dns::RRClass rrclass_; - -protected: - // TODO: RRsetCollectionBase::Iter is not implemented and the - // following two methods just throw. - - virtual RRsetCollectionBase::IterPtr getBeginning(); - virtual RRsetCollectionBase::IterPtr getEnd(); -}; - -} // end of namespace datasrc -} // end of namespace isc - -#endif // RRSET_COLLECTION_DATASRC_H - -// Local Variables: -// mode: c++ -// End: diff --git a/src/lib/datasrc/tests/database_unittest.cc b/src/lib/datasrc/tests/database_unittest.cc index 0c85aea6a7..297fd4c4f3 100644 --- a/src/lib/datasrc/tests/database_unittest.cc +++ b/src/lib/datasrc/tests/database_unittest.cc @@ -28,7 +28,6 @@ #include #include #include -#include #include