From: Tomek Mrugalski Date: Wed, 7 Nov 2018 19:58:25 +0000 (+0700) Subject: [#115,!48] exception throwing replaced with gentler error logs X-Git-Tag: 259-libyang-adapt-authoritative_base~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2F254-empty-class-update-fix;p=thirdparty%2Fkea.git [#115,!48] exception throwing replaced with gentler error logs --- diff --git a/src/lib/database/database_connection.cc b/src/lib/database/database_connection.cc index c5f1839738..131266c5da 100644 --- a/src/lib/database/database_connection.cc +++ b/src/lib/database/database_connection.cc @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -174,8 +175,8 @@ DatabaseConnection::toElement(const ParameterMap& params) { int_value = boost::lexical_cast(value); result->set(keyword, isc::data::Element::create(int_value)); } catch (...) { - isc_throw(ToElementError, "invalid DB access " - << "integer parameter: " << keyword << "=" << value); + LOG_ERROR(database_logger, DATABASE_TO_JSON_ERROR) + .arg("integer").arg(keyword).arg(value); } } else if ((keyword == "persist") || (keyword == "readonly") || @@ -186,8 +187,8 @@ DatabaseConnection::toElement(const ParameterMap& params) { } else if (value == "false") { result->set(keyword, isc::data::Element::create(false)); } else { - isc_throw(ToElementError, "invalid DB access " - << "boolean parameter: " << keyword << "=" << value); + LOG_ERROR(database_logger, DATABASE_TO_JSON_ERROR) + .arg("boolean").arg(keyword).arg(value); } } else if ((keyword == "type") || (keyword == "user") || @@ -198,8 +199,8 @@ DatabaseConnection::toElement(const ParameterMap& params) { (keyword == "keyspace")) { result->set(keyword, isc::data::Element::create(value)); } else { - isc_throw(ToElementError, "unknown DB access parameter: " - << keyword << "=" << value); + LOG_ERROR(database_logger, DATABASE_TO_JSON_ERROR) + .arg("unknown").arg(keyword).arg(value); } } diff --git a/src/lib/database/database_log.h b/src/lib/database/database_log.h index 33b1e757a3..f42c85ca89 100644 --- a/src/lib/database/database_log.h +++ b/src/lib/database/database_log.h @@ -7,6 +7,9 @@ #ifndef DATABASE_LOG_H #define DATABASE_LOG_H +#include +#include + namespace isc { namespace db { diff --git a/src/lib/database/db_messages.mes b/src/lib/database/db_messages.mes index 9d26a06e03..c6206532c2 100644 --- a/src/lib/database/db_messages.mes +++ b/src/lib/database/db_messages.mes @@ -84,3 +84,9 @@ transactions in this case. This message is issued when data is inserted into multiple tables with multiple INSERT statements and there may be a need to rollback the whole transaction if any of these INSERT statements fail. + +% DATABASE_TO_JSON_ERROR Internal logic error: uknown %1 element found in state: %2 +This error message is printed when conversion to JSON of the internal state is requested, +but the connection string contains unrecognized parameter. This is a programming error. +The software will continue operation, but the returned JSON data will be syntactically +valid, but incomplete. The unknown parameter will not be converted. diff --git a/src/lib/database/tests/database_connection_unittest.cc b/src/lib/database/tests/database_connection_unittest.cc index 508c120e4d..4e562d0d9c 100644 --- a/src/lib/database/tests/database_connection_unittest.cc +++ b/src/lib/database/tests/database_connection_unittest.cc @@ -294,7 +294,13 @@ TEST(DatabaseConnection, toElementDbAccessStringValid) { // Check that toElementDbAccessString() catches invalid parameters. // Note that because toElementDbAccessString() utilizes // toElement() this tests both. -TEST(DatabaseConnection, toElementDbAccessStringInvalid) { +// +// Test has been disabled. The recent change turned handling of unknown connection +// string params. Instead of throwing, it logs an error and continues. This gives +// us better resiliency. However, we don't have any means implemented to +// test whether it was printed or not. It's reasonably easy to implement such a +// check, but we don't have time for this. +TEST(DatabaseConnection, DISABLED_toElementDbAccessStringInvalid) { std::vector access_strs = { "bogus-param=memfile", "lfc-interval=not-an-integer", @@ -305,10 +311,8 @@ TEST(DatabaseConnection, toElementDbAccessStringInvalid) { }; for (auto access_str : access_strs) { - ASSERT_THROW(DatabaseConnection::toElementDbAccessString(access_str), - isc::ToElementError) - << "access string should have failed, string=[" - << access_str << "]"; + /// @todo: verify that an ERROR is logged. + ASSERT_NO_THROW(DatabaseConnection::toElementDbAccessString(access_str)); } }