diff --git a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp index 2249bdf242a197d1bff3be840d846f58a2487568..8865301a7396ee28d6c6ed99ea6a1cc2c34e189a 100644 --- a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp +++ b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp @@ -188,6 +188,9 @@ namespace armarx::armem::server::robot_state startRobotUnitStream(); } + + //load from LTM + this->reloadFromLTM(); } void diff --git a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp index 4aee9800a61ce9862b714d0ba3df58b11b08e32d..9391ae0e514e97559aead205c598aa2b87483b24 100644 --- a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp +++ b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp @@ -381,6 +381,16 @@ namespace armarx::armem::server } // LTM LOADING FROM LTM + armem::CommitResult + MemoryToIceAdapter::reloadFromLTM() + { + ARMARX_INFO << "Reloading of data from LTM into WM triggered"; + armarx::armem::wm::Memory mem = this->longtermMemory->loadAllAndResolve(); + auto com = armem::toCommit(mem); + auto res = this->commit(com); + + return res; + } // LTM STORING AND RECORDING dto::DirectlyStoreResult diff --git a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.h b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.h index 0ae95a4207d86842d1b11e82cd97af6030147401..2fb61e6f3ad9c494b99a79ecc106c5f497b18e79 100644 --- a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.h +++ b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.h @@ -47,6 +47,7 @@ namespace armarx::armem::server armem::structure::data::GetServerStructureResult getServerStructure(); // LTM LOADING AND REPLAYING + armem::CommitResult reloadFromLTM(); // LTM STORING AND RECORDING dto::DirectlyStoreResult directlyStore(const dto::DirectlyStoreInput& directlStoreInput); diff --git a/source/RobotAPI/libraries/armem/server/ltm/Memory.cpp b/source/RobotAPI/libraries/armem/server/ltm/Memory.cpp index bb2fd2ceb33dbc846f2d1eb5761008766fed4f78..516e15c048de2f25ea969300544fccf66819d084 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/Memory.cpp +++ b/source/RobotAPI/libraries/armem/server/ltm/Memory.cpp @@ -99,10 +99,14 @@ namespace armarx::armem::server::ltm } else { - ARMARX_WARNING << "Could not load the core segments of LTM " << id().str() << " as the path " << getFullPath().string() << " does not exist."; + ARMARX_WARNING << "Could not load the core segments of LTM " + << id().str() + << " as the path " + << getFullPath().string() + << " does not exist."; } - ARMARX_INFO << "All CoreSegments handeled"; + ARMARX_DEBUG << "All CoreSegments handeled"; return true; } @@ -176,8 +180,6 @@ namespace armarx::armem::server::ltm m.id() = id().getMemoryID().cleanID(); - ARMARX_INFO << VAROUT(id()); - forEachCoreSegment( [&m](auto& x) { @@ -192,6 +194,8 @@ namespace armarx::armem::server::ltm { std::lock_guard l(ltm_mutex); // we cannot load a memory multiple times simultaneously + ARMARX_DEBUG << VAROUT(fullPathExists()); + if (/*(connected() && collectionExists()) ||*/ fullPathExists()) { m.forEachCoreSegment( @@ -205,6 +209,9 @@ namespace armarx::armem::server::ltm processors); c.resolve(e); }); + } else { + ARMARX_WARNING << "You are trying to resolve an LTM from a path that does not exist: " + << getFullPath(); } } @@ -254,6 +261,17 @@ namespace armarx::armem::server::ltm //CachedBase::addToCache(memory); } + void + Memory::_loadOnStartup(){ + try{ + armem::wm::Memory memory = this->loadAllAndResolve(); + ARMARX_INFO << "Loading LTM from " << this->p.export_path << "/" << this->p.export_name << " on startup successful."; + } + catch(...){ + ARMARX_INFO << "Could not load memory " << this->name() << " on startup."; + } + } + void Memory::getAndSaveStatistics() { diff --git a/source/RobotAPI/libraries/armem/server/ltm/Memory.h b/source/RobotAPI/libraries/armem/server/ltm/Memory.h index 05d04551d683cb3fb3fb773ca97ebb6cee8c3b6e..c7a7008f8000169b396a0944efe3a1396fce0d81 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/Memory.h +++ b/source/RobotAPI/libraries/armem/server/ltm/Memory.h @@ -59,6 +59,7 @@ namespace armarx::armem::server::ltm void _resolve(armem::wm::Memory&) final; void _store(const armem::wm::Memory&) final; void _directlyStore(const armem::wm::Memory&) final; + void _loadOnStartup() final; private: std::time_t current_date; diff --git a/source/RobotAPI/libraries/armem/server/ltm/detail/MemoryBase.h b/source/RobotAPI/libraries/armem/server/ltm/detail/MemoryBase.h index e085590fe495449d9f5b1893ce6eb5f6e6f87662..2b1dbb479199466cf091f78afaab403ebf2f55d3 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/detail/MemoryBase.h +++ b/source/RobotAPI/libraries/armem/server/ltm/detail/MemoryBase.h @@ -52,10 +52,10 @@ namespace armarx::armem::server::ltm::detail configure() { bool en = p.enabled_on_startup; - ARMARX_INFO << VAROUT(p.import_name); - ARMARX_INFO << VAROUT(p.import_path); ARMARX_INFO << VAROUT(p.configuration_on_startup); ARMARX_INFO << VAROUT(p.export_name); + ARMARX_INFO << VAROUT(p.export_path); + this->setExportName(p.export_name); try @@ -77,12 +77,7 @@ namespace armarx::armem::server::ltm::detail { this->startRecording(); } - - std::string importPath = p.import_path; - - if (importPath.length() > 0){ - this->loadOnStartup(); - } + } /// enable this LTM @@ -211,8 +206,6 @@ namespace armarx::armem::server::ltm::detail defs->optional(p.enabled_on_startup, prefix + "enabled"); defs->optional(p.configuration_on_startup, prefix + "configuration"); defs->optional(p.export_name, prefix + "exportName"); - defs->optional(p.import_name, prefix + "importName"); - defs->optional(p.import_path, prefix + "importPath"); } /// enable/disable @@ -280,16 +273,12 @@ namespace armarx::armem::server::ltm::detail return "LT-Memory"; } - void loadOnStartup(){ - ARMARX_INFO << "Loading on startup from " << p.import_path << "/" << p.import_name; - try{ - this->loadAllAndResolve(); - } - catch(...){ - ARMARX_INFO << "Could not load memory " << this->name() << " on startup"; - } + void + loadOnStartup(){ + _loadOnStartup(); } + protected: /// configuration virtual void @@ -316,6 +305,7 @@ namespace armarx::armem::server::ltm::detail virtual void _resolve(armem::wm::Memory& memory) = 0; virtual void _store(const armem::wm::Memory& memory) = 0; virtual void _directlyStore(const armem::wm::Memory& memory) = 0; + virtual void _loadOnStartup() = 0; public: // stuff for scenario parameters @@ -327,8 +317,6 @@ namespace armarx::armem::server::ltm::detail "\"PngConverter\": {}, \"ExrConverter\": {}}"; //record with 20 fps as standard std::string export_name = "MemoryExport"; std::string export_path = "/tmp/ltm"; - std::string import_path = "/tmp/ltm"; - std::string import_name = "MemoryExport"; } p; protected: @@ -336,6 +324,6 @@ namespace armarx::armem::server::ltm::detail mutable Statistics statistics; - std::atomic_bool enabled = false; + std::atomic_bool enabled = true; }; } // namespace armarx::armem::server::ltm::detail diff --git a/source/RobotAPI/libraries/armem/server/ltm/detail/mixins/DiskStorageMixin.cpp b/source/RobotAPI/libraries/armem/server/ltm/detail/mixins/DiskStorageMixin.cpp index 19bfcd18bdb28870df2a9e69b1d0c74e387e07ba..480f04cb0a0a188e833007d6c9a0c6d13418d2f7 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/detail/mixins/DiskStorageMixin.cpp +++ b/source/RobotAPI/libraries/armem/server/ltm/detail/mixins/DiskStorageMixin.cpp @@ -39,20 +39,13 @@ namespace armarx::armem::server::ltm::detail::mixin std::filesystem::path current_base_path = n; current_base_path.append(dateString); - //inform user about change: - ARMARX_DEBUG << "Changed memory base path to include current date of " - << dateString - << " to " - << this->getMemoryBasePath() - ; - return current_base_path; } void DiskMemoryItemMixin::setMixinExportName(const std::string& n) { - ARMARX_INFO << "Currently setting export name to: " << n; + ARMARX_DEBUG << "Currently setting export name to: " << n; exportName = n; } @@ -81,7 +74,7 @@ namespace armarx::armem::server::ltm::detail::mixin } else { std::filesystem::path newPath; newPath.assign(memoryBasePathString); - return this->addDateToMemoryBasePath(newPath); + return newPath; } } @@ -89,11 +82,17 @@ namespace armarx::armem::server::ltm::detail::mixin DiskMemoryItemMixin::getFullPath() const { auto p = getMemoryBasePath() / exportName; + //p = this->addDateToMemoryBasePath(p); //ARMARX_INFO << VAROUT(_id); //ARMARX_INFO << VAROUT(_id.cleanID()); auto cleanID = _id.cleanID(); //somehow, the iDs are jumbled when loading the LTM from disk, this solves it for now - return util::fs::toPath(p, cleanID); + auto fullPath = util::fs::toPath(p, cleanID); + + //inform user about change: + ARMARX_DEBUG << "Full path is " << fullPath; + + return fullPath; } bool diff --git a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp index 1c039d569d1dc5007f72e37ca6a69e200ab07699..456d46dcf547004d64df538b851273136481b7e5 100644 --- a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp +++ b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp @@ -174,4 +174,11 @@ namespace armarx::armem::server::plugins return getAvailableEngines(); } + armem::CommitResult + ReadWritePluginUser::reloadFromLTM() + { + iceAdapter().reloadFromLTM(); + return armem::CommitResult(); + } + } // namespace armarx::armem::server::plugins diff --git a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h index 89dcb3239cc6a62275dbd744732f4a262474d447..289db221609ee4f157126a3fb898df00fd78f58f 100644 --- a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h +++ b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h @@ -87,6 +87,9 @@ namespace armarx::armem::server::plugins virtual armem::prediction::data::EngineSupportMap getAvailableEngines(const ::Ice::Current&) override; + //test + armem::CommitResult reloadFromLTM(); + public: Plugin& memoryServerPlugin();