Commit 99bdc7de authored by JINMEI Tatuya's avatar JINMEI Tatuya
Browse files

[2212] internal refactoring with a helper method for readability.

parent a6ca1764
......@@ -387,6 +387,9 @@ private:
}
void doLoadZone(const isc::data::ConstElementPtr& arg);
boost::shared_ptr<datasrc::memory::ZoneWriter> getZoneWriter(
datasrc::ConfigurableClientList& client_list,
const dns::RRClass& rrclass, const dns::Name& origin);
// The following are shared with the manager
std::list<Command>* command_queue_;
......@@ -503,28 +506,8 @@ DataSrcClientsBuilderBase<MutexType, CondVarType>::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<datasrc::memory::ZoneWriter> 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<MutexType, CondVarType>::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<MutexType, CondVarType>::doLoadZone(
ex.what());
}
}
// A dedicated subroutine of doLoadZone(). Separated just for keeping the
// main method concise.
template <typename MutexType, typename CondVarType>
boost::shared_ptr<datasrc::memory::ZoneWriter>
DataSrcClientsBuilderBase<MutexType, CondVarType>::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.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment