From 63502511dea7e2cb4124d28c8378fb14483a066b Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Mon, 14 Jun 2021 13:35:51 +0200 Subject: [PATCH] Fix Writer setting the timeCreated instead of timeSent --- .../libraries/armem/client/Writer.cpp | 79 +++++++++++-------- .../RobotAPI/libraries/armem/client/Writer.h | 8 +- 2 files changed, 53 insertions(+), 34 deletions(-) diff --git a/source/RobotAPI/libraries/armem/client/Writer.cpp b/source/RobotAPI/libraries/armem/client/Writer.cpp index 9b841c6d1..2021f3a18 100644 --- a/source/RobotAPI/libraries/armem/client/Writer.cpp +++ b/source/RobotAPI/libraries/armem/client/Writer.cpp @@ -48,7 +48,7 @@ namespace armarx::armem::client data::Commit commitIce; toIce(commitIce, commit); - data::CommitResult resultIce = this->commit(commitIce); + data::CommitResult resultIce = this->_commit(commitIce); armem::CommitResult result; fromIce(resultIce, result); @@ -58,15 +58,57 @@ namespace armarx::armem::client data::CommitResult Writer::commit(const data::Commit& _commit) + { + data::Commit commit = _commit; + return this->_commit(commit); + } + + + EntityUpdateResult Writer::commit(const EntityUpdate& update) + { + armem::Commit commit; + commit.updates.push_back(update); + + armem::CommitResult result = this->commit(commit); + ARMARX_CHECK_EQUAL(result.results.size(), 1); + return result.results.at(0); + } + + EntityUpdateResult Writer::commit( + const MemoryID& entityID, + const std::vector<aron::datanavigator::DictNavigatorPtr>& instancesData, + Time timeCreated) + { + EntityUpdate update; + update.entityID = entityID; + update.instancesData = instancesData; + update.timeCreated = timeCreated; + return commit(update); + } + + void + Writer::setWritingMemory(server::WritingMemoryInterfacePrx memory) + { + this->memory = memory; + } + + data::CommitResult Writer::_commit(data::Commit& commit) { ARMARX_CHECK_NOT_NULL(memory); - data::Commit commit = _commit; + /* + * This function sets the `timeSent` of each `EntityUpdate` before + * sending the data. To allow that, `commit` needs to bo non-const. + * Otherwise, the function would need to make a copy of `commit`, + * which is not necessary in all cases; e.g. when called by + * `commit(Const Commit&)`, which converts the commit to ice types + * anyway. + */ - Time timeSent = armem::Time::now(); + const Time timeSent = armem::Time::now(); for (data::EntityUpdate& update : commit.updates) { - update.timeCreatedMicroSeconds = timeSent.toMicroSeconds(); + update.timeSentMicroSeconds = timeSent.toMicroSeconds(); } data::CommitResult result; @@ -100,35 +142,6 @@ namespace armarx::armem::client return result; } - - - EntityUpdateResult Writer::commit(const EntityUpdate& update) - { - armem::Commit commit; - commit.updates.push_back(update); - - armem::CommitResult result = this->commit(commit); - ARMARX_CHECK_EQUAL(result.results.size(), 1); - return result.results.at(0); - } - - EntityUpdateResult Writer::commit( - const MemoryID& entityID, - const std::vector<aron::datanavigator::DictNavigatorPtr>& instancesData, - Time timeCreated) - { - EntityUpdate update; - update.entityID = entityID; - update.instancesData = instancesData; - update.timeCreated = timeCreated; - return commit(update); - } - - void - Writer::setWritingMemory(server::WritingMemoryInterfacePrx memory) - { - this->memory = memory; - } } diff --git a/source/RobotAPI/libraries/armem/client/Writer.h b/source/RobotAPI/libraries/armem/client/Writer.h index 9c6e8851e..dd953fa36 100644 --- a/source/RobotAPI/libraries/armem/client/Writer.h +++ b/source/RobotAPI/libraries/armem/client/Writer.h @@ -50,6 +50,10 @@ namespace armarx::armem::client const std::vector<aron::datanavigator::DictNavigatorPtr>& instancesData, Time timeCreated); + // with bare-ice types + data::CommitResult commit(const data::Commit& commit); + + void setWritingMemory(server::WritingMemoryInterfacePrx memory); operator bool() const @@ -59,7 +63,9 @@ namespace armarx::armem::client private: - data::CommitResult commit(const data::Commit& commit); + /// Sets `timeSent` on all entity updates and performs the commit, + data::CommitResult _commit(data::Commit& commit); + public: -- GitLab