ddt 1.4.0
 
Loading...
Searching...
No Matches
ddtMemoryManager.hpp
Go to the documentation of this file.
1
9
10#ifndef DDTMEMORYMANAGER_HPP_
11#define DDTMEMORYMANAGER_HPP_
12
13#include <boost/circular_buffer.hpp>
14#include <boost/interprocess/containers/string.hpp>
15#pragma GCC diagnostic push
16#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
17#include <boost/interprocess/managed_shared_memory.hpp>
18/* ignore this boost internal warning from the file above */
19#pragma GCC diagnostic pop
20#include <boost/tokenizer.hpp>
21#include <csignal>
22#include <fstream>
23#include <iostream>
24
25#include "ddt/ddtConstants.hpp"
26#include "ddt/ddtErrorCodes.hpp"
27#include "ddt/ddtLogger.hpp"
29
30namespace ip = boost::interprocess;
31
32namespace ddt {
33
38struct Shm {
42 ip::managed_shared_memory *managed_shm;
43
48
53
58};
59
64 public:
71 DdtMemoryManager(DdtLogger *logger, const std::string broker_port);
72
77
89 int32_t CreateSharedMemory(const std::string data_stream_identifier,
90 const int32_t max_data_sample_size,
91 const int32_t number_of_samples);
92
99 bool DeleteSharedMemory(const std::string data_stream_identifier);
100
107 bool CheckIfShmExists(const std::string data_stream_identifier);
108
114 int32_t get_max_data_sample_size(const std::string data_stream_identifier);
115
121 int32_t get_number_of_samples(const std::string data_stream_identifier);
122
129 const std::string data_stream_identifier);
130
137 std::string get_shm_id(const std::string data_stream_identifier) const;
138
144 std::string get_shm_full_path(const std::string data_stream_identifier) const;
145
151 int32_t GetMaxPossibleBufferSize(const int32_t max_data_sample_size);
152
153 protected:
160 bool CheckSpaceAvailability(const int32_t max_data_sample_size,
161 const int buffer_size);
162
167 const uint64_t GetAvailableSpace();
168
169 private:
176 void Init(DdtLogger *ddt_logger, const std::string broker_port);
177
181 int32_t CreateNewSharedMemory(const std::string data_stream_identifier,
182 const int32_t max_data_sample_size,
183 const int32_t number_of_samples,
184 const std::string shm_id);
185
189 int32_t CreateCircularBuffer(const std::string data_stream_identifier,
190 const int32_t max_data_sample_size,
191 const int32_t number_of_samples);
192
197 std::map<std::string, Shm> shm_map;
198
199 std::mutex shm_mutex;
200 std::string port;
201 DdtLogger *logger;
202
203 const std::string SHM_PATH = "/dev/shm";
204 const int AVAILABLE_POSITION = 3;
205 const int BYTES_PER_KBYTE = 1024;
206 static const int CHAR_LEN = 128;
207 const int PERM_TYPE = 0664;
208 const int NO_SUCH_SHM = 7;
209};
210
211} // namespace ddt
212
213#endif /* DDTMEMORYMANAGER_HPP_ */
Definition ddtLogger.hpp:43
Definition ddtMemoryAccessor.hpp:265
DdtMemoryAccessor * get_memory_accessor(const std::string data_stream_identifier)
Definition ddtMemoryManager.cpp:331
std::string get_shm_full_path(const std::string data_stream_identifier) const
Definition ddtMemoryManager.cpp:38
std::string get_shm_id(const std::string data_stream_identifier) const
Definition ddtMemoryManager.cpp:28
int32_t GetMaxPossibleBufferSize(const int32_t max_data_sample_size)
Definition ddtMemoryManager.cpp:383
bool CheckIfShmExists(const std::string data_stream_identifier)
Definition ddtMemoryManager.cpp:46
bool DeleteSharedMemory(const std::string data_stream_identifier)
Definition ddtMemoryManager.cpp:277
int32_t get_number_of_samples(const std::string data_stream_identifier)
Definition ddtMemoryManager.cpp:318
virtual ~DdtMemoryManager()
const uint64_t GetAvailableSpace()
Definition ddtMemoryManager.cpp:344
DdtMemoryManager(DdtLogger *logger, const std::string broker_port)
Definition ddtMemoryManager.cpp:15
int32_t get_max_data_sample_size(const std::string data_stream_identifier)
Definition ddtMemoryManager.cpp:305
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:395
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:32
Definition ddtMemoryManager.hpp:38
int number_of_samples
Definition ddtMemoryManager.hpp:52
int max_data_sample_size
Definition ddtMemoryManager.hpp:47
ip::managed_shared_memory * managed_shm
Definition ddtMemoryManager.hpp:42
DdtMemoryAccessor * memory_accessor
Definition ddtMemoryManager.hpp:57