ddt  1.0.0
ddtMemoryManager.hpp
Go to the documentation of this file.
1 
19 #ifndef DDTMEMORYMANAGER_HPP_
20 #define DDTMEMORYMANAGER_HPP_
21 
22 #include <boost/circular_buffer.hpp>
23 #include <boost/interprocess/containers/string.hpp>
24 #pragma GCC diagnostic push
25 #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
26 #include <boost/interprocess/managed_shared_memory.hpp>
27 /* ignore this boost internal warning from the file above */
28 #pragma GCC diagnostic pop
29 #include <boost/tokenizer.hpp>
30 #include <csignal>
31 #include <fstream>
32 #include <iostream>
33 
34 #include "ddt/ddtConstants.hpp"
35 #include "ddt/ddtErrorCodes.hpp"
36 #include "ddt/ddtLogger.hpp"
38 
39 namespace ip = boost::interprocess;
40 
41 namespace ddt {
42 
47 struct Shm {
51  ip::managed_shared_memory *managed_shm;
52 
57 
62 
67 };
68 
73  public:
80  DdtMemoryManager(DdtLogger *logger, const std::string broker_port);
81 
85  virtual ~DdtMemoryManager();
86 
98  int32_t CreateSharedMemory(const std::string data_stream_identifier,
99  const int32_t max_data_sample_size,
100  const int32_t number_of_samples);
101 
108  bool DeleteSharedMemory(const std::string data_stream_identifier);
109 
116  bool CheckIfShmExists(const std::string data_stream_identifier);
117 
123  int32_t get_max_data_sample_size(const std::string data_stream_identifier);
124 
130  int32_t get_number_of_samples(const std::string data_stream_identifier);
131 
138  const std::string data_stream_identifier);
139 
146  std::string get_shm_id(const std::string data_stream_identifier) const;
147 
153  int32_t GetMaxPossibleBufferSize(const int32_t max_data_sample_size);
154 
155  protected:
162  bool CheckSpaceAvailability(const int32_t max_data_sample_size,
163  const int buffer_size);
164 
169  const uint64_t GetAvailableSpace();
170 
171  private:
178  void Init(DdtLogger *ddt_logger, const std::string broker_port);
179 
183  int32_t CreateNewSharedMemory(const std::string data_stream_identifier,
184  const int32_t max_data_sample_size,
185  const int32_t number_of_samples,
186  const std::string shm_id);
187 
191  int32_t CreateCircularBuffer(const std::string data_stream_identifier,
192  const int32_t max_data_sample_size,
193  const int32_t number_of_samples);
194 
199  std::map<std::string, Shm> shm_map;
200 
201  std::mutex shm_mutex;
202  std::string port;
203  DdtLogger *logger;
204 
205  const std::string SHM_PATH = "/dev/shm";
206  const int AVAILABLE_POSITION = 3;
207  const int BYTES_PER_KBYTE = 1024;
208  static const int CHAR_LEN = 128;
209  const int PERM_TYPE = 0664;
210  const int NO_SUCH_SHM = 7;
211 };
212 
213 } // namespace ddt
214 
215 #endif /* DDTMEMORYMANAGER_HPP_ */
216 
Definition: ddtLogger.hpp:51
Definition: ddtMemoryAccessor.hpp:274
Definition: ddtMemoryManager.hpp:72
DdtMemoryAccessor * get_memory_accessor(const std::string data_stream_identifier)
Definition: ddtMemoryManager.cpp:323
std::string get_shm_id(const std::string data_stream_identifier) const
Definition: ddtMemoryManager.cpp:36
int32_t GetMaxPossibleBufferSize(const int32_t max_data_sample_size)
Definition: ddtMemoryManager.cpp:375
bool CheckIfShmExists(const std::string data_stream_identifier)
Definition: ddtMemoryManager.cpp:46
bool DeleteSharedMemory(const std::string data_stream_identifier)
Definition: ddtMemoryManager.cpp:269
int32_t get_number_of_samples(const std::string data_stream_identifier)
Definition: ddtMemoryManager.cpp:310
virtual ~DdtMemoryManager()
const uint64_t GetAvailableSpace()
Definition: ddtMemoryManager.cpp:336
DdtMemoryManager(DdtLogger *logger, const std::string broker_port)
Definition: ddtMemoryManager.cpp:23
int32_t get_max_data_sample_size(const std::string data_stream_identifier)
Definition: ddtMemoryManager.cpp:297
int32_t CreateSharedMemory(const std::string data_stream_identifier, const int32_t max_data_sample_size, const int32_t number_of_samples)
Definition: ddtMemoryManager.cpp:59
bool CheckSpaceAvailability(const int32_t max_data_sample_size, const int buffer_size)
Definition: ddtMemoryManager.cpp:387
Contains common used constants. This file shall contain constants that can be used by all application...
Contains common used error codes. This file shall contain error codes that can be used by all applica...
Class to wrap the usage of log4cplus as logging utility. This file provides a wrapper class for the u...
Accessor for a shared memory. This class provides the functionalities to access created shared memori...
Definition: ddtClient.hpp:39
Definition: ddtMemoryManager.hpp:47
int number_of_samples
Definition: ddtMemoryManager.hpp:61
int max_data_sample_size
Definition: ddtMemoryManager.hpp:56
ip::managed_shared_memory * managed_shm
Definition: ddtMemoryManager.hpp:51
DdtMemoryAccessor * memory_accessor
Definition: ddtMemoryManager.hpp:66