diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-05-25 12:59:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-25 12:59:28 +0200 |
commit | 6067d082653ab2994a80ccdaeca72bdf46e65e10 (patch) | |
tree | 583413bcb8fdd52641ee69fcbe687ec9087e57eb | |
parent | 712ffc989d2767325b3a91c192fa0a68721ace82 (diff) | |
parent | cca91931632a474cb135b0d314ea475f8e8d6dd9 (diff) |
Merge pull request #17957 from vespa-engine/balder/avoid-core-dump
Avoid coredump on bad/empty config.
4 files changed, 11 insertions, 4 deletions
diff --git a/documentapi/src/vespa/documentapi/messagebus/policies/externslobrokpolicy.cpp b/documentapi/src/vespa/documentapi/messagebus/policies/externslobrokpolicy.cpp index 9eb28432234..d12a46ed3a4 100644 --- a/documentapi/src/vespa/documentapi/messagebus/policies/externslobrokpolicy.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/policies/externslobrokpolicy.cpp @@ -55,10 +55,11 @@ ExternSlobrokPolicy::~ExternSlobrokPolicy() } } -string ExternSlobrokPolicy::init() { +string +ExternSlobrokPolicy::init() { if (_slobroks.size() != 0) { slobrok::ConfiguratorFactory config(_slobroks); - _mirror.reset(new MirrorAPI(*_orb, config)); + _mirror = std::make_unique<MirrorAPI>(*_orb, config); } else if (_configSources.size() != 0) { slobrok::ConfiguratorFactory config( config::ConfigUri(_slobrokConfigId, diff --git a/searchcore/src/apps/vespa-proton-cmd/vespa-proton-cmd.cpp b/searchcore/src/apps/vespa-proton-cmd/vespa-proton-cmd.cpp index 8b6203c78a2..50a2aecce76 100644 --- a/searchcore/src/apps/vespa-proton-cmd/vespa-proton-cmd.cpp +++ b/searchcore/src/apps/vespa-proton-cmd/vespa-proton-cmd.cpp @@ -3,6 +3,7 @@ #include <vespa/slobrok/sbmirror.h> #include <vespa/config/common/configsystem.h> #include <vespa/config/common/exceptions.h> +#include <vespa/vespalib/util/exceptions.h> #include <vespa/fnet/frt/supervisor.h> #include <vespa/fnet/frt/target.h> #include <vespa/vespalib/util/host_name.h> @@ -158,6 +159,9 @@ public: } catch (config::InvalidConfigException& e) { fprintf(stderr, "ERROR: failed to get service location broker configuration\n"); std::_Exit(1); + } catch (vespalib::IllegalStateException& e) { + fprintf(stderr, "ERROR: empty or invalid service location broker configuration: %s\n", e.what()); + std::_Exit(2); } return ""; } diff --git a/slobrok/src/vespa/slobrok/cfg.cpp b/slobrok/src/vespa/slobrok/cfg.cpp index 03b2b12803e..01da82b41c1 100644 --- a/slobrok/src/vespa/slobrok/cfg.cpp +++ b/slobrok/src/vespa/slobrok/cfg.cpp @@ -34,7 +34,6 @@ Configurator::Configurator(Configurable& target, const config::ConfigUri & uri) : _subscriber(uri.getContext()), _handle(_subscriber.subscribe<cloud::config::SlobroksConfig>(uri.getConfigId())), _target(target) - { } diff --git a/slobrok/src/vespa/slobrok/sbmirror.cpp b/slobrok/src/vespa/slobrok/sbmirror.cpp index 6aff47e13fd..13680d16e68 100644 --- a/slobrok/src/vespa/slobrok/sbmirror.cpp +++ b/slobrok/src/vespa/slobrok/sbmirror.cpp @@ -3,6 +3,7 @@ #include "sbmirror.h" #include <vespa/fnet/frt/supervisor.h> #include <vespa/fnet/frt/target.h> +#include <vespa/vespalib/util/exceptions.h> #include <vespa/log/log.h> LOG_SETUP(".slobrok.mirror"); @@ -30,7 +31,9 @@ MirrorAPI::MirrorAPI(FRT_Supervisor &orb, const ConfiguratorFactory & config) _req(0) { _configurator->poll(); - LOG_ASSERT(_slobrokSpecs.ok()); + if (!_slobrokSpecs.ok()) { + throw vespalib::IllegalStateException("Not able to initialize MirrorAPI due to missing or bad slobrok specs"); + } ScheduleNow(); } |