From d91445c9cd68045f42a7cf4cd8bc80507cf78ad6 Mon Sep 17 00:00:00 2001 From: Fabian PK <fabian.peller-konrad@kit.edu> Date: Tue, 27 Jul 2021 15:48:34 +0200 Subject: [PATCH] different consollidation modes --- .../armem/core/longtermmemory/Memory.cpp | 12 ++++++ .../armem/core/longtermmemory/Memory.h | 42 +++++++++++++------ .../armem/server/ComponentPlugin.cpp | 8 +--- .../armem/server/MemoryToIceAdapter.cpp | 17 +++++++- 4 files changed, 59 insertions(+), 20 deletions(-) diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.cpp b/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.cpp index fbea444e9..ab894ea64 100644 --- a/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.cpp +++ b/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.cpp @@ -26,6 +26,18 @@ namespace armarx::armem::ltm return true; } + void Memory::defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string& prefix) + { + defs->optional(dbsettings.host, prefix + ".ltm.10_host"); + defs->optional(dbsettings.port, prefix + "ltm.11_port"); + defs->optional(dbsettings.user, prefix + "ltm.20_user"); + defs->optional(dbsettings.password, prefix + "ltm.21_password"); + defs->optional(dbsettings.database, prefix + "ltm.22_database"); + defs->optional(alwaysTransferSettings.enabled, prefix + "ltm.30_enableAlwaysTransfer", "Enable transfer whenever new data is committed (This disables the other transfer modes!)."); + defs->optional(periodicTransferSettings.enabled, prefix + "ltm.31_enablePeriodicTransfer", "Enable transfer based on periodic interval."); + defs->optional(onFullTransferSettings.enabled, prefix + "ltm.32_enableOnFullTransfer", "Enable transfer whenever the wm is full (see maxHistorySize)."); + } + wm::Memory Memory::convert() const { if (!checkConnection()) diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.h b/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.h index 86c00cc61..a11404eca 100644 --- a/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.h +++ b/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.h @@ -1,11 +1,18 @@ #pragma once +// BaseClass #include "../base/MemoryBase.h" +// CoreSegment #include "CoreSegment.h" +// WM #include "../workingmemory/Memory.h" +// Properties +#include <ArmarXCore/core/application/properties/PluginAll.h> +#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> + namespace armarx::armem::ltm { /** @@ -21,29 +28,35 @@ namespace armarx::armem::ltm using Base::MemoryBase; using Base::operator=; - enum class PeriodicTransferMode + struct TransferSettings { - MANUAL, - TRANSFER_PERIODIC_KEEP, - TRANSFER_PERIODIC_DELETE, + bool enabled = false; }; - enum class FilledTransferMode + struct AlwaysTransferSettings : public TransferSettings { - TRANSFER_LATEST, - TRANSFER_LEAST_USED + }; - struct PeriodicTransfer + struct PeriodicTransferSettings : public TransferSettings { - PeriodicTransferMode mode = PeriodicTransferMode::MANUAL; + bool deleteFromWMOnTransfer = false; + int frequencyHz = 1; }; - struct FilledTransfer + struct OnFullTransferSettings : public TransferSettings { - FilledTransferMode mode = FilledTransferMode::TRANSFER_LATEST; + enum class Mode + { + TRANSFER_LATEST, + TRANSFER_LEAST_USED + }; + + Mode mode; }; + // PropertyDefinitions related to LTM + void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string& prefix = ""); // Conversion wm::Memory convert() const; @@ -71,7 +84,10 @@ namespace armarx::armem::ltm public: MongoDBConnectionManager::MongoDBSettings dbsettings; - PeriodicTransfer periodic_transfer; - FilledTransferMode filled_transfer; + AlwaysTransferSettings alwaysTransferSettings; + PeriodicTransferSettings periodicTransferSettings; + OnFullTransferSettings onFullTransferSettings; + + }; } diff --git a/source/RobotAPI/libraries/armem/server/ComponentPlugin.cpp b/source/RobotAPI/libraries/armem/server/ComponentPlugin.cpp index ddb1a96a7..8c814a160 100644 --- a/source/RobotAPI/libraries/armem/server/ComponentPlugin.cpp +++ b/source/RobotAPI/libraries/armem/server/ComponentPlugin.cpp @@ -22,12 +22,8 @@ namespace armarx::armem::server::plugins ComponentPluginUser& parent = this->parent<ComponentPluginUser>(); properties->topic(memoryListener, parent.memoryListenerDefaultName); - properties->optional(parent.longtermMemoryEnabled, "ltm.00_enabled"); - properties->optional(parent.longtermMemory.dbsettings.host, "ltm.10_host"); - properties->optional(parent.longtermMemory.dbsettings.port, "ltm.11_port"); - properties->optional(parent.longtermMemory.dbsettings.user, "ltm.20_user"); - properties->optional(parent.longtermMemory.dbsettings.password, "ltm.21_password"); - properties->optional(parent.longtermMemory.dbsettings.database, "ltm.22_database"); + properties->optional(parent.longtermMemoryEnabled, "memory.ltm.00_enabled"); + parent.longtermMemory.defineProperties(properties, "memory"); } diff --git a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp index c40805a0f..b8634f385 100644 --- a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp +++ b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp @@ -172,7 +172,22 @@ namespace armarx::armem::server result.snapshotID = updateResult.id; result.timeArrived = update.timeArrived; - // TODO: Add if and param here (fabian.peller) + // also store in ltm if transfermode is set to always + if (longtermMemory) + { + if (longtermMemory->alwaysTransferSettings.enabled) + { + wm::Memory tmp("tmp"); + tmp.update(update); + longtermMemory->append(tmp); + } + else + { + // TODO: see below + } + } + + // TODO: Consollidate to ltm if onFilledTransfer is enabled (fabian.peller) for (const auto& snapshot : updateResult.removedSnapshots) { ARMARX_DEBUG << "The id " << snapshot.id() << " was removed from wm"; -- GitLab