RedundantPersistenceStrategy.h
Go to the documentation of this file.
1 #pragma once
2 
5 
7 {
8 
9  /**
10  * Basically the option to use multiple ltm sinks as source or target.
11  * Holds a list to different persistence strategies potentially also another
12  * redundant strategy resulting in tree structure.
13  *
14  * Why the name 'redundant'?
15  * -> Comes from the possibility to search in multiple ltm sinks for an item or store item to different
16  * sinks that are potentially at different location/different implementations.
17  * But you won't find any more redundancies features.
18  *
19  * What if an item key occurs multiple times?
20  * -> FIFO: Strategy that was added first is choosen. In case we have a tree, you go from "left to right through the graph".
21  */
23  {
24  public:
25  RedundantPersistenceStrategy() = default;
26 
27  RedundantPersistenceStrategy(std::vector<std::shared_ptr<MemoryPersistenceStrategy>>& strategies) : strategies_(strategies)
28  {
29 
30  }
31 
32  /**
33  * Returns all containers over all strategies.
34  * Duplicates are not treated.
35  */
36  std::vector<std::string> getContainerKeys(const armarx::armem::MemoryID& id) override
37  {
38  std::vector<std::string> keys;
39 
40  for (auto& strategy : strategies_)
41  {
42  std::vector<std::string> strategyKeys = strategy->getContainerKeys(id);
43  keys.insert(keys.end(), strategyKeys.begin(), strategyKeys.end());
44  }
45 
46  return keys;
47  }
48 
49  /**
50  * Returns all items over all strategies.
51  * Duplicates are not treated.
52  */
53  std::vector<std::string> getItemKeys(const armarx::armem::MemoryID& id) override
54  {
55  std::vector<std::string> keys;
56 
57  for (auto& strategy : strategies_)
58  {
59  std::vector<std::string> strategyKeys = strategy->getItemKeys(id);
60  keys.insert(keys.end(), strategyKeys.begin(), strategyKeys.end());
61  }
62 
63  return keys;
64  }
65 
66  /**
67  * Checks if any strategy contains the container.
68  */
69  bool containsContainer(const armarx::armem::MemoryID& id, std::string key) override
70  {
71  for (auto& s : strategies_)
72  {
73  if (s->containsContainer(id, key))
74  {
75  return true;
76  }
77  }
78 
79  return false;
80  }
81 
82  /**
83  * Checks if any strategy contains the item.
84  */
85  bool containsItem(const armarx::armem::MemoryID& id, std::string key) override
86  {
87  for (auto& s : strategies_)
88  {
89  if (s->containsItem(id, key))
90  {
91  return true;
92  }
93  }
94 
95  return false;
96  }
97 
98  /**
99  * Stores the item to every strategy
100  */
101  void storeItem(const armarx::armem::MemoryID& id, const std::string key, std::vector<unsigned char>& data) override
102  {
103  for (auto& s : strategies_)
104  {
105  s->storeItem(id, key, data);
106  }
107  }
108 
109  /**
110  * Retrieves the data of the item following the FIFO principle (if the item exists at any strategy).
111  */
112  std::vector<unsigned char> retrieveItem(const armarx::armem::MemoryID& id, std::string key) override
113  {
114  for (auto& s : strategies_)
115  {
116  if (s->containsItem(id, key))
117  {
118  return s->retrieveItem(id, key);
119  }
120  }
121 
122  return std::vector<unsigned char>();
123  }
124 
125  ItemResult retrieveItemWithOrigin(const armarx::armem::MemoryID& id, std::string& key) override
126  {
127  for (auto& s : strategies_)
128  {
129  if (s->containsItem(id, key))
130  {
131  return s->retrieveItemWithOrigin(id, key);
132  }
133  }
134 
135  return {"undefined4", std::vector<unsigned char>()};
136  }
137 
138 
139  /**
140  * Sets the export name for all strategies
141  */
142  void setExportName(const std::string& exportName) override
143  {
144  exportName_ = exportName;
145 
146  for (auto& s : strategies_)
147  {
148  s->setExportName(exportName);
149  }
150  }
151 
152  /**
153  * Add another strategy to the end.
154  * Will be last in the item/container FIFO.
155  */
156  void addStrategy(std::shared_ptr<MemoryPersistenceStrategy> strategy)
157  {
158  strategies_.emplace_back(strategy);
159  }
160 
161  /**
162  * Removes all strategies
163  */
165  {
166  strategies_.clear();
167  }
168 
169  void createPropertyDefinitions(PropertyDefinitionsPtr& defs, const std::string& prefix) override
170  {
171  for (auto& s : strategies_)
172  {
173  s->createPropertyDefinitions(defs, prefix);
174  }
175  }
176 
177  bool isEnabled() override
178  {
179  bool enabled = false;
180 
181  for (auto&s : strategies_)
182  {
183  enabled &= s->isEnabled();
184  }
185 
186  return enabled;
187  }
188 
189  void disable() override
190  {
191  for (auto&s : strategies_)
192  {
193  s->disable();
194  }
195  }
196 
197  void enable() override
198  {
199  for (auto&s : strategies_)
200  {
201  s->enable();
202  }
203  }
204 
205 
206  private:
207  std::vector<std::shared_ptr<MemoryPersistenceStrategy>> strategies_;
208  };
209 } // namespace armarx::armem::server::ltm::persistence
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy
Basically the option to use multiple ltm sinks as source or target.
Definition: RedundantPersistenceStrategy.h:22
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::getContainerKeys
std::vector< std::string > getContainerKeys(const armarx::armem::MemoryID &id) override
Returns all containers over all strategies.
Definition: RedundantPersistenceStrategy.h:36
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::clearStrategies
void clearStrategies()
Removes all strategies.
Definition: RedundantPersistenceStrategy.h:164
armarx::armem::server::ltm::persistence::MemoryPersistenceStrategy
Abstract memory persistence strategy (resp.
Definition: MemoryPersistenceStrategy.h:61
MemoryPersistenceStrategy.h
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::disable
void disable() override
Definition: RedundantPersistenceStrategy.h:189
MemoryID.h
armarx::armem::server::ltm::persistence
Definition: DiskPersistence.cpp:5
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::containsContainer
bool containsContainer(const armarx::armem::MemoryID &id, std::string key) override
Checks if any strategy contains the container.
Definition: RedundantPersistenceStrategy.h:69
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::containsItem
bool containsItem(const armarx::armem::MemoryID &id, std::string key) override
Checks if any strategy contains the item.
Definition: RedundantPersistenceStrategy.h:85
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::isEnabled
bool isEnabled() override
Definition: RedundantPersistenceStrategy.h:177
armarx::armem::MemoryID
A memory ID.
Definition: MemoryID.h:47
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::addStrategy
void addStrategy(std::shared_ptr< MemoryPersistenceStrategy > strategy)
Add another strategy to the end.
Definition: RedundantPersistenceStrategy.h:156
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
enabled
std::atomic< bool > * enabled
Definition: RemoteGuiWidgetController.cpp:75
armarx::armem::server::ltm::persistence::ItemResult
Retrieved items' data with an origin (resp.
Definition: MemoryPersistenceStrategy.h:30
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::setExportName
void setExportName(const std::string &exportName) override
Sets the export name for all strategies.
Definition: RedundantPersistenceStrategy.h:142
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::getItemKeys
std::vector< std::string > getItemKeys(const armarx::armem::MemoryID &id) override
Returns all items over all strategies.
Definition: RedundantPersistenceStrategy.h:53
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::createPropertyDefinitions
void createPropertyDefinitions(PropertyDefinitionsPtr &defs, const std::string &prefix) override
Definition: RedundantPersistenceStrategy.h:169
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::enable
void enable() override
Definition: RedundantPersistenceStrategy.h:197
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::RedundantPersistenceStrategy
RedundantPersistenceStrategy(std::vector< std::shared_ptr< MemoryPersistenceStrategy >> &strategies)
Definition: RedundantPersistenceStrategy.h:27
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::retrieveItemWithOrigin
ItemResult retrieveItemWithOrigin(const armarx::armem::MemoryID &id, std::string &key) override
Retrieves the actual data but also appends the origin which is in this case the strategy identifier.
Definition: RedundantPersistenceStrategy.h:125
armarx::ctrlutil::s
double s(double t, double s0, double v0, double a0, double j)
Definition: CtrlUtil.h:33
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::storeItem
void storeItem(const armarx::armem::MemoryID &id, const std::string key, std::vector< unsigned char > &data) override
Stores the item to every strategy.
Definition: RedundantPersistenceStrategy.h:101
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::RedundantPersistenceStrategy::RedundantPersistenceStrategy
RedundantPersistenceStrategy()=default
armarx::armem::server::ltm::persistence::RedundantPersistenceStrategy::retrieveItem
std::vector< unsigned char > retrieveItem(const armarx::armem::MemoryID &id, std::string key) override
Retrieves the data of the item following the FIFO principle (if the item exists at any strategy).
Definition: RedundantPersistenceStrategy.h:112