From 8a98bed2677d2dee9f4c6cb99648b8c76fb23bbe Mon Sep 17 00:00:00 2001 From: antonyzhilin Date: Fri, 14 Feb 2025 02:08:38 +0300 Subject: [PATCH] cc dynamic_config: improve parse failure message commit_hash:55b092b95c1e76fa5fd16c9112e5b1e4e0578df4 --- .../dynamic_configs/tests/test_invalid_update.py | 4 ++-- core/src/components/minimal_server_component_list_test.cpp | 5 +++-- core/src/dynamic_config/impl/snapshot.cpp | 4 +++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/core/functional_tests/dynamic_configs/tests/test_invalid_update.py b/core/functional_tests/dynamic_configs/tests/test_invalid_update.py index 546314a3ef4d..c2dd450c0c41 100644 --- a/core/functional_tests/dynamic_configs/tests/test_invalid_update.py +++ b/core/functional_tests/dynamic_configs/tests/test_invalid_update.py @@ -15,8 +15,8 @@ async def test_ok(service_client, monitor_client): CONFIG_PATTERN = ( 'Failed to parse dynamic config. ' - '[a-zA-Z0-9_:]*formats::json::TypeMismatchException while parsing ' - "dynamic config values. Error at path 'HTTP_CLIENT_CONNECTION_POOL_SIZE': " + '[a-zA-Z0-9_:]*formats::json::TypeMismatchException while parsing dynamic config ' + "with custom DocsMap parser. Error at path 'HTTP_CLIENT_CONNECTION_POOL_SIZE': " 'Wrong type. Expected: uintValue, actual: stringValue' ) diff --git a/core/src/components/minimal_server_component_list_test.cpp b/core/src/components/minimal_server_component_list_test.cpp index 96c765771027..0683e206b06d 100644 --- a/core/src/components/minimal_server_component_list_test.cpp +++ b/core/src/components/minimal_server_component_list_test.cpp @@ -192,9 +192,10 @@ TEST_F(ServerMinimalComponentList, InvalidDynamicConfigParam) { // This is a golden test that shows how exactly dynamic config parsing failure // may look. Feel free to change this test if those messages ever change. const auto expected_exception_message = fmt::format( - "Cannot start component dynamic-config: {} while parsing dynamic config values. Error at path " + "Cannot start component dynamic-config: {} while parsing dynamic config " + "USERVER_LOG_DYNAMIC_DEBUG. Error at path " "'USERVER_LOG_DYNAMIC_DEBUG.force-enabled': Wrong type. Expected: arrayValue, actual: intValue", - // NOTE: GetTypeName(typeid(T)) for old version of compilators + // NOTE: GetTypeName(typeid(T)) for old compilers. compiler::GetTypeName(typeid(formats::json::TypeMismatchException)) ); diff --git a/core/src/dynamic_config/impl/snapshot.cpp b/core/src/dynamic_config/impl/snapshot.cpp index 2c8421d532be..89911b6716c2 100644 --- a/core/src/dynamic_config/impl/snapshot.cpp +++ b/core/src/dynamic_config/impl/snapshot.cpp @@ -124,8 +124,10 @@ SnapshotData::SnapshotData(const DocsMap& defaults, const std::vector& try { user_configs_[id] = metadata.factory(defaults); } catch (const std::exception& ex) { + const auto name = + metadata.name.empty() ? "with custom DocsMap parser" : std::string_view{metadata.name}; throw ConfigParseError(fmt::format( - "{} while parsing dynamic config values. {}", compiler::GetTypeName(typeid(ex)), ex.what() + "{} while parsing dynamic config {}. {}", compiler::GetTypeName(typeid(ex)), name, ex.what() )); } }