MemoryPersistenceStrategy.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string>
4 
6 
10 
12 {
13  /**
14  * For usage if you might want to create the key using some logic
15  * defined with your strategy rather than the caller.
16  *
17  * NOTE: Not used currently
18  */
20  public:
21  virtual ~ItemIdentifier();
22 
23  virtual std::string getKey();
24  };
25 
26  /**
27  * Retrieved items' data with an origin (resp. the strategy identifier).
28  * Why an origin? Used to display which LTM sink provided the entity instance.
29  */
30  struct ItemResult
31  {
32  std::string origin;
33  std::vector<unsigned char> data;
34  };
35 
36  /**
37  * @brief Abstract memory persistence strategy (resp. LTM sink)
38  *
39  * Given a memory id, we can store items for it. A memory id is in terms of the persistence strategy an container that
40  * again might contain other containers or items with the actual data.
41  * We can also retrieve the current containers, which are a hierarchy below of the current memory id.
42  * The export name specifies our specific LTM export. You might want to write different exports with the same strategy.
43  * Nonetheless you could also create another strategy (@see RedundantPersistenceStrategy)
44  *
45  * Why do we basically have to supply the MemoryID everywhere?
46  * The first approach had an internal variable to the memory id, as it is kind of bound the memory hierarchy level and thus the id.
47  * But even though the MemoryID was stored by pass-by-value
48  * there was still somewhere and somehow and sometimes a reference to it, getting you into Teufels-Küche.
49  * Because the MemoryID is extended with finer hierarchy details, having the sideeffect, that this memory id would be changed.
50  * Also you needed a clone function, now you can just pass the strategy pointer.
51  *
52  *
53  *
54  * How are the containers created?
55  * -> Implicitly, whenever a item underneath is stored
56  *
57  * Want to create a new fancy ltm sink option? Maybe MongoDB?
58  * -> Implement this interface and add it similar to the existing strategy (e.g. DiskPersistence) at all locations.
59  * Don´t forget any ice proxies! (a powerful full text search is your friend)
60  */
62  public:
63  MemoryPersistenceStrategy() : MemoryPersistenceStrategy("Unspecified", "DefaultExport") {}
64 
65  /**
66  * @param identifier basically a unique name for the strategy (important if you use different strategies @see RedundantPersistenceStrategy)
67  * @param exportName identifier for the exported memory where any items are written (e.g. a directory)
68  */
69  MemoryPersistenceStrategy(const std::string& identifier, const std::string& exportName, bool enabled = true) : identifier_(identifier), exportName_(exportName), enabled_(enabled) {}
70 
71  virtual ~MemoryPersistenceStrategy() = default;
72 
73  /**
74  * Returns keys that allow use to move a step further in the hierarchy (e.g. if our memory id ends in a core segment it gives us the provider segment keys).
75  */
76  virtual std::vector<std::string> getContainerKeys(const armarx::armem::MemoryID& id) = 0;
77 
78  /**
79  * Keys of the actual items containing data stored for the memory id.
80  */
81  virtual std::vector<std::string> getItemKeys(const armarx::armem::MemoryID& id) = 0;
82 
83  virtual bool containsContainer(const armarx::armem::MemoryID& id, std::string key) = 0;
84 
85  virtual bool containsItem(const armarx::armem::MemoryID& id, std::string key) = 0;
86 
87  /**
88  * Stores an item containing actual data for the current memory id.
89  * How it is stored depends on the implementation of a concrete strategy (e.g. on disk in a specific directory).
90  *
91  * @param key unique identifier of our item for the specific id (e.g. filename).
92  * Note the keys can be equal for different id levels. So you might find the same key on the core segment level as well as on the entity level.
93  * @param data actual data written to the persistent item
94  */
95  virtual void storeItem(const armarx::armem::MemoryID& id, std::string key, std::vector<unsigned char>& data) = 0;
96 
97  // If you need a more powerful identification than a string as key (nonetheless the end will probably also again be a string)
98  void storeItem(const armarx::armem::MemoryID& memoryId, ItemIdentifier itemIdentifer, std::vector<unsigned char>& data)
99  {
100  storeItem(memoryId, itemIdentifer.getKey(), data);
101  }
102 
103  /**
104  * Retrieve the actual data of an item stored for the memory id.
105  *
106  * @return stored data
107  */
108  virtual std::vector<unsigned char> retrieveItem(const armarx::armem::MemoryID& id, std::string key) = 0;
109 
110  /**
111  * Retrieves the actual data but also appends the origin which is in this case the strategy identifier
112  */
113  virtual ItemResult retrieveItemWithOrigin(const armarx::armem::MemoryID& id, std::string& key)
114  {
115  ItemResult res;
116  res.origin = identifier_;
117  res.data = retrieveItem(id, key);
118  return res;
119  }
120 
121  std::vector<unsigned char> retrieveItem(const armarx::armem::MemoryID& memoryId, ItemIdentifier itemIdentifier)
122  {
123  return retrieveItem(memoryId, itemIdentifier.getKey());
124  }
125 
126  virtual void setExportName(const std::string& exportName)
127  {
128  exportName_ = exportName;
129  }
130 
131  std::string getExportName()
132  {
133  return exportName_;
134  }
135 
136  std::string getIdentifier()
137  {
138  return identifier_;
139  }
140 
141  void setIdentifier(const std::string& identifier)
142  {
143  identifier_ = identifier;
144  }
145 
146  virtual bool isEnabled()
147  {
148  return enabled_;
149  }
150 
151  virtual void disable()
152  {
153  enabled_ = false;
154  }
155 
156  virtual void enable()
157  {
158  enabled_ = true;
159  }
160 
161  virtual void createPropertyDefinitions(PropertyDefinitionsPtr& defs, const std::string& prefix) = 0;
162 
163  static const int DEPTH_TO_DATA_FILES = 7;
164 
165  static const constexpr char* TYPE_FILENAME = "type.aron";
166  static const constexpr char* DATA_FILENAME = "data.aron";
167  static const constexpr char* METADATA_FILENAME = "metadata.aron";
168 
169  static const constexpr char* MEMORY_EXPORT_SUFFIX = "_";
170 
171  protected:
172  /**
173  * Name of the strategy. Should be unique to avoid ambiguities.
174  */
175  std::string identifier_;
176 
177  /**
178  * Name of the specific memory export where our items should be stored.
179  * If you change the export name you will probably write the data to another target (e.g. different directory).
180  */
181  std::string exportName_;
182 
183  /**
184  * If false, the strategy is not writing or reading anything.
185  * Only default values are returned if necessary.
186  */
187  bool enabled_ = true;
188  };
189 } // namespace armarx::armem::server::ltm::persistence
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy
Abstract memory persistence strategy (resp.
Definition: MemoryPersistenceStrategy.h:61
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::TYPE_FILENAME
static const constexpr char * TYPE_FILENAME
Definition: MemoryPersistenceStrategy.h:165
armarx::armem::server::ltm::persistence::ItemIdentifier
For usage if you might want to create the key using some logic defined with your strategy rather than...
Definition: MemoryPersistenceStrategy.h:19
MemoryID.h
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::retrieveItemWithOrigin
virtual ItemResult retrieveItemWithOrigin(const armarx::armem::MemoryID &id, std::string &key)
Retrieves the actual data but also appends the origin which is in this case the strategy identifier.
Definition: MemoryPersistenceStrategy.h:113
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::enabled_
bool enabled_
If false, the strategy is not writing or reading anything.
Definition: MemoryPersistenceStrategy.h:187
armarx::armem::server::ltm::persistence::ItemResult::origin
std::string origin
Definition: MemoryPersistenceStrategy.h:32
PeriodicTask.h
armarx::armem::server::ltm::persistence
Definition: DiskPersistence.cpp:5
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::storeItem
void storeItem(const armarx::armem::MemoryID &memoryId, ItemIdentifier itemIdentifer, std::vector< unsigned char > &data)
Definition: MemoryPersistenceStrategy.h:98
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::getItemKeys
virtual std::vector< std::string > getItemKeys(const armarx::armem::MemoryID &id)=0
Keys of the actual items containing data stored for the memory id.
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::~MemoryPersistenceStrategy
virtual ~MemoryPersistenceStrategy()=default
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::containsItem
virtual bool containsItem(const armarx::armem::MemoryID &id, std::string key)=0
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::disable
virtual void disable()
Definition: MemoryPersistenceStrategy.h:151
memory_definitions.h
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::isEnabled
virtual bool isEnabled()
Definition: MemoryPersistenceStrategy.h:146
armarx::armem::MemoryID
A memory ID.
Definition: MemoryID.h:47
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::containsContainer
virtual bool containsContainer(const armarx::armem::MemoryID &id, std::string key)=0
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::storeItem
virtual void storeItem(const armarx::armem::MemoryID &id, std::string key, std::vector< unsigned char > &data)=0
Stores an item containing actual data for the current memory id.
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::retrieveItem
virtual std::vector< unsigned char > retrieveItem(const armarx::armem::MemoryID &id, std::string key)=0
Retrieve the actual data of an item stored for the memory id.
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::METADATA_FILENAME
static const constexpr char * METADATA_FILENAME
Definition: MemoryPersistenceStrategy.h:167
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::getContainerKeys
virtual std::vector< std::string > getContainerKeys(const armarx::armem::MemoryID &id)=0
Returns keys that allow use to move a step further in the hierarchy (e.g.
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::DEPTH_TO_DATA_FILES
static const int DEPTH_TO_DATA_FILES
Definition: MemoryPersistenceStrategy.h:163
enabled
std::atomic< bool > * enabled
Definition: RemoteGuiWidgetController.cpp:75
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::setIdentifier
void setIdentifier(const std::string &identifier)
Definition: MemoryPersistenceStrategy.h:141
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::getIdentifier
std::string getIdentifier()
Definition: MemoryPersistenceStrategy.h:136
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::getExportName
std::string getExportName()
Definition: MemoryPersistenceStrategy.h:131
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::DATA_FILENAME
static const constexpr char * DATA_FILENAME
Definition: MemoryPersistenceStrategy.h:166
armarx::armem::server::ltm::persistence::ItemResult
Retrieved items' data with an origin (resp.
Definition: MemoryPersistenceStrategy.h:30
memory_definitions.h
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::MemoryPersistenceStrategy
MemoryPersistenceStrategy()
Definition: MemoryPersistenceStrategy.h:63
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::identifier_
std::string identifier_
Name of the strategy.
Definition: MemoryPersistenceStrategy.h:175
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::MemoryPersistenceStrategy
MemoryPersistenceStrategy(const std::string &identifier, const std::string &exportName, bool enabled=true)
Definition: MemoryPersistenceStrategy.h:69
armarx::armem::server::ltm::persistence::ItemIdentifier::getKey
virtual std::string getKey()
armarx::armem::server::ltm::persistence::ItemIdentifier::~ItemIdentifier
virtual ~ItemIdentifier()
armarx::armem::server::ltm::persistence::ItemResult::data
std::vector< unsigned char > data
Definition: MemoryPersistenceStrategy.h:33
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::setExportName
virtual void setExportName(const std::string &exportName)
Definition: MemoryPersistenceStrategy.h:126
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::exportName_
std::string exportName_
Name of the specific memory export where our items should be stored.
Definition: MemoryPersistenceStrategy.h:181
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::retrieveItem
std::vector< unsigned char > retrieveItem(const armarx::armem::MemoryID &memoryId, ItemIdentifier itemIdentifier)
Definition: MemoryPersistenceStrategy.h:121
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::MEMORY_EXPORT_SUFFIX
static const constexpr char * MEMORY_EXPORT_SUFFIX
Definition: MemoryPersistenceStrategy.h:169
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::createPropertyDefinitions
virtual void createPropertyDefinitions(PropertyDefinitionsPtr &defs, const std::string &prefix)=0
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy::enable
virtual void enable()
Definition: MemoryPersistenceStrategy.h:156