MemoryManager.cpp
Go to the documentation of this file.
1 // Header
2 #include "MemoryManager.h"
3 
4 // Simox
5 #include <SimoxUtility/json.h>
6 
7 // ArmarX
10 
14 
15 #include "operations.h"
16 
18 {
19  namespace bsoncxxbuilder = bsoncxx::builder::stream;
20  namespace bsoncxxdoc = bsoncxx::document;
21 
23  Memory::checkConnection() const
24  {
25  // Check connection:
27  {
28  ARMARX_WARNING << deactivateSpam("LTM_ConnectionError_" + cache.name())
29  << "The connection to mongocxx for ltm '" << cache.name()
30  << "' is not valid. Settings are: " << dbsettings.toString()
31  << "\nTo start it, run e.g.: \n"
32  << "armarx memory start"
33  << "\n\n";
34  return nullptr;
35  }
36 
38  auto client = pool.acquire();
39 
40  return client;
41  }
42 
43  void
45  {
46  TIMING_START(LTM_Reload);
47  ARMARX_DEBUG << "(Re)Establishing connection to: " << dbsettings.toString();
48 
49  auto client = checkConnection();
50  if (!client)
51  {
52  return;
53  }
54 
55  std::lock_guard l(ltm_mutex);
56  auto databases = client->list_databases();
57  std::stringstream ss;
58  ss << "Found Memory-Collection in MongoDB for '" + cache.name() + "': \n";
59  for (const auto& doc : databases)
60  {
61  auto el = doc["name"];
62  ss << "\t - " << el.get_utf8().value << "\n";
63  }
64  ARMARX_DEBUG << ss.str();
65 
66  armem::wm::Memory temp(lut.id());
67  mongocxx::database db = client->database(dbsettings.database);
68  util::load(db, temp);
69 
70  lut.append(temp);
71 
72  TIMING_END_STREAM(LTM_Reload, ARMARX_DEBUG);
73  }
74 
75  void
77  {
78  TIMING_START(LTM_Convert);
79 
80  auto client = checkConnection();
81  if (!client)
82  {
83  return;
84  }
85 
86  std::lock_guard l(ltm_mutex);
87  mongocxx::database db = client->database(dbsettings.database);
88 
89  util::convert(db, m);
90 
91  TIMING_END_STREAM(LTM_Convert, ARMARX_DEBUG);
92  }
93 
94  void
96  {
97  TIMING_START(LTM_Encode);
98 
99  auto client = checkConnection();
100  if (!client)
101  {
102  return;
103  }
104 
105  std::lock_guard l(ltm_mutex);
106  mongocxx::database db = client->database(dbsettings.database);
107  util::store(db, cache);
108 
109  // what to do with clear text data after encoding?
110  // TODO!
111 
112  // Finaly clear cache and put reference to lut
113  moveCacheToLUTAndClearCache();
114 
115  TIMING_END_STREAM(LTM_Encode, ARMARX_DEBUG);
116  }
117 } // namespace armarx::armem::server::ltm::mongodb
armarx::armem::server::ltm::mongodb::Memory::convert
void convert(armem::wm::Memory &) override
Definition: MemoryManager.cpp:76
TIMING_START
#define TIMING_START(name)
Definition: TimeUtil.h:289
operations.h
armarx::armem::server::ltm::mongodb::util::convert
void convert(const mongocxx::database &db, armem::wm::Memory &m)
Definition: operations.cpp:186
armarx::armem::server::ltm::mongodb::Memory::reload
void reload() override
Definition: MemoryManager.cpp:44
armarx::armem::server::ltm::mongodb::ConnectionManager::MongoDBSettings::database
std::string database
Definition: ConnectionManager.h:38
armarx::armem::server::ltm::mongodb::ConnectionManager::Connect
static mongocxx::pool & Connect(const MongoDBSettings &settings)
Definition: ConnectionManager.cpp:114
aron_conversions.h
Dict.h
TIMING_END_STREAM
#define TIMING_END_STREAM(name, os)
Definition: TimeUtil.h:310
armarx::armem::server::ltm::mongodb::ConnectionManager::MongoDBSettings::toString
std::string toString() const
Definition: ConnectionManager.cpp:96
NLohmannJSONConverter.h
deactivateSpam
SpamFilterDataPtr deactivateSpam(SpamFilterDataPtr const &spamFilter, float deactivationDurationSec, const std::string &identifier, bool deactivate)
Definition: Logging.cpp:75
armarx::armem::server::ltm::mongodb
Definition: ConnectionManager.cpp:7
armarx::armem::server::ltm::mongodb::util::store
void store(const mongocxx::database &db, const armem::wm::Memory &m)
Definition: operations.cpp:260
ARMARX_DEBUG
#define ARMARX_DEBUG
Definition: Logging.h:184
armarx::armem::server::ltm::mongodb::Memory::dbsettings
ConnectionManager::MongoDBSettings dbsettings
Definition: MemoryManager.h:34
armarx::armem::wm::Memory
Client-side working memory.
Definition: memory_definitions.h:133
armarx::armem::server::ltm::mongodb::Memory::encodeAndStore
void encodeAndStore() override
Definition: MemoryManager.cpp:95
armarx::armem::server::ltm::mongodb::PoolClientPtr
mongocxx::pool::entry PoolClientPtr
Definition: ConnectionManager.h:22
armarx::armem::server::ltm::mongodb::ConnectionManager::ConnectionIsValid
static bool ConnectionIsValid(const MongoDBSettings &settings, bool forceNewConnection=false)
Definition: ConnectionManager.cpp:135
TimeUtil.h
Logging.h
ARMARX_WARNING
#define ARMARX_WARNING
Definition: Logging.h:193
armarx::armem::server::ltm::mongodb::util::load
void load(const mongocxx::database &db, armem::wm::Memory &m)
Definition: operations.cpp:48
MemoryManager.h