From: Mukund Sivaraman Date: Wed, 7 Nov 2012 19:47:42 +0000 (+0530) Subject: [2421] Handle exceptions when loading a zone X-Git-Tag: trac2487_base~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cec4bf4314a6c8deaeadf10c5d95bc812480653a;p=thirdparty%2Fkea.git [2421] Handle exceptions when loading a zone --- diff --git a/src/lib/datasrc/client_list.cc b/src/lib/datasrc/client_list.cc index e7fb63b9dc..19ec3c36fb 100644 --- a/src/lib/datasrc/client_list.cc +++ b/src/lib/datasrc/client_list.cc @@ -20,6 +20,7 @@ #include "memory/zone_table_segment.h" #include "memory/zone_writer.h" #include "memory/zone_data_loader.h" +#include "memory/zone_data_updater.h" #include "logger.h" #include #include @@ -37,6 +38,7 @@ using boost::shared_ptr; using boost::dynamic_pointer_cast; using isc::datasrc::memory::InMemoryClient; using isc::datasrc::memory::ZoneTableSegment; +using isc::datasrc::memory::ZoneDataUpdater; namespace isc { namespace datasrc { @@ -178,6 +180,15 @@ ConfigurableClientList::configure(const ConstElementPtr& config, } catch (const isc::dns::MasterLoadError& mle) { LOG_ERROR(logger, DATASRC_MASTERLOAD_ERROR) .arg(mle.what()); + } catch (const ZoneDataUpdater::NullRRset& e) { + LOG_ERROR(logger, DATASRC_LOAD_NULL_RRSET_ERROR) + .arg(e.what()); + } catch (const ZoneDataUpdater::AddError& e) { + LOG_ERROR(logger, DATASRC_LOAD_ADD_ERROR) + .arg(e.what()); + } catch (const isc::datasrc::memory::EmptyZone& e) { + LOG_ERROR(logger, DATASRC_LOAD_EMPTY_ZONE_ERROR) + .arg(e.what()); } } else { ZoneIteratorPtr iterator; @@ -192,7 +203,21 @@ ConfigurableClientList::configure(const ConstElementPtr& config, isc_throw(isc::Unexpected, "Got NULL iterator " "for zone " << origin); } - cache->load(origin, *iterator); + try { + cache->load(origin, *iterator); + } catch (const isc::dns::MasterLoadError& mle) { + LOG_ERROR(logger, DATASRC_MASTERLOAD_ERROR) + .arg(mle.what()); + } catch (const ZoneDataUpdater::NullRRset& e) { + LOG_ERROR(logger, DATASRC_LOAD_NULL_RRSET_ERROR) + .arg(e.what()); + } catch (const ZoneDataUpdater::AddError& e) { + LOG_ERROR(logger, DATASRC_LOAD_ADD_ERROR) + .arg(e.what()); + } catch (const isc::datasrc::memory::EmptyZone& e) { + LOG_ERROR(logger, DATASRC_LOAD_EMPTY_ZONE_ERROR) + .arg(e.what()); + } } } } diff --git a/src/lib/datasrc/datasrc_messages.mes b/src/lib/datasrc/datasrc_messages.mes index 94b4d4249e..3788a48557 100644 --- a/src/lib/datasrc/datasrc_messages.mes +++ b/src/lib/datasrc/datasrc_messages.mes @@ -310,6 +310,21 @@ An error was found in the zone data for a MasterFiles zone. The zone is not loaded. The specific error is shown in the message, and should be addressed. +% DATASRC_LOAD_ADD_ERROR %1 +An error was found in the zone data when it was being loaded. The zone +was not loaded. The specific error is shown in the message, and should +be addressed. + +% DATASRC_LOAD_NULL_RRSET_ERROR %1 +A NULL RRset was passed to be added to a zone. The zone was not +loaded. The specific error is shown in the message, and should be +addressed. + +% DATASRC_LOAD_EMPTY_ZONE_ERROR %1 +A zone was asked to be loaded without any zone data. The zone was not +loaded. The specific error is shown in the message, and should be +addressed. + % DATASRC_MEM_ADD_RRSET adding RRset '%1/%2' into zone '%3' Debug information. An RRset is being added to the in-memory data source.