From: JINMEI Tatuya Date: Thu, 25 Oct 2012 21:41:18 +0000 (-0700) Subject: [2212] internal refactoring with a helper method for readability. X-Git-Tag: trac2487_base~23^2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=99bdc7de647ee1abb8401cc1fd8337462173e7f8;p=thirdparty%2Fkea.git [2212] internal refactoring with a helper method for readability. --- diff --git a/src/bin/auth/datasrc_clients_mgr.h b/src/bin/auth/datasrc_clients_mgr.h index 958de74cc9..9d8dfa2997 100644 --- a/src/bin/auth/datasrc_clients_mgr.h +++ b/src/bin/auth/datasrc_clients_mgr.h @@ -387,6 +387,9 @@ private: } void doLoadZone(const isc::data::ConstElementPtr& arg); + boost::shared_ptr getZoneWriter( + datasrc::ConfigurableClientList& client_list, + const dns::RRClass& rrclass, const dns::Name& origin); // The following are shared with the manager std::list* command_queue_; @@ -503,28 +506,8 @@ DataSrcClientsBuilderBase::doLoadZone( assert(client_list); try { - const datasrc::ConfigurableClientList::ZoneWriterPair writerpair = - client_list->getCachedZoneWriter(origin); - switch (writerpair.first) { - case datasrc::ConfigurableClientList::ZONE_NOT_FOUND: - isc_throw(InternalCommandError, "failed to load zone " << origin - << "/" << rrclass << ": not found in any configured " - "data source."); - case datasrc::ConfigurableClientList::ZONE_NOT_CACHED: - isc_throw(InternalCommandError, "failed to load zone " << origin - << "/" << rrclass << ": not served from memory"); - case datasrc::ConfigurableClientList::CACHE_DISABLED: - // This is an internal error. Auth server must have the cache - // enabled. - isc_throw(InternalCommandError, "failed to load zone " << origin - << "/" << rrclass << ": internal failure, in-memory cache " - "is somehow disabled"); - default: - break; - } - boost::shared_ptr zwriter = - writerpair.second; + getZoneWriter(*client_list, rrclass, origin); zwriter->load(); // this can take time but doesn't cause a race { // install() can cause a race and must be in a critical section typename MutexType::Locker locker(*map_mutex_); @@ -534,9 +517,11 @@ DataSrcClientsBuilderBase::doLoadZone( AUTH_DATASRC_CLIENTS_BUILDER_LOAD_ZONE) .arg(origin).arg(rrclass); + // same as load(). We could let the destructor do it, but do it + // ourselves explicitly just in case. zwriter->cleanup(); } catch (const InternalCommandError& ex) { - throw; + throw; // this comes from getZoneWriter. just let it go through. } catch (const isc::Exception& ex) { // We catch our internal exceptions (which will be just ignored) and // propagated others (which should generally be considered fatal and @@ -546,6 +531,37 @@ DataSrcClientsBuilderBase::doLoadZone( ex.what()); } } + +// A dedicated subroutine of doLoadZone(). Separated just for keeping the +// main method concise. +template +boost::shared_ptr +DataSrcClientsBuilderBase::getZoneWriter( + datasrc::ConfigurableClientList& client_list, + const dns::RRClass& rrclass, const dns::Name& origin) +{ + const datasrc::ConfigurableClientList::ZoneWriterPair writerpair = + client_list.getCachedZoneWriter(origin); + + switch (writerpair.first) { + case datasrc::ConfigurableClientList::ZONE_RELOADED: // XXX misleading name + assert(writerpair.second); + return (writerpair.second); + case datasrc::ConfigurableClientList::ZONE_NOT_FOUND: + isc_throw(InternalCommandError, "failed to load zone " << origin + << "/" << rrclass << ": not found in any configured " + "data source."); + case datasrc::ConfigurableClientList::ZONE_NOT_CACHED: + isc_throw(InternalCommandError, "failed to load zone " << origin + << "/" << rrclass << ": not served from memory"); + case datasrc::ConfigurableClientList::CACHE_DISABLED: + // This is an internal error. Auth server must have the cache + // enabled. + isc_throw(InternalCommandError, "failed to load zone " << origin + << "/" << rrclass << ": internal failure, in-memory cache " + "is somehow disabled"); + } +} } // namespace datasrc_clientmgr_internal /// \brief Shortcut type for normal data source clients manager.