diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.cpp b/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.cpp index fbea444e9d44008407703fe7b7f8b007179726b6..ab894ea641252b3500e7aaef285dde6b65dd0534 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 86c00cc618e23620540428ba3b024743ecc272ee..a11404eca5dba8c7eb965e6fb4da8042ae234327 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 ddb1a96a79fefe069c3edaae44c53a211fc97e30..8c814a160b49b0367cece67d407b986ac4d372e5 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 c40805a0f8a79413eb33418154a18194be6a22ba..b8634f385021c9c22ba9dea22d8592a19271767e 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";