From 4a83c880f77fd333b275c6272210e4d28b9292ac Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Wed, 9 Jun 2021 16:01:57 +0200 Subject: [PATCH] Add memory server registration and removal --- .../libraries/armem/core/error/mns.cpp | 10 +++--- .../RobotAPI/libraries/armem/core/error/mns.h | 7 ++-- .../RobotAPI/libraries/armem/mns/Client.cpp | 17 ++++++++-- source/RobotAPI/libraries/armem/mns/Client.h | 34 ++++++++++++++++++- 4 files changed, 57 insertions(+), 11 deletions(-) diff --git a/source/RobotAPI/libraries/armem/core/error/mns.cpp b/source/RobotAPI/libraries/armem/core/error/mns.cpp index 5a29321f7..da8b8f485 100644 --- a/source/RobotAPI/libraries/armem/core/error/mns.cpp +++ b/source/RobotAPI/libraries/armem/core/error/mns.cpp @@ -44,16 +44,16 @@ namespace armarx::armem::error } - - MemoryServerRegistrationFailed::MemoryServerRegistrationFailed(const MemoryID& memoryID, const std::string& errorMessage) : - ArMemError(makeMsg(memoryID, errorMessage)) + ServerRegistrationOrRemovalFailed::ServerRegistrationOrRemovalFailed(const std::string& verb, const MemoryID& memoryID, const std::string& errorMessage) : + ArMemError(makeMsg(verb, memoryID, errorMessage)) { + } - std::string MemoryServerRegistrationFailed::makeMsg(const MemoryID& memoryID, const std::string& errorMessage) + std::string ServerRegistrationOrRemovalFailed::makeMsg(const std::string& verb, const MemoryID& memoryID, const std::string& errorMessage) { std::stringstream ss; - ss << "Failed to register memory server for '" << memoryID << "' in the Memory Name System (MNS)."; + ss << "Failed to " << verb << " memory server for '" << memoryID << "' in the Memory Name System (MNS)."; if (not errorMessage.empty()) { ss << "\n" << errorMessage; diff --git a/source/RobotAPI/libraries/armem/core/error/mns.h b/source/RobotAPI/libraries/armem/core/error/mns.h index 4c4295729..428df8cae 100644 --- a/source/RobotAPI/libraries/armem/core/error/mns.h +++ b/source/RobotAPI/libraries/armem/core/error/mns.h @@ -37,15 +37,16 @@ namespace armarx::armem::error /** * @brief Indicates that a query to the Memory Name System failed. */ - class MemoryServerRegistrationFailed : public ArMemError + class ServerRegistrationOrRemovalFailed : public ArMemError { public: - MemoryServerRegistrationFailed(const MemoryID& memoryID, const std::string& errorMessage = ""); + ServerRegistrationOrRemovalFailed(const std::string& verb, const MemoryID& memoryID, const std::string& errorMessage = ""); - static std::string makeMsg(const MemoryID& memoryID, const std::string& errorMessage = ""); + static std::string makeMsg(const std::string& verb, const MemoryID& memoryID, const std::string& errorMessage = ""); }; + } diff --git a/source/RobotAPI/libraries/armem/mns/Client.cpp b/source/RobotAPI/libraries/armem/mns/Client.cpp index aa751e6d0..cb308f79a 100644 --- a/source/RobotAPI/libraries/armem/mns/Client.cpp +++ b/source/RobotAPI/libraries/armem/mns/Client.cpp @@ -135,7 +135,7 @@ namespace armarx::armem::mns client::Writer Client::getWriter(const MemoryID& memoryID) { - client::Writer(resolveServer(memoryID)); + return client::Writer(resolveServer(memoryID)); } @@ -161,7 +161,20 @@ namespace armarx::armem::mns data::RegisterMemoryResult result = mns->registerMemory(input); if (!result.success) { - throw error::MemoryServerRegistrationFailed(memoryID, result.errorMessage); + throw error::ServerRegistrationOrRemovalFailed("register", memoryID, result.errorMessage); + } + } + + + void Client::removeServer(const MemoryID& memoryID) + { + data::RemoveMemoryInput input; + input.name = memoryID.memoryName; + + data::RemoveMemoryResult result = mns->removeMemory(input); + if (!result.success) + { + throw error::ServerRegistrationOrRemovalFailed("remove", memoryID, result.errorMessage); } } diff --git a/source/RobotAPI/libraries/armem/mns/Client.h b/source/RobotAPI/libraries/armem/mns/Client.h index bf77eec91..5979a6cab 100644 --- a/source/RobotAPI/libraries/armem/mns/Client.h +++ b/source/RobotAPI/libraries/armem/mns/Client.h @@ -118,7 +118,19 @@ namespace armarx::armem::mns */ client::Reader getReader(const MemoryID& memoryID); + /** + * @brief Get Readers for all registered servers. + * + * @param update If true, perform an update first. + * @return The readers. + */ std::map<std::string, client::Reader> getAllReaders(bool update = true); + /** + * @brief Get Readers for all registered servers. + * + * @param update If true, perform an update first. + * @return The readers. + */ std::map<std::string, client::Reader> getAllReaders() const; @@ -132,7 +144,18 @@ namespace armarx::armem::mns */ client::Writer getWriter(const MemoryID& memoryID); + /** + * @brief Get Writers for all registered servers. + * + * @param update If true, perform an update first. + * @return The readers. + */ std::map<std::string, client::Writer> getAllWriters(bool update = true); + /** + * @brief Get Writers for all registered servers. + * + * @return The readers. + */ std::map<std::string, client::Writer> getAllWriters() const; @@ -144,10 +167,19 @@ namespace armarx::armem::mns * @param memoryID The memoryID. * @param server The memory server proxy. * - * @throw `error::MemoryServerRegistrationFailed` If the registration failed. + * @throw `error::ServerRegistrationOrRemovalFailed` If the registration failed. */ void registerServer(const MemoryID& memoryID, server::MemoryInterfacePrx server); + /** + * @brief Remove a memory server from the MNS. + * + * @param memoryID The memoryID. + * + * @throw `error::ServerRegistrationOrRemovalFailed` If the removal failed. + */ + void removeServer(const MemoryID& memoryID); + // Operators -- GitLab