From: Jelte Jansen Date: Mon, 7 May 2012 10:33:37 +0000 (+0200) Subject: [1207] add setInMemoryClient with container instead of shared ptr X-Git-Tag: trac2351_base~226^2~90^2~24 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=18cb352fef0dc9343fbffad36539bb7f1cce5214;p=thirdparty%2Fkea.git [1207] add setInMemoryClient with container instead of shared ptr --- diff --git a/src/bin/auth/auth_srv.cc b/src/bin/auth/auth_srv.cc index ecc184bae7..c63e60d233 100644 --- a/src/bin/auth/auth_srv.cc +++ b/src/bin/auth/auth_srv.cc @@ -142,6 +142,7 @@ public: /// In-memory data source. Currently class IN only for simplicity. const RRClass memory_client_class_; AuthSrv::InMemoryClientPtr memory_client_; + isc::datasrc::DataSourceClientContainerPtr memory_client_container_; isc::datasrc::InMemoryClient* memory_client_p_; /// Hot spot cache @@ -410,7 +411,7 @@ AuthSrv::getInMemoryClientP(const RRClass& rrclass) { "Memory data source is not supported for RR class " << rrclass); } - if (!impl_->memory_client_) { + if (!impl_->memory_client_p_) { isc_throw(Exception, "no memory client set"); } return (impl_->memory_client_p_); @@ -436,6 +437,28 @@ AuthSrv::setInMemoryClient(const isc::dns::RRClass& rrclass, impl_->memory_client_p_ = memory_client.get(); } +void +AuthSrv::setInMemoryClient(const isc::dns::RRClass& rrclass, + isc::datasrc::DataSourceClientContainerPtr memory_client) +{ + // XXX: see above + if (rrclass != impl_->memory_client_class_) { + isc_throw(InvalidParameter, + "Memory data source is not supported for RR class " + << rrclass); + } else if (!impl_->memory_client_ && memory_client) { + LOG_DEBUG(auth_logger, DBG_AUTH_OPS, AUTH_MEM_DATASRC_ENABLED) + .arg(rrclass); + } else if (impl_->memory_client_ && !memory_client) { + LOG_DEBUG(auth_logger, DBG_AUTH_OPS, AUTH_MEM_DATASRC_DISABLED) + .arg(rrclass); + } + impl_->memory_client_container_ = memory_client; + impl_->memory_client_p_ = + static_cast(&memory_client->getInstance()); +} + + uint32_t AuthSrv::getStatisticsTimerInterval() const { return (impl_->statistics_timer_.getInterval() / 1000); diff --git a/src/bin/auth/auth_srv.h b/src/bin/auth/auth_srv.h index 8d3f20212d..5755ebf9c3 100644 --- a/src/bin/auth/auth_srv.h +++ b/src/bin/auth/auth_srv.h @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -281,6 +282,8 @@ public: /// \param memory_datasrc A (shared) pointer to \c InMemoryClient to be set. void setInMemoryClient(const isc::dns::RRClass& rrclass, InMemoryClientPtr memory_client); + void setInMemoryClient(const isc::dns::RRClass& rrclass, + isc::datasrc::DataSourceClientContainerPtr memory_client); /// \brief Set the communication session with Statistics. ///