From 0f7973bc0410ad88c9392a636da6c20ea9a8ac55 Mon Sep 17 00:00:00 2001 From: armar-user <armar-user@h2t.kit.edu> Date: Fri, 12 Nov 2021 09:09:11 +0100 Subject: [PATCH] bool flag to enbale/disable ltm. Fix plugin issue --- .../armem/server/MemoryToIceAdapter.cpp | 65 ++++++++++--------- .../armem/server/ltm/base/detail/MemoryBase.h | 3 + .../libraries/armem/server/plugins/Plugin.cpp | 6 +- .../libraries/armem/server/plugins/Plugin.h | 5 +- .../server/plugins/ReadWritePluginUser.cpp | 6 -- .../server/plugins/ReadWritePluginUser.h | 1 - 6 files changed, 40 insertions(+), 46 deletions(-) diff --git a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp index 3cc3879df..a42d4305d 100644 --- a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp +++ b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp @@ -192,7 +192,7 @@ namespace armarx::armem::server } // Consollidate to ltm - if (longtermMemory) + if (longtermMemory->enabled) { //ARMARX_IMPORTANT << longtermMemory->id().str(); //ARMARX_IMPORTANT << longtermMemory->getPath(); @@ -263,54 +263,54 @@ namespace armarx::armem::server { ARMARX_TRACE; ARMARX_CHECK_NOT_NULL(workingMemory); + ARMARX_CHECK_NOT_NULL(longtermMemory); // Core segment processors will aquire the core segment locks. query_proc::wm_server::MemoryQueryProcessor wmServerProcessor( input.withData ? armem::DataMode::WithData : armem::DataMode::NoData); armem::wm::Memory wmResult = wmServerProcessor.process(input.memoryQueries, *workingMemory); - query_proc::ltm_server::disk::MemoryQueryProcessor ltmProcessor; - armem::wm::Memory ltmResult = ltmProcessor.process(input, *longtermMemory); - armem::query::data::Result result; - if (not ltmResult.empty()) - { - ARMARX_INFO << "The LTM returned data after query"; - longtermMemory->load(ltmResult); // convert memory ==> meaning resolving references + if (longtermMemory->enabled) + { + query_proc::ltm_server::disk::MemoryQueryProcessor ltmProcessor; + armem::wm::Memory ltmResult = ltmProcessor.process(input, *longtermMemory); - wmResult.append(ltmResult); - if (wmResult.empty()) + if (not ltmResult.empty()) { - ARMARX_ERROR << "A merged Memory has no data although at least the LTM result contains data. This indicates that something is wrong."; - } + ARMARX_INFO << "The LTM returned data after query"; - // query again to limit output size (TODO: Skip if querytype is all) - auto queryInput = armem::client::QueryInput::fromIce(input); - queryInput.replaceQueryTarget(query::data::QueryTarget::LTM, query::data::QueryTarget::WM); + longtermMemory->load(ltmResult); // convert memory ==> meaning resolving references - query_proc::wm::MemoryQueryProcessor wm2wmProcessor( - input.withData ? armem::DataMode::WithData : armem::DataMode::NoData); - armem::wm::Memory mergedResult = wm2wmProcessor.process(queryInput.toIce(), wmResult); - if (mergedResult.empty()) - { - ARMARX_ERROR << "A merged and postprocessed Memory has no data although at least the LTM result contains data. This indicates that something is wrong."; - } + wmResult.append(ltmResult); + if (wmResult.empty()) + { + ARMARX_ERROR << "A merged Memory has no data although at least the LTM result contains data. This indicates that something is wrong."; + } - result.memory = toIce<data::MemoryPtr>(mergedResult); + // query again to limit output size (TODO: Skip if querytype is all) + auto queryInput = armem::client::QueryInput::fromIce(input); + queryInput.replaceQueryTarget(query::data::QueryTarget::LTM, query::data::QueryTarget::WM); - // also move results of ltm to wm - //this->commit(toCommit(ltm_converted)); + query_proc::wm::MemoryQueryProcessor wm2wmProcessor( + input.withData ? armem::DataMode::WithData : armem::DataMode::NoData); + wmResult = wm2wmProcessor.process(queryInput.toIce(), wmResult); + if (wmResult.empty()) + { + ARMARX_ERROR << "A merged and postprocessed Memory has no data although at least the LTM result contains data. This indicates that something is wrong."; + } - // mark removed entries of wm in viewer - // TODO - } - else - { - ARMARX_VERBOSE << "The LTM did not return data after query"; - result.memory = toIce<data::MemoryPtr>(wmResult); + // also move results of ltm to wm + //this->commit(toCommit(ltm_converted)); + + // mark removed entries of wm in viewer + // TODO + } } + result.memory = toIce<data::MemoryPtr>(wmResult); + result.success = true; if (result.memory->coreSegments.size() == 0) { @@ -336,6 +336,7 @@ namespace armarx::armem::server ARMARX_TRACE; ARMARX_CHECK_NOT_NULL(workingMemory); ARMARX_CHECK_NOT_NULL(longtermMemory); + data::StoreResult output; for (const auto& query : input.query.memoryQueries) diff --git a/source/RobotAPI/libraries/armem/server/ltm/base/detail/MemoryBase.h b/source/RobotAPI/libraries/armem/server/ltm/base/detail/MemoryBase.h index 4f79c2cd4..8203fa4cd 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/base/detail/MemoryBase.h +++ b/source/RobotAPI/libraries/armem/server/ltm/base/detail/MemoryBase.h @@ -92,6 +92,9 @@ namespace armarx::armem::server::ltm virtual void _load(armem::wm::Memory& memory) = 0; virtual void _store(const armem::wm::Memory& memory) = 0; + public: + bool enabled = true; + protected: mutable std::recursive_mutex ltm_mutex; }; diff --git a/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp b/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp index faaedbe42..327a83223 100644 --- a/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp +++ b/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp @@ -32,13 +32,13 @@ namespace armarx::armem::server::plugins } // stuff for ltm - if (longtermMemoryEnabled) // if not explicitly set to false in constructor of component (then we dont need the params) + if (longtermMemory.enabled) // if not explicitly set to false in constructor of component (then we dont need the params) { if (not properties->hasDefinition(prefix + "ltm.enabled")) { - properties->optional(longtermMemoryEnabled, prefix + "ltm.enabled"); + properties->optional(longtermMemory.enabled, prefix + "ltm.enabled"); } - longtermMemory.createPropertyDefinitions(properties, "ltm."); + //longtermMemory.createPropertyDefinitions(properties, "ltm."); } // Publish memory updates topic diff --git a/source/RobotAPI/libraries/armem/server/plugins/Plugin.h b/source/RobotAPI/libraries/armem/server/plugins/Plugin.h index d5c7c0534..8a5a68934 100644 --- a/source/RobotAPI/libraries/armem/server/plugins/Plugin.h +++ b/source/RobotAPI/libraries/armem/server/plugins/Plugin.h @@ -80,16 +80,13 @@ namespace armarx::armem::server::plugins // Long-Term Memory - /// Indicates whether to use or not to use the ltm feature. - bool longtermMemoryEnabled = true; - /// A manager class for the ltm. It internally holds a normal wm instance as a cache. server::ltm::disk::Memory longtermMemory; private: - client::plugins::Plugin* clientPlugin; + client::plugins::Plugin* clientPlugin = nullptr; }; } diff --git a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp index 7570470f5..285c65e0b 100644 --- a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp +++ b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp @@ -86,12 +86,6 @@ namespace armarx::armem::server::plugins } - bool ReadWritePluginUser::isLongtermMemoryEnabled() - { - return plugin->longtermMemoryEnabled; - } - - ltm::disk::Memory& ReadWritePluginUser::longtermMemory() { return plugin->longtermMemory; diff --git a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h index f0f891151..8d3dad4c9 100644 --- a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h +++ b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h @@ -55,7 +55,6 @@ namespace armarx::armem::server::plugins server::wm::Memory& workingMemory(); MemoryToIceAdapter& iceAdapter(); - bool isLongtermMemoryEnabled(); server::ltm::disk::Memory& longtermMemory(); -- GitLab