From 377eaf2bb8f496d531c0c9d09befb7347931875c Mon Sep 17 00:00:00 2001 From: Dennis Klein Date: Thu, 25 Jul 2019 14:42:57 +0200 Subject: [PATCH] SDK: Implement error handling for RequestCommanderInfo --- fairmq/sdk/DDSSession.cxx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/fairmq/sdk/DDSSession.cxx b/fairmq/sdk/DDSSession.cxx index 6691cd44..5ffd9893 100644 --- a/fairmq/sdk/DDSSession.cxx +++ b/fairmq/sdk/DDSSession.cxx @@ -226,20 +226,32 @@ auto DDSSession::RequestCommanderInfo() -> CommanderInfo { dds::tools_api::SCommanderInfoRequestData commanderInfoInfo; tools::Semaphore blocker; + std::string error; auto commanderInfoRequest = dds::tools_api::SCommanderInfoRequest::makeRequest(commanderInfoInfo); CommanderInfo info; commanderInfoRequest->setResponseCallback( [&info](const dds::tools_api::SCommanderInfoResponseData& _response) { info.pid = _response.m_pid; - info.activeTopologyName = std::move(_response.m_activeTopologyName); + info.activeTopologyName = _response.m_activeTopologyName; }); commanderInfoRequest->setMessageCallback( - [](const dds::tools_api::SMessageResponseData& _message) { LOG(debug) << _message; }); + [&](const dds::tools_api::SMessageResponseData& _message) { + if (_message.m_severity == dds::intercom_api::EMsgSeverity::error) { + error = _message.m_msg; + blocker.Signal(); + } else { + LOG(debug) << _message; + } + }); commanderInfoRequest->setDoneCallback([&]() { blocker.Signal(); }); fImpl->fSession->sendRequest(commanderInfoRequest); blocker.Wait(); + if (!error.empty()) { + throw std::runtime_error(error); + } + return info; }