Commit 451086b2 authored by Jelte Jansen's avatar Jelte Jansen
Browse files

[1183] remove catches that should be at higher level

parent c0c7b21a
......@@ -309,71 +309,57 @@ DatabaseClient::Finder::find(const isc::dns::Name& name,
logger.debug(DBG_TRACE_DETAILED, DATASRC_DATABASE_FIND_RECORDS)
.arg(database_->getDBName()).arg(name).arg(type);
try {
// First, do we have any kind of delegation (NS/DNAME) here?
Name origin(getOrigin());
size_t origin_label_count(origin.getLabelCount());
size_t current_label_count(name.getLabelCount());
// This is how many labels we remove to get origin
size_t remove_labels(current_label_count - origin_label_count);
// Now go trough all superdomains from origin down
for (int i(remove_labels); i > 0; --i) {
Name superdomain(name.split(i));
// Look if there's NS or DNAME (but ignore the NS in origin)
found = getRRset(superdomain, NULL, false, true,
i != remove_labels && !glue_ok);
if (found.second) {
// We found something redirecting somewhere else
// (it can be only NS or DNAME here)
result_rrset = found.second;
if (result_rrset->getType() == isc::dns::RRType::NS()) {
LOG_DEBUG(logger, DBG_TRACE_DETAILED,
DATASRC_DATABASE_FOUND_DELEGATION).
arg(database_->getDBName()).arg(superdomain);
result_status = DELEGATION;
} else {
LOG_DEBUG(logger, DBG_TRACE_DETAILED,
DATASRC_DATABASE_FOUND_DNAME).
arg(database_->getDBName()).arg(superdomain);
result_status = DNAME;
}
// Don't search more
break;
}
}
if (!result_rrset) { // Only if we didn't find a redirect already
// Try getting the final result and extract it
// It is special if there's a CNAME or NS, DNAME is ignored here
// And we don't consider the NS in origin
found = getRRset(name, &type, true, false,
name != origin && !glue_ok);
records_found = found.first;
// First, do we have any kind of delegation (NS/DNAME) here?
Name origin(getOrigin());
size_t origin_label_count(origin.getLabelCount());
size_t current_label_count(name.getLabelCount());
// This is how many labels we remove to get origin
size_t remove_labels(current_label_count - origin_label_count);
// Now go trough all superdomains from origin down
for (int i(remove_labels); i > 0; --i) {
Name superdomain(name.split(i));
// Look if there's NS or DNAME (but ignore the NS in origin)
found = getRRset(superdomain, NULL, false, true,
i != remove_labels && !glue_ok);
if (found.second) {
// We found something redirecting somewhere else
// (it can be only NS or DNAME here)
result_rrset = found.second;
if (result_rrset && name != origin && !glue_ok &&
result_rrset->getType() == isc::dns::RRType::NS()) {
if (result_rrset->getType() == isc::dns::RRType::NS()) {
LOG_DEBUG(logger, DBG_TRACE_DETAILED,
DATASRC_DATABASE_FOUND_DELEGATION_EXACT).
arg(database_->getDBName()).arg(name);
DATASRC_DATABASE_FOUND_DELEGATION).
arg(database_->getDBName()).arg(superdomain);
result_status = DELEGATION;
} else if (result_rrset && type != isc::dns::RRType::CNAME() &&
result_rrset->getType() == isc::dns::RRType::CNAME()) {
result_status = CNAME;
} else {
LOG_DEBUG(logger, DBG_TRACE_DETAILED,
DATASRC_DATABASE_FOUND_DNAME).
arg(database_->getDBName()).arg(superdomain);
result_status = DNAME;
}
// Don't search more
break;
}
}
if (!result_rrset) { // Only if we didn't find a redirect already
// Try getting the final result and extract it
// It is special if there's a CNAME or NS, DNAME is ignored here
// And we don't consider the NS in origin
found = getRRset(name, &type, true, false,
name != origin && !glue_ok);
records_found = found.first;
result_rrset = found.second;
if (result_rrset && name != origin && !glue_ok &&
result_rrset->getType() == isc::dns::RRType::NS()) {
LOG_DEBUG(logger, DBG_TRACE_DETAILED,
DATASRC_DATABASE_FOUND_DELEGATION_EXACT).
arg(database_->getDBName()).arg(name);
result_status = DELEGATION;
} else if (result_rrset && type != isc::dns::RRType::CNAME() &&
result_rrset->getType() == isc::dns::RRType::CNAME()) {
result_status = CNAME;
}
} catch (const DataSourceError& dse) {
logger.error(DATASRC_DATABASE_FIND_ERROR)
.arg(database_->getDBName()).arg(dse.what());
throw;
} catch (const isc::Exception& isce) {
logger.error(DATASRC_DATABASE_FIND_UNCAUGHT_ISC_ERROR)
.arg(database_->getDBName()).arg(isce.what());
isc_throw(DataSourceError, isce.what());
} catch (const std::exception& ex) {
logger.error(DATASRC_DATABASE_FIND_UNCAUGHT_ERROR)
.arg(database_->getDBName()).arg(ex.what());
throw;
}
if (!result_rrset) {
......
......@@ -63,12 +63,6 @@ The maximum allowed number of items of the hotspot cache is set to the given
number. If there are too many, some of them will be dropped. The size of 0
means no limit.
% DATASRC_DATABASE_FIND_ERROR error retrieving data from datasource %1: %2
This was an internal error while reading data from a datasource. This can either
mean the specific data source implementation is not behaving correctly, or the
data it provides is invalid. The current search is aborted.
The error message contains specific information about the error.
% DATASRC_DATABASE_FIND_RECORDS looking in datasource %1 for record %2/%3
Debug information. The database data source is looking up records with the given
name and type in the database.
......@@ -79,18 +73,6 @@ different TTL values. This isn't allowed on the wire and is considered
an error, so we set it to the lowest value we found (but we don't modify the
database). The data in database should be checked and fixed.
% DATASRC_DATABASE_FIND_UNCAUGHT_ERROR uncaught general error retrieving data from datasource %1: %2
There was an uncaught general exception while reading data from a datasource.
This most likely points to a logic error in the code, and can be considered a
bug. The current search is aborted. Specific information about the exception is
printed in this error message.
% DATASRC_DATABASE_FIND_UNCAUGHT_ISC_ERROR uncaught error retrieving data from datasource %1: %2
There was an uncaught ISC exception while reading data from a datasource. This
most likely points to a logic error in the code, and can be considered a bug.
The current search is aborted. Specific information about the exception is
printed in this error message.
% DATASRC_DATABASE_FOUND_DELEGATION Found delegation at %2 in %1
When searching for a domain, the program met a delegation to a different zone
at the given domain name. It will return that one instead.
......
Supports Markdown
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